Verify Docker Image Signature
All LiteLLM Docker images are signed with cosign. Every release is signed with the same key introduced in commit 0112e53.
Verify using the pinned commit hash (recommended):
A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
ghcr.io/berriai/litellm:v1.97.0Verify using the release tag (convenience):
Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.97.0/cosign.pub \
ghcr.io/berriai/litellm:v1.97.0Expected output:
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
What's Changed
- feat(proxy): resolve Cursor thinking/fast model-name suffixes on /cursor/chat/completions by @mateo-berri in #35554
- fix(team-callbacks): actually stop logging when disable_logging is called by @yucheng-berri in #35520
- refactor(lint): drop redundant !s f-string conversion flags and fix displaced import-group comments by @mateo-berri in #35546
- fix(proxy): backfill null user_email on existing users during JWT auth by @devin-ai-integration[bot] in #34588
- feat(playground): add non-streaming response toggle by @ryan-crabbe-berri in #35560
- feat(teams): apply default organization to new teams from default team settings by @ryan-crabbe-berri in #35540
- fix(ui): block Playground page for viewer roles on direct URL access by @ryan-crabbe-berri in #35676
- fix(caching): close evicted LLM clients so their connections are reclaimed by @yassin-berriai in #35492
- chore(deps): update brace-expansion, postcss, and gitpython to current patch releases by @yuneng-berri in #35692
- refactor(ui): rename the create MCP server component to PascalCase by @yuneng-berri in #35686
- fix(openai): drop undefined Union from owns_wrapped_http_client annotation by @ryan-crabbe-berri in #35706
- fix(openai): drop the undefined Union from owns_wrapped_http_client by @devin-ai-integration[bot] in #35704
- chore(ui): note Google's Agent Platform rename in vector store setup by @ryan-crabbe-berri in #28076
- fix(proxy): apply key/team router_settings.model_group_alias by @yassin-berriai in #35486
- feat(complexity_router): default session affinity off and expose it in the UI by @tin-berri in #35714
- fix(datadog): read team callback dd_* params from kwargs instead of blocked dynamic params (#35115 port) by @ryan-crabbe-berri in #35687
- refactor(ui): extract the MCP create form's logic and field groups by @yuneng-berri in #35694
- test(ui): tier the MCP create tests into unit and integration by @yuneng-berri in #35697
- fix(proxy): redact credential headers from request logging copies by @yucheng-berri in #35678
- feat(guardrails/rubrik): prompt moderation, response-text blocking, streaming buffer, failure logging by @devin-ai-integration[bot] in #35722
- fix(ui): render Responses API request and response in the logs drawer by @yuneng-berri in #35718
- fix(ui): hide guardrail review buttons from non-admin users by @ryan-crabbe-berri in #27535
- feat(team): custom metadata validation hook for team create and update by @yuneng-berri in #33353
- ci(circleci): install a pinned Rust toolchain on the Linux jobs by @yuneng-berri in #35519
- fix(bedrock): stop forwarding no-op toolSpec.strict to Converse by @tin-berri in #35688
- fix(ui): reject an auto-router keyword rule left empty instead of dropping it by @tin-berri in #35705
- fix(guardrails/rubrik): attribute blocked requests to the caller that made them by @yucheng-berri in #35734
- fix(responses): forward client headers to the provider on /v1/responses by @devin-ai-integration[bot] in #34531
- feat(spend): add net auto-router savings to the cost-optimization dashboard by @tin-berri in #35521
- chore(typing): clear basedpyright Any errors in budget reset, access groups, and cache settings by @mateo-berri in #35719
- fix(spend): read what a request cost from the record instead of pricing it again by @tin-berri in #35736
- perf: install hiredis so redis-py parses replies with its C parser by @Classic298 in #35709
- feat(ui): show auto-router savings on the cost-optimization dashboard by @tin-berri in #35522
- perf: build log messages lazily so filtered-out log records cost nothing by @Classic298 in #35703
- fix(proxy): retry model cost map fetch with Retry-After-aware backoff and keep current map on reload failure by @ryan-crabbe-berri in #35739
- feat(otel): stamp service tier attributes on inference spans by @devin-ai-integration[bot] in #35679
- fix(proxy): log the model cost map reload failure lazily by @tin-berri in #35750
- fix(groq): translate web_search_options to the browser_search tool by @hMED22 in #34971
- feat(ui): add admin-configurable user banner by @yuneng-berri in #35729
- fix(e2e): make spend-counter redis connection env-driven for non-cluster deployments by @yuneng-berri in #35732
- fix(proxy): make /cursor/chat/completions work with Cursor agent mode by @tin-berri in #34029
- fix(proxy): propagate user_email and bind api_key on JWT auth attribution paths by @devin-ai-integration[bot] in #34331
- chore(build): move the Admin UI toolchain to Node 24 by @yuneng-berri in #35801
- test(e2e): vendor API strategy coverage across endpoints by @mubashir1osmani in #34649
- chore(deps): upgrade cryptography to 50.0.0 by @yuneng-berri in #35803
- test(e2e): cover legacy text /completions endpoint by @mubashir1osmani in #34431
- feat(gemini): add gemini-robotics-er-2-preview and gemini-robotics-er-1.6-preview by @devin-ai-integration[bot] in #35555
- test(e2e): move load/perf testing out of the main suite and drop the vllm passthrough test by @yuneng-berri in #35820
- feat(lint): enforce Final on locals and freeze function parameters (LIT010, LIT011) by @mateo-berri in #35807
- chore: bump litellm-proxy-extras 0.4.81 -> 0.4.82, litellm 1.96.0 -> 1.97.0 by @yuneng-berri in #35810
- fix(bedrock): drop conflicting tool_choice.type when toolConfig.toolChoice is set by @devin-ai-integration[bot] in #35738
- docs(CLAUDE.md): prefer commas over semicolons when replacing em dashes by @mateo-berri in #35825
- chore(lint): zero out basedpyright headroom for purely local rules by @mateo-berri in #35828
- test(e2e): retry provider-transient statuses at the transport with bounded backoff by @yuneng-berri in #35824
- chore(ci): promote internal staging to main by @yuneng-berri in #35836
- refactor(ui): route MCP session tokens through the shared storage helper by @yuneng-berri in #35835
- docs(helm): replace the classic chart's 128Mi resource example with the documented 4Gi sizing by @yassin-berriai in #35830
- fix(proxy): persist periodic reload schedule state so status survives restarts and fires without store_model_in_db by @ryan-crabbe-berri in #35165
- fix(router): eagerly fetch Vertex AI deferred stream to surface HTTP errors in _acompletion fallback path by @deepanshululla in #34627
- fix(azure_storage): honor AZURE_STORAGE_ENDPOINT_SUFFIX for sovereign clouds by @yucheng-berri in #35806
- fix(proxy): apply key_alias/key_hash filters to all /key/list visibility branches by @ryan-crabbe-berri in #35840
- fix(proxy): enforce per-model budgets against resolved cursor model variants by @mateo-berri in #35834
- feat(ui): reorder Add Auto Router into name + template, with a collapsible detailed config by @tin-berri in #35746
- test: repair three failing suites on litellm_internal_staging by @yuneng-berri in #35845
- fix(guardrails): scan model output on the /openai/v1/responses alias by @yucheng-berri in #35818
- ci: pin Node on the Playwright UI lanes so npm ci meets the engines floor by @yuneng-berri in #35848
- fix(pricing): apply OpenAI's gpt-5.6 terra/luna cut to Azure cost map by @mubashir1osmani in #35481
- feat(spend): add caller-scoped key/user/team/organization spend report endpoints by @yuneng-berri in #35725
- revert: "fix(caching): close evicted LLM clients so their connections are reclaimed (#35492)" by @mateo-berri in #35856
- refactor(repositories): add prisma protocol seams and a spend-reset unit of work by @mateo-berri in #35748
- perf(streaming): assemble streamed tool-call arguments in linear time by @mateo-berri in #35826
- fix(s3_v2): sign S3 object URLs with S3SigV4Auth so encoded paths verify by @devin-ai-integration[bot] in #35726
- test(e2e): self-seed the ui suite's password-login users in global setup by @yuneng-berri in #35863
- fix(claude-code): create-only skill registration with a PUT update route (LIT-4110) by @ryan-crabbe-berri in #31752
- fix(proxy): fix zguard httpcode when block input by @jwang-gif in #31948
- fix(lint): pick the merge-aware base so in-progress merges are not blamed for base drift by @mateo-berri in #35868
- chore: bump litellm-proxy-extras 0.4.82 -> 0.4.83 by @yuneng-berri in #35877
- feat(ui): add Test Routing to the auto router create form by @devin-ai-integration[bot] in #35859
- fix(ui): derive auto-router preset tests from the bundled preset JSON by @tin-berri in #35882
- revert: "test(e2e): vendor API strategy coverage across endpoints" (#34649) by @yuneng-berri in #35881
- chore(deps): bump grpc and golang.org/x modules in the terraform provider by @yuneng-berri in #35844
- test(e2e): skip view-backed global spend probes pending LIT-5211 by @yuneng-berri in #35875
- fix(lint): move the basedpyright heap flag into the type check gate by @mateo-berri in #35869
- chore(ci): promote internal staging to main by @yuneng-berri in #35876
- feat(ui): add role capability gating, migrate Tool Policies route by @yuneng-berri in #35812
- refactor(ui): inject the fetch client's base url instead of reading it at import by @yuneng-berri in #35802
- chore: remove unused .flake8 config and flake8 dev dependency by @mateo-berri in #35888
- chore: stop advising pre-commit and bootstrap by @mateo-berri in #35884
- fix(auth): name enable_jwt_auth when a JWT-shaped key is rejected by @yassin-berriai in #35831
- feat(auto-router): make reminder marker pair configurable by @akapur99 in #35874
- fix(UI): update anthropic model presets by @tin-berri in #35896
- fix(bootstrap): switch to the dashboard node floor via nvm or fnm by @mateo-berri in #35895
- perf(pre-commit): run python, dashboard, and gen-api checks concurrently by @mateo-berri in #35903
- feat(spend): derive a default auto-router savings baseline from the hardest tier by @tin-berri in #35907
- fix(http_handler): self-heal handler clients closed after cache eviction by @mateo-berri in #35862
- fix(cost_tracking): keep OpenAI prompt cache token details through usage reassembly by @devin-ai-integration[bot] in #34812
- fix(cost): bill gpt-5.6 prompt cache reads at the cache read rate by @devin-ai-integration[bot] in #34957
- fix(batches): account for Responses API usage by @rimysore in #35367
- ci: retry Codecov uploads and stop failing jobs on OIDC token flakes by @mateo-berri in #35251
- feat(complexity_router): let operators rename the four complexity tiers by @akapur99 in #35893
- chore(lint): zero stale ruff and LIT headroom and strip inert type: ignore comments by @mateo-berri in #35928
- chore(lint): zero out seven more purely local basedpyright rules by @mateo-berri in #35927
- chore(ui): zero stale headroom on local dashboard eslint budgets by @mateo-berri in #35929
- fix(managed-files): skip rows without file objects by @rimysore in #35365
- fix(router): redact fallback tracebacks at the call site and cover the sync deferred stream by @yassin-berriai in #35843
- fix(migrations): recover from an interrupted Prisma toolchain install by @yassin-berriai in #35832
- fix(lint): bring basedpyright rule counts back under their budget limits by @mateo-berri in #35962
- chore(ui): don't zero out stale headroom except no-console by @mateo-berri in #35964
- fix(proxy): give proxy_admin_viewer read parity with proxy_admin by @ryan-crabbe-berri in #35851
- refactor(ui): address UI lint budget issues by refactoring UI by @tin-berri in #35960
- fix(ci): make the env-key doc gate see get_secret_bool reads by @yassin-berriai in #35833
- fix(caching): re-land evicted LLM client closing (#35492) atop self-healing handlers by @mateo-berri in #35870
- fix(proxy): keep the connected DB client when a startup health check fails by @yassin-berriai in #35837
- chore(lint): remove litellm/types from the ruff lint exclusion by @mateo-berri in #35926
- feat(sgr): make the gateway middleware the source of truth for successful requests by @yassin-berriai in #35717
- feat(auto-router): let operators replace the LLM classifier's system prompt by @akapur99 in #35855
- fix(docker): bake the pip image's prisma engines at a world-readable path by @yassin-berriai in #35976
- fix(auth): return 403 from the OAuth2 enterprise gate by @yassin-berriai in #35838
- fix(router): keep custom model_info across a price data reload by @yassin-berriai in #35491
- fix(proxy): resolve pass-through credentials live from router deployments by @mateo-berri in #35916
- fix(ci): fetch only head and merge-base in lint jobs instead of every branch by @mateo-berri in #35982
- fix(autorouter): match CJK keyword_tier_rules that regex word boundaries miss by @akapur99 in #35984
- feat(spend): rebuild the auto-router benchmarks backend as a per-session rollup by @tin-berri in #35910
- refactor(ui): replace hand-rolled query-param routing with nuqs by @ryan-crabbe-berri in #35871
- fix(docker): bake the componentized prisma engines at /opt/prisma so any uid can start by @yassin-berriai in #35989
- fix(migrations): keep the toolchain heal from raising on an unreadable nodeenv cache by @yassin-berriai in #35986
- fix(bedrock): sign Bedrock managed-file S3 requests with S3SigV4Auth by @yassin-berriai in #35983
- chore(typing): replace Any seams with real types across responses, proxy, and provider adapters by @mateo-berri in #35809
- fix(ai21): resolve the documented AI21_API_KEY instead of a misspelled name by @yassin-berriai in #35985
- fix(docker): fail the image build when the generated prisma engine paths drift off /opt/prisma by @yassin-berriai in #35979
- fix(jina_ai): resolve the documented JINA_API_KEY as a fallback by @yassin-berriai in #35992
- fix(proxy): only treat a recoverable database outage as grounds to serve without one by @yassin-berriai in #35864
- fix(ci): make every remaining CI checkout shallow by @mateo-berri in #35997
- fix(auto-router): stop the embedding model's context window from failing long requests by @akapur99 in #35956
- fix(ci): make the env-key doc gate see bare get_secret and get_secret_str reads by @yassin-berriai in #35996
- fix(logging): extend secret redaction to records litellm does not emit directly by @yassin-berriai in #35977
- test(utils): pin the register_model replay test to the recorded half by @yassin-berriai in #35994
- fix(ci): run every helm test suite, not just the first one per file by @yassin-berriai in #35993
- ci: fail the build when a test file or Dockerfile is invoked by no job by @yassin-berriai in #35991
- fix(langfuse): stop a collected httpx handler from closing a shared client by @yassin-berriai in #35981
- fix(bedrock): grant bedrock:CountTokens in OIDC session policy by @devin-ai-integration[bot] in #33145
- feat(pre-commit): save full lint output to a per-worktree log file by @mateo-berri in #36004
- feat(ui): match auto-router preset models against deployments' underlying model IDs by @tin-berri in #35972
- fix(core_helpers): map generic 'error' finish_reason to 'stop' by @devin-ai-integration[bot] in #33972
- fix(proxy)!: apply request-parameter checks consistently across body, path and form inputs by @yuneng-berri in #36011
- fix: rebuild models_by_provider in add_known_models so cost map reloads reach wildcard expansion by @ryan-crabbe-berri in #36010
- feat(complexity_router): report LLM classifier cost per request via routing_decision and x-litellm-classifier-cost header by @tin-berri in #36015
- fix(model-prices): correct replicate model key typo by @AkashNaickar in #34800
- fix(proxy): register managed batch output files on terminal retrieve by @Souravrajvi0 in #34092
- perf(pre-commit): fetch basedpyright base counts from CI artifacts by @mateo-berri in #35970
- fix(ui): sync projects list page index to ?page= so back and reload keep the page by @ryan-crabbe-berri in #36003
- fix(ui): link project page keys to their virtual key detail by @ryan-crabbe-berri in #36002
- refactor(ui): drop unreferenced locals from dashboard route components by @yuneng-berri in #35819
- fix(ui): opening a project now pushes ?project= so back and deep links work by @ryan-crabbe-berri in #36001
- refactor(ui): drop unreferenced locals from shared dashboard components by @yuneng-berri in #35821
- refactor(ui): drop unreferenced locals from tests and narrow destructures by @yuneng-berri in #36025
- fix(guardrails): allow litellm_content_filter to run on post_mcp_call by @mateo-berri in #35980
- fix(guardrails): scan /v1/messages tool traffic by @mateo-berri in #35999
- refactor(ui): drop dead locals and unused React state across the dashboard by @yuneng-berri in #36026
- feat(ui): add the auto-router usage tab to cost optimization by @tin-berri in #35995
- fix(managed_files): derive unified output file ids deterministically so concurrent registrations converge by @mateo-berri in #36019
- fix(proxy): send keepalive pings on anthropic messages SSE streams during upstream silence by @mateo-berri in #36024
- fix(managed_files): return unified ids from unscoped file listing by @mateo-berri in #36031
- fix(arize_phoenix): lowercase OTLP/gRPC auth metadata key by @devin-ai-integration[bot] in #34883
- fix(auto-router): accept every reminder marker pair a harness emits by @tin-berri in #36029
- fix(pricing): sync flex/priority tier keys to dated OpenAI snapshot variants by @mateo-berri in #35923
- fix(cost): bill reasoning tokens at the service tier output rate by @mateo-berri in #35925
- fix(proxy): include today's UTC bucket when a daily activity range ends at the caller's current day by @tin-berri in #36051
- fix: expired-miss share over all measured turns + cost-optimization tab labels by @tin-berri in #36037
- fix(router): include Bedrock batch/S3 fields and model in deployment credentials by @mpcusack-altos in #24548
- fix(batch): track cost for managed batches with no attributable key/u… by @elinacse in #35468
- feat(guardrails): add scan_only_tool_results to scope unified guardrails to tool results by @mateo-berri in #36014
- fix(cost): stop token-pricing the placeholder input on file content calls by @devin-ai-integration[bot] in #35140
- fix(proxy): fetch background responses through the router in CheckResponsesCost by @devin-ai-integration[bot] in #35137
- fix(proxy): yaml store_prompts_in_spend_logs should take precedence over DB cached value by @Praveena-617 in #35769
- fix(lint): measure the basedpyright budget gate in a gate-owned venv by @mateo-berri in #36050
- docs: cap all GitHub comments at 15-25 words, curb semicolon splices by @mateo-berri in #36059
- chore(lint): name MappingProxyType in the mutable-collection fix messages by @mateo-berri in #36072
- test: roll back runtime model registrations between tests by @mateo-berri in #36039
- refactor(types): cut 653 implicit and explicit Any diagnostics across 11 modules by @mateo-berri in #36054
- fix(proxy): stop resolving the UI session sentinel team on /search_tools/list by @yuneng-berri in #36061
- fix(batches): persist managed file ids for cancelled/failed/expired batches by @mateo-berri in #36048
- fix(batches): register managed output files on batch cancel by @mateo-berri in #36034
- fix(proxy): allow non-admins to reach /user/daily/activity/aggregated by @yuneng-berri in #36062
- fix(anthropic): coerce explicit additionalProperties to false in output_format schema by @dkindlund in #35811
- fix(batches): prevent managed file fallbacks by @rimysore in #35371
- chore: ignore the mechanical lint and typing sweeps in git blame by @mateo-berri in #36076
- fix(proxy): warn at startup when max_budget is set but no database is connected by @devin-ai-integration[bot] in #36041
- fix(proxy): promote caller metadata trace fields into litellm_metadata by @yucheng-berri in #35866
- feat(terraform): sync provider 0.3.0 from the mirror and cut 0.4.0 by @yuneng-berri in #36098
- fix(guardrails): honor configured timeout in Zscaler AI Guard by @yucheng-berri in #36110
- fix(logging): fall back to litellm_metadata when metadata is empty by @yucheng-berri in #36105
- fix(proxy): re-assert the authenticated identity on passthrough requests by @yucheng-berri in #36121
- chore: bump litellm-enterprise 0.1.53 -> 0.1.54, litellm-proxy-extras 0.4.83 -> 0.4.84 by @yuneng-berri in #36139
- fix(ui): match auto-router preset models against wildcard-expanded model groups by @tin-berri in #36111
- test(router): assert the auto-router max_input_chars kwarg by @yuneng-berri in #36109
- fix(ui): allow clearing a key's budget reset from the Edit Key form by @ryan-crabbe-berri in #36140
- fix(managed_files): skip unparseable rows when listing managed files by @mateo-berri in #36021
- fix(a2a): stop writing per-caller headers onto the shared cached httpx client by @yassin-berriai in #35978
- build(deps): bump h2 to 4.4.1 and js-yaml to 4.3.1 by @yuneng-berri in #36147
- chore: promote staging to main by @mateo-berri in #36057
- fix(azure_sentinel): respect AZURE_AUTHORITY_HOST and derive the Azure Monitor audience per cloud by @yucheng-berri in #36137
- fix(bedrock): pass SSE-KMS key through to the batch input-file S3 upload by @devin-ai-integration[bot] in #35148
- fix(anthropic adapter): stop indexing choices[0] on choiceless streaming chunks by @devin-ai-integration[bot] in #35314
- fix(bedrock): normalize /v1/completions and /v1/responses batch records by @devin-ai-integration[bot] in #35675
- fix(proxy): return the real status code when a credential update is rejected by @yucheng-berri in #36166
- fix(proxy): improve Headroom /v1/compress HTTP 404 diagnostics by @aayush598 in #35952
- fix(proxy): invalidate cached project object on project update and delete by @ryan-crabbe-berri in #36028
- feat(proxy): add apply_user_budget_to_team_keys opt-in by @ryan-crabbe-berri in #36102
- fix(proxy): stop alerting on health probes that lose the planned engine-restart race by @yassin-berriai in #36141
- test(docker): gate the componentized gateway and backend images on an arbitrary-uid offline boot by @yassin-berriai in #36136
- fix(http): stop pooled clients persisting cookies on the aiohttp jar too by @yassin-berriai in #36149
- fix(router): bound fallback-walk work and error-log volume by @yassin-berriai in #36148
- ci: wire credential_endpoints tests into the proxy endpoints job by @cursor[bot] in #36187
- docs(keys): document /key/info fields and clarify budget_reset_at is the next reset by @ryan-crabbe-berri in #36127
- fix(azure_sentinel): add AZURE_SENTINEL_AUTHORITY_HOST as a Sentinel scoped override by @yucheng-berri in #36165
- docs(pr-template): add a User Flow section with authoring instructions by @mateo-berri in #36162
- fix(proxy): derive config agent ids from agent_name so grants survive secret rotation by @ryan-crabbe-berri in #36020
- chore(ui): regenerate schema.d.ts for the /key/info docstring update by @devin-ai-integration[bot] in #36210
- build(deps): bump gitpython to 3.1.58 to clear osv-scan on staging by @devin-ai-integration[bot] in #36212
- fix(proxy): deny agent access when key and team grants resolve to nothing by @ryan-crabbe-berri in #36221
- build(deps): defer the second pypdf advisory until the 6.15.0 bump by @devin-ai-integration[bot] in #36218
- fix(a2a): align agent list annotation and test with the tuple return type by @devin-ai-integration[bot] in #36217
- ci: always run the UI API types sync check so it can be required by @devin-ai-integration[bot] in #36213
- build(deps): bump nanoid to 3.3.17 in the dashboard lockfile by @devin-ai-integration[bot] in #36227
- feat(ui): show user email or alias in usage data export by @ryan-crabbe-berri in #36232
- feat(auto-router): track turns per complexity tier (LIT-5302) by @tin-berri in #36209
- fix(websearch): restore snippet text in native web_search_tool_result blocks (LIT-5315) by @tin-berri in #36228
- fix(proxy): resolve entity access groups in the model listing endpoints by @devin-ai-integration[bot] in #36230
- fix(ui): let access groups be a team's only model source, with hover provenance by @ryan-crabbe-berri in #36234
- fix(managed_files): return unified output file ids from GET /batches by @mateo-berri in #36049
- test(proxy): compare empty agent list to the tuple get_agent_list returns by @devin-ai-integration[bot] in #36225
- fix(otel): name the RPC system and upstream on MCP tool-call spans by @yucheng-berri in #35857
- fix(guardrails): chunk oversized Bedrock ApplyGuardrail requests instead of failing by @yucheng-berri in #36119
- test(e2e): settle control-plane writes across every replica, not just one by @yuneng-berri in #36247
- fix(responses): forward allowed_openai_params through the chat completions bridge by @devin-ai-integration[bot] in #35885
- test(proxy): assert the copy _add_team_member_budget_table returns by @devin-ai-integration[bot] in #36244
- chore(ui): regenerate dashboard api types for tier_turns by @devin-ai-integration[bot] in #36243
- refactor(types): declare mirrored pricing fields on ModelInfo by @devin-ai-integration[bot] in #36215
- fix(lint): make strict-gate noqas survive base ruff and flag stale ones by @mateo-berri in #36257
- fix(vertex_ai): surface real error/status on vertex batch create instead of IndexError 500 by @devin-ai-integration[bot] in #35141
- ci: give the remaining pull_request workflows a concurrency group by @devin-ai-integration[bot] in #36252
- refactor(lint): graduate zero-violation strict rules and guard the budget ratchet by @mateo-berri in #36161
- fix(proxy): enforce require_managed_files on every route that accepts a raw provider id by @devin-ai-integration[bot] in #35551
- chore(typing): clear 1.4k basedpyright Any errors across 21 hotspot files by @mateo-berri in #36282
- test: roll back live router replay membership between tests by @mateo-berri in #36278
- chore(ci): sync main into internal staging by @yuneng-berri in #36288
- build(lint): rename make pre-commit to make check with a working-tree fallback by @mateo-berri in #36277
- fix(ui): show team BYOK models in team fallback settings by @devin-ai-integration[bot] in #36241
- fix(otel): mark v2 server spans as failed for pre-call errors by @devin-ai-integration[bot] in #34546
- fix(websearch_interception): bill intercepted searches to the calling key by @devin-ai-integration[bot] in #35708
- chore: remove pre-commit rule by @mateo-berri in #36295
- docs: clarify guideline priority ordering in CLAUDE.md by @devin-ai-integration[bot] in #36296
- feat(router): independent, default-on deployment affinity for the auto-router by @tin-berri in #36146
- test: repair stale CircleCI contracts by @yuneng-berri in #36293
- chore(ci): promote internal staging to main by @yuneng-berri in #36286
- chore: rebuild Admin UI bundle for the 2026-08-08 release by @yuneng-berri in #36297
- chore(ci): promote internal staging to main by @yuneng-berri in #36304
New Contributors
- @rimysore made their first contribution in #35367
- @AkashNaickar made their first contribution in #34800
- @Souravrajvi0 made their first contribution in #34092
- @elinacse made their first contribution in #35468
- @aayush598 made their first contribution in #35952
- @cursor[bot] made their first contribution in #36187
Full Changelog: v1.96.0...v1.97.0