Commit graph

54168 commits

Author SHA1 Message Date
nate-berri
2011004d0a
refactor(types): move MemberDeleteRequest into litellm.types.proxy.management_endpoints.team_endpoints (#45814)
* refactor(types): move LitellmUserRoles and KeyManagementRoutes into litellm.types.proxy.auth.user_roles

Part of LIT-9423

* refactor(types): annotate GenerateRequestBase containers and check_max_budget

Part of LIT-9423

* refactor(types): move GenerateRequestBase and LiteLLM_ObjectPermissionBase into litellm.types.proxy.management_endpoints.request_base

Part of LIT-9423

* refactor(types): annotate user request metadata and check_user_info validators

Part of LIT-9423

* refactor(types): move user request models into litellm.types.proxy.management_endpoints.user_requests

Part of LIT-9423

* refactor(types): move MemberDeleteRequest into litellm.types.proxy.management_endpoints.team_endpoints

Part of LIT-9423

* fix(types): restore main's _types.py content alongside the request_base move

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

* style(types): merge request_base re-exports into one import block

Part of LIT-9423

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:58:46 +00:00
nate-berri
513e7a89ac
refactor(types): move user request models into litellm.types.proxy.management_endpoints.user_requests (#45813)
* refactor(types): move LitellmUserRoles and KeyManagementRoutes into litellm.types.proxy.auth.user_roles

Part of LIT-9423

* refactor(types): annotate GenerateRequestBase containers and check_max_budget

Part of LIT-9423

* refactor(types): move GenerateRequestBase and LiteLLM_ObjectPermissionBase into litellm.types.proxy.management_endpoints.request_base

Part of LIT-9423

* refactor(types): annotate user request metadata and check_user_info validators

Part of LIT-9423

* refactor(types): move user request models into litellm.types.proxy.management_endpoints.user_requests

Part of LIT-9423

* fix(types): restore main's _types.py content alongside the request_base move

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

* style(types): merge request_base re-exports into one import block

Part of LIT-9423

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:58:11 +00:00
nate-berri
c9d706adb5
refactor(types): move key request models into litellm.types.proxy.management_endpoints.key_requests (#45810)
* refactor(types): move LitellmUserRoles and KeyManagementRoutes into litellm.types.proxy.auth.user_roles

Part of LIT-9423

* refactor(types): annotate GenerateRequestBase containers and check_max_budget

Part of LIT-9423

* refactor(types): move GenerateRequestBase and LiteLLM_ObjectPermissionBase into litellm.types.proxy.management_endpoints.request_base

Part of LIT-9423

* refactor(types): annotate key request containers and drop_blank_team_id

Part of LIT-9423

* refactor(types): move key request models into litellm.types.proxy.management_endpoints.key_requests

Part of LIT-9423

* fix(types): keep MappingProxyType exported from litellm.proxy._types for star importers

Part of LIT-9423

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main
2026-10-10 20:58:07 +00:00
devin-ai-integration[bot]
dc95de5209
feat(otel)!: let a team capture_message_content override the global setting for its OTel v2 destination (#44264)
* feat(otel): let a team strip captured message content from its own OTel v2 destination

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* refactor(proxy): split the shared callback option conflict check and sync dashboard API types

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(otel): address review feedback on team capture_message_content

Classify capture_message_content as NotSecret in the credential slot registry, inject test exporters through register_exporter_factory instead of patching _exporter_from_spec, type the test helpers, and stop reassigning processor in build_tracer_provider

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(otel): add integration cells for team capture_message_content

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(otel): cover weave_otel and newrelic team destinations in capture_message_content cells

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(otel): stop rejecting client-sent capture_message_content at the request body boundary

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* feat(otel): let a team capture_message_content override the global setting in both directions

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(otel): keep a team's capture_message_content on its own OTel v2 destination

The setting no longer rides the flattened team callback vars, so a sibling destination and a routed provider follow the global mode. Request bodies get the base 400 back, a failure-only entry rejects the setting, and entries for one backend must agree

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(otel): type the capture_message_content callback validation tests

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(otel): type the remaining capture_message_content test signatures

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(otel): mark the new capture_message_content test locals Final

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(otel): default tenant capture to callback_settings.otel and keep CaptureMessageContent formatting bare

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(otel): keep CaptureMessageContent a plain str like main

The str-to-Enum switch changed the public type: the config field's type,
repr and model_dump, a constructor that now raised on unknown values, and
unknown env values coerced to no_content. CaptureMessageContent is the plain
str subclass main ships again, the field is a str, and a
captures_span_content helper replaces the enum property. A test pins that a
published preset's capture mode stays the default for an unowned
destination, which is what main forwards.

* test(otel): drop the module-level CaptureMessageContent import the rewritten test no longer uses

* fix(lint): keep the merged branch within main's type budgets

Freeze the capture-mode settings model (LIT015) and read stored logging
entries through one typed sequence helper, so the conflicting-capture checks
add no unknown types.

* fix(otel): reject a destination capture_message_content while OTel v2 is off

The legacy OTel callbacks never read the per-destination setting, so a team
could register no_content and still export prompts and replies under the
global capture mode. Registration now refuses the var unless the proxy runs
with LITELLM_OTEL_V2=true, the same rule the Arize transport and New Relic
routing vars follow.

* test(otel): type the OTel v2 fixtures and the v2-off regression test

* fix(otel): accept only no_content and span_only on a team or key destination

OTel v2 writes captured content only to span attributes, so event_only
behaved like no_content and span_and_event like span_only on a
destination. The proxy-wide setting keeps all four values

* docs(otel): say an omitted capture setting follows the proxy's own callback for that backend

* test(otel): describe the general capture fallback in the unowned destination test

---------

Co-authored-by: mrinal <mrinal@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: yucheng-berri <yucheng@berri.ai>
Co-authored-by: yucheng-berri <293926326+yucheng-berri@users.noreply.github.com>
2026-10-10 13:52:32 -07:00
nate-berri
3981228d70
refactor(anthropic): move raw SSE stream assembly helpers out of proxy guardrails (#45749)
* refactor(anthropic): move passthrough SSE stream assembly into litellm/llms

Part of LIT-9423

* refactor(anthropic): move raw SSE stream assembly helpers out of proxy guardrails

Part of LIT-9423

* refactor(anthropic): give the anthropic_sse re-exports reasoned noqa codes

Part of LIT-9423

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

* test(anthropic): cover the raw SSE helpers in stream_assembly

Part of LIT-9423
2026-10-10 20:35:49 +00:00
yuneng-jiang
f58c86f1d7
perf(ci): use native timing splits with bounded integration concurrency (#45837)
* perf(ci): use native timing splits with bounded integration concurrency

* fix(ci): make integration parallelism opt in
2026-10-10 13:35:11 -07:00
nate-berri
981710fab8
refactor(types): move GenerateRequestBase and LiteLLM_ObjectPermissionBase into litellm.types.proxy.management_endpoints.request_base (#45802)
* refactor(types): move LitellmUserRoles and KeyManagementRoutes into litellm.types.proxy.auth.user_roles

Part of LIT-9423

* refactor(types): annotate GenerateRequestBase containers and check_max_budget

Part of LIT-9423

* refactor(types): move GenerateRequestBase and LiteLLM_ObjectPermissionBase into litellm.types.proxy.management_endpoints.request_base

Part of LIT-9423

* fix(types): restore main's _types.py content alongside the request_base move

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

* style(types): merge request_base re-exports into one import block

Part of LIT-9423

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:35:07 +00:00
nate-berri
2374b0c398
refactor(types): annotate key request containers and drop_blank_team_id (#45809)
* refactor(types): annotate key request containers and drop_blank_team_id

Part of LIT-9423

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:34:39 +00:00
nate-berri
12c36b054b
refactor(constants): move AUTH_OBJECTS_TARGET into litellm.constants (#45779)
* refactor(constants): move AUTH_OBJECTS_TARGET into litellm.constants

Part of LIT-9423

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:33:58 +00:00
devin-ai-integration[bot]
5325c4a236
feat(proxy): per-model team member budgets with router fallback (#43887)
Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:33:55 +00:00
nate-berri
7383f59ad2
refactor(skills): move NewSkillRequest to litellm.models.skills (#45768)
* refactor(skills): move NewSkillRequest to litellm.models.skills

Part of LIT-9423

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:33:16 +00:00
Yassin Kortam
3a0803aaa1
fix(ui): store SSO exchange token via storeLoginToken to keep Secure flag (#45840)
Co-authored-by: Nabil Ameena <nabilaameena@users.noreply.github.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 13:33:03 -07:00
Marcus Greer
4e44b382fd
fix(terraform): stop sending blocked on litellm_user updates (#45410)
* fix(terraform): stop sending blocked on litellm_user updates

/user/update writes blocked into the user table upsert, but blocked only
exists as a column on keys, so every litellm_user update failed with a 400
from Prisma. Updates no longer send it. Create sends it only when set to
true, since /user/new applies it to the auto-created key

blocked only applies at creation; litellm_key_block covers changes after that

* fix(terraform): always send blocked on litellm_user create

/user/new fills an omitted blocked from default_internal_user_params, so
leaving it out on create let a proxy-side blocked=true default block the
auto-created key. Create sends the configured value again, including
false, while updates still never send it

* chore(terraform): drop comment on litellm_user create blocked

* fix(terraform): keep litellm_user blocked undeprecated

Create sends blocked again, so it still controls the auto-created key.
Whether to deprecate it in favor of litellm_key_block is left to the
provider maintainers; the docs describe it as creation-only instead
2026-10-10 13:32:54 -07:00
nate-berri
c397b57f2b
refactor(anthropic): move prompt cache pricing helper out of the proxy package (#45753)
* refactor(anthropic): move prompt cache pricing helper out of the proxy package

Part of LIT-9423

* fix(sdk): resolve litellm.proxy lazily on attribute access

The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 20:32:34 +00:00
nate-berri
691ca03266
fix(sdk): resolve litellm.proxy lazily on attribute access (#45845)
The layer cleanup stopped import litellm from loading any proxy module, so litellm.proxy was no longer bound and litellm.proxy._types.X raised AttributeError. The module __getattr__ now imports litellm.proxy on first access, which keeps import litellm free of proxy._types and fixes the docs and code-quality checks on main
2026-10-10 13:20:31 -07:00
Yassin Kortam
cf1284f3d5
fix(proxy-extras): bound migration DDL lock waits with lock_timeout and retry (#45389)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 12:52:52 -07:00
devin-ai-integration[bot]
b72bfa735b
fix(ui): show the team member budget on keys without their own budget (#43927)
Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 12:36:59 -07:00
devin-ai-integration[bot]
77b6d048df
fix(proxy): let configured pass-through endpoints outrank built-in provider prefix routes (#44133)
Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 12:26:17 -07:00
Yassin Kortam
cb73bad48a
fix(caching): give RedisClusterCache one async client per event loop (#45784)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 12:23:45 -07:00
Yassin Kortam
3f16213906
feat(usage): add top users by spend and user activity views (#45310)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 12:21:43 -07:00
nate-berri
7831d8a991
refactor(types): move is_jwt into litellm.types.proxy.auth.user_api_key_auth (#45747)
* refactor(types): move LitellmUserRoles and KeyManagementRoutes into litellm.types.proxy.auth.user_roles

Part of LIT-9423

* refactor(types): move is_jwt into litellm.types.proxy.auth.user_api_key_auth

Part of LIT-9423

* refactor(auth): alias is_jwt import so JWTHandler.is_jwt is not read as recursive
2026-10-10 19:08:56 +00:00
nate-berri
a859d844ed
refactor(types): annotate user request metadata and check_user_info validators (#45808)
Part of LIT-9423
2026-10-10 19:08:31 +00:00
nate-berri
b7d48ecd28
refactor(types): annotate GenerateRequestBase containers and check_max_budget (#45801)
Part of LIT-9423
2026-10-10 19:08:25 +00:00
nate-berri
dec8ec5daa
refactor(types): type UserAPIKeyAuth, its token view and hash_token in place (#45799)
Part of LIT-9423
2026-10-10 19:08:14 +00:00
nate-berri
c9e0ec8719
refactor(responses): move ColdStorageHandler out of proxy into litellm_core_utils (#45783)
Part of LIT-9423
2026-10-10 19:08:04 +00:00
nate-berri
d1c4d0666f
refactor(repositories): import proxy helpers inside the methods that use them (#45781)
Part of LIT-9423
2026-10-10 19:07:53 +00:00
nate-berri
0fc6d4d16d
refactor(types): move complexity router request models next to their base config (#45780)
* refactor(types): move complexity router request models next to their base config

Part of LIT-9423

* test(types): cover the old auto-router import path for the moved request models

Part of LIT-9423
2026-10-10 19:07:41 +00:00
nate-berri
4606bf532e
refactor(types): import litellm lazily in prometheus types helpers (#45776)
Part of LIT-9423
2026-10-10 19:07:32 +00:00
nate-berri
9d559d8579
refactor(core): move path_utils from proxy common_utils to litellm_core_utils (#45775)
Part of LIT-9423
2026-10-10 19:07:22 +00:00
nate-berri
13191e5b66
refactor(types): import CustomLogger and CustomLLM under TYPE_CHECKING in adapter TypedDicts (#45774)
Part of LIT-9423
2026-10-10 19:07:11 +00:00
nate-berri
d02dc43154
refactor(responses): move responses_api_bridge_check out of litellm.main (#45772)
Part of LIT-9423
2026-10-10 19:07:00 +00:00
nate-berri
8d510a6b1b
refactor(cost-calc): move cache token extractors out of proxy savings (#45771)
Part of LIT-9423
2026-10-10 19:06:49 +00:00
nate-berri
9e3cd2f0a4
refactor: move stream_chunk_builder into streaming_chunk_builder_utils (#45766)
Part of LIT-9423
2026-10-10 19:06:41 +00:00
nate-berri
8f047e0a33
refactor(types): move PassThroughGuardrailSettings into the pass-through types module (#45763)
Part of LIT-9423
2026-10-10 19:06:30 +00:00
nate-berri
9c8083e323
refactor(types): move slack alerting leaf types out of proxy/_types.py (#45752)
Part of LIT-9423
2026-10-10 19:06:22 +00:00
nate-berri
ebf2156ec4
refactor(anthropic): move prompt cache observation lookup out of the proxy hook (#45748)
* refactor(anthropic): move prompt cache observation lookup out of the proxy hook

Part of LIT-9423

* test(internal_context): exempt moved prompt cache lookup helper from key-family check
2026-10-10 19:06:16 +00:00
nate-berri
38880fd5ce
refactor(types): move CommonProxyErrors into litellm/types/proxy (#45745)
Part of LIT-9423
2026-10-10 19:06:04 +00:00
nate-berri
396e8d1e6c
refactor(llms): move typesafe passthrough logging handler out of proxy (#45742)
Part of LIT-9423
2026-10-10 19:05:58 +00:00
nate-berri
3fafd0062a
refactor(types): import team and user table models from litellm.models (#45740)
Part of LIT-9423
2026-10-10 19:05:47 +00:00
nate-berri
7f5abfffb4
refactor(anthropic): move passthrough SSE stream assembly into litellm/llms (#45744)
Part of LIT-9423
2026-10-10 19:05:37 +00:00
nate-berri
a3f05fb52f
refactor(types): move LitellmUserRoles and KeyManagementRoutes into litellm.types.proxy.auth.user_roles (#45741)
Part of LIT-9423
2026-10-10 19:05:26 +00:00
nate-berri
6c71452355
refactor(skills): import LiteLLM_SkillsTable from litellm.models (#45737)
Part of LIT-9423
2026-10-10 19:05:15 +00:00
berriai-litellm-provider-info-sync[bot]
290ac3d4d2
fix(bedrock): price the regionless Kimi K2.5 and K2 Thinking rows from the us-east-1 Bedrock price map (#45836)
Price-Sync: litellm-providers

Co-authored-by: berriai-litellm-provider-info-sync[bot] <328147090+berriai-litellm-provider-info-sync[bot]@users.noreply.github.com>
2026-10-10 12:00:47 -07:00
devin-ai-integration[bot]
6fcf9ef62d
feat(proxy): require trace IDs per team on LLM, MCP and agent requests (#44933)
* feat(proxy): require trace IDs per team on LLM, MCP and agent requests

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(proxy): assert trace ID authorization outcomes

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): clear trace ID type gate errors

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* style(proxy): format trace ID type check

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): validate trace ID metadata

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): use read-only trace metadata types

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): skip trace ID metadata validation for teams without dict metadata

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* perf(proxy): check team trace ID setting before route matching

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 11:50:28 -07:00
devin-ai-integration[bot]
b9c49aeb35
fix(proxy): keep the parsed key when the custom key header is absent (#44469)
Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 11:48:04 -07:00
tin-berri
09558baca6
fix: route OpenAI cyber policy errors to content policy fallbacks (#45828)
* fix: route OpenAI cyber policy errors to content policy fallbacks

* test: verify cyber policy errors preserve upstream responses
2026-10-10 18:34:13 +00:00
devin-ai-integration[bot]
30cbf6bac7
fix(proxy): exempt zero-spend MCP discovery routes from budget checks (#41276)
Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 11:33:34 -07:00
devin-ai-integration[bot]
5b5187ecbd
fix(proxy): bound spend-log cleanup delete transactions to the statement timeout (#43279)
Each spend-log delete batch and the remaining-rows probe ran inside a
prisma interactive transaction with the default 5s timeout while setting a
30s Postgres statement and lock timeout. A batch that waited on a lock for
more than 5s was closed by the query engine with a 422 and rolled back, and
after three such batches the cleanup run aborted with nothing deleted.

Reuse the partition manager's bounded_tx, which sizes the prisma timeout to
the statement bound plus commit slack, for the delete batch and the probe.

Resolves LIT-8686

Co-authored-by: yassin <yassin@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 11:30:20 -07:00
devin-ai-integration[bot]
33b9d846b0
fix(ui): expose both decisions playground endpoints (#45817)
* fix(ui): simplify playground decision endpoint

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(ui): expose both decision API shapes in playground

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(ui): omit undiscovered decision models from examples

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(ui): align decisions form and response views

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: kerry <kerry@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-10 11:23:30 -07:00
moe-berri
65831b8de9
fix(ui): load embedded Lens styles in the gateway (#45829)
Load the Lens package stylesheet so embedded pages retain their toolbar layout, header alignment, and content margins.
2026-10-10 18:18:32 +00:00