Repository navigation
fix(proxy): include litellm_model_table in GET /v2/team/list - #39045
yassin-berriai merged 3 commits into
Conversation
|
|
Greptile SummaryThe PR now eagerly loads
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| litellm/proxy/management_endpoints/team_endpoints.py | Adds the required relation include only to the active-team query, resolving the prior failure without breaking deleted-team listings. |
| tests/test_litellm/proxy/management_endpoints/test_team_endpoints.py | Adds endpoint-level regression coverage demonstrating that included model aliases are exposed in the returned team object. |
Reviews (2): Last reviewed commit: "fix(proxy): drop invalid litellm_model_t..." | Re-trigger Greptile
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…test The test-quality gate flagged the regression test for asserting on find_many's call args instead of what the caller gets back. Rewritten so the fake find_many only attaches litellm_model_table when its own include kwarg asks for it, so the assertions are on the response.
…query Greptile caught that LiteLLM_DeletedTeamTable has no litellm_model_table relation in the Prisma schema, so passing that include on the deleted-team find_many raised UnknownRelationalFieldError against a real database on every GET /v2/team/list?status=deleted call. Confirmed live against Postgres. Scope the fix to the active-team branch only, where the relation exists; update the test to reflect that and assert the deleted branch no longer requests it.
|
@greptileai Confirmed and fixed: dropped the include on the deleted-team query (invalid relation there), verified live against Postgres. Please re-review head aab515d. |
…101.0) (#201)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | minor | `v1.100.1` → `v1.101.0` |
---
### Release Notes
<details>
<summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary>
### [`v1.101.0`](https://github.com/BerriAI/litellm/releases/tag/v1.101.0)
[Compare Source](https://github.com/BerriAI/litellm/compare/v1.100.1...v1.101.0)
#### Verify Docker Image Signature
All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0).
**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:
```bash
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
ghcr.io/berriai/litellm:v1.101.0
```
**Verify 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:
```bash
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.101.0/cosign.pub \
ghcr.io/berriai/litellm:v1.101.0
```
Expected 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
- fix(proxy): emit timing headers and overhead for /v1/messages and /v1/responses by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38840](https://github.com/BerriAI/litellm/pull/38840)
- fix(tests): derive the no-cache-read-rate savings baseline from the model map by [@​tin-berri](https://github.com/tin-berri) in [#​38863](https://github.com/BerriAI/litellm/pull/38863)
- chore(typing): clear Any seams across 47 files, ratchet basedpyright ceilings -3,302 by [@​mateo-berri](https://github.com/mateo-berri) in [#​37778](https://github.com/BerriAI/litellm/pull/37778)
- chore(typing): clear 1.2k basedpyright Any errors across 16 hotspot files by [@​mateo-berri](https://github.com/mateo-berri) in [#​36722](https://github.com/BerriAI/litellm/pull/36722)
- feat(bedrock): honor streaming buffer/sampling config for unbuffered post\_call scans by [@​mateo-berri](https://github.com/mateo-berri) in [#​38722](https://github.com/BerriAI/litellm/pull/38722)
- feat(cli): set ENABLE\_TOOL\_SEARCH=true for lite claude by [@​mateo-berri](https://github.com/mateo-berri) in [#​38942](https://github.com/BerriAI/litellm/pull/38942)
- fix(proxy): deliver budget alerts on webhook-only alerting and accept ALERTING\_WEBHOOK\_URL by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38441](https://github.com/BerriAI/litellm/pull/38441)
- docs(claude.md): require tests to check behavior, not code structure by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​38772](https://github.com/BerriAI/litellm/pull/38772)
- chore(newrelic): cover static default\_team\_settings per-team routing by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38857](https://github.com/BerriAI/litellm/pull/38857)
- fix: update stale source URLs and deprecation dates in model cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38801](https://github.com/BerriAI/litellm/pull/38801)
- feat(ci): close duplicate issues after a 3-day grace period by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​38381](https://github.com/BerriAI/litellm/pull/38381)
- docs(proxy): clarify spend semantics on /v2/user/info and /user/daily/activity by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38883](https://github.com/BerriAI/litellm/pull/38883)
- fix(guardrails): configure Prompt Security file timeout policy by [@​davida-ps](https://github.com/davida-ps) in [#​38083](https://github.com/BerriAI/litellm/pull/38083)
- fix(bedrock): stop duplicating Converse config blocks inside inferenceConfig by [@​mateo-berri](https://github.com/mateo-berri) in [#​38993](https://github.com/BerriAI/litellm/pull/38993)
- fix(guardrails): exclude images from HiddenLayer v1 scans by [@​Ashton-Sidhu](https://github.com/Ashton-Sidhu) in [#​29210](https://github.com/BerriAI/litellm/pull/29210)
- feat(spend\_tracking): persist router metadata in spend logs for internal router models by [@​mateo-berri](https://github.com/mateo-berri) in [#​39001](https://github.com/BerriAI/litellm/pull/39001)
- fix(vertex\_ai): graft default vertex path when api\_base has a version-only path by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38986](https://github.com/BerriAI/litellm/pull/38986)
- fix(proxy): allow unblocking customers via /customer/update by [@​cat0825](https://github.com/cat0825) in [#​34696](https://github.com/BerriAI/litellm/pull/34696)
- feat(openai): support workload identity federation (OIDC token exchange) by [@​mateo-berri](https://github.com/mateo-berri) in [#​38995](https://github.com/BerriAI/litellm/pull/38995)
- fix(otel): emit cache token counts on OTel v2 LLM spans by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38716](https://github.com/BerriAI/litellm/pull/38716)
- feat(proxy): add /v1/responses/input\_tokens token counting endpoint by [@​mateo-berri](https://github.com/mateo-berri) in [#​38997](https://github.com/BerriAI/litellm/pull/38997)
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38917](https://github.com/BerriAI/litellm/pull/38917)
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 in migrations image by [@​mateo-berri](https://github.com/mateo-berri) in [#​38973](https://github.com/BerriAI/litellm/pull/38973)
- feat(friendli): add zai-org/GLM-5.3-Flash model pricing by [@​Lee-Si-Yoon](https://github.com/Lee-Si-Yoon) in [#​38880](https://github.com/BerriAI/litellm/pull/38880)
- chore(techdebt): clear fresh debt from the 2026-08-29 and 2026-08-30 windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38884](https://github.com/BerriAI/litellm/pull/38884)
- fix(bedrock): surface Nova Sonic user transcripts, speech events, and usage in realtime API by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38597](https://github.com/BerriAI/litellm/pull/38597)
- fix(guardrails): carry Anthropic url image sources through to guardrails by [@​samtsai15](https://github.com/samtsai15) in [#​38940](https://github.com/BerriAI/litellm/pull/38940)
- feat(friendli): add zai-org/GLM-5.3 model pricing by [@​Lee-Si-Yoon](https://github.com/Lee-Si-Yoon) in [#​38881](https://github.com/BerriAI/litellm/pull/38881)
- fix(router): apply model renames to the in-memory deployment list by [@​yatishgoel](https://github.com/yatishgoel) in [#​38479](https://github.com/BerriAI/litellm/pull/38479)
- test(e2e): cover SCIM token creation and SCIM API auth in the Admin UI suite by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39027](https://github.com/BerriAI/litellm/pull/39027)
- feat(gigachat): add native API passthrough routes with spend logging by [@​mateo-berri](https://github.com/mateo-berri) in [#​38913](https://github.com/BerriAI/litellm/pull/38913)
- feat(gigachat): add passthrough gigachat route by [@​KnyazSh](https://github.com/KnyazSh) in [#​25886](https://github.com/BerriAI/litellm/pull/25886)
- feat(complexity-router): add classification\_mode to skip classifier on continuation turns by [@​tin-berri](https://github.com/tin-berri) in [#​38861](https://github.com/BerriAI/litellm/pull/38861)
- fix(proxy): preserve model table columns on master key rotation by [@​mateo-berri](https://github.com/mateo-berri) in [#​38878](https://github.com/BerriAI/litellm/pull/38878)
- fix(speech): stop forwarding response\_format as a chat param for Gemini TTS by [@​mateo-berri](https://github.com/mateo-berri) in [#​38819](https://github.com/BerriAI/litellm/pull/38819)
- fix(proxy): return 200 from /model/block and /model/unblock instead of 500 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38873](https://github.com/BerriAI/litellm/pull/38873)
- feat(complexity\_router): escalate oversized prompts to a tier that fits before dispatch by [@​tin-berri](https://github.com/tin-berri) in [#​38844](https://github.com/BerriAI/litellm/pull/38844)
- feat(shadow\_eval): target teams and users so JWT-auth traffic can be evaluated by [@​tin-berri](https://github.com/tin-berri) in [#​39015](https://github.com/BerriAI/litellm/pull/39015)
- fix(anthropic\_messages): drain upstream in a detached pump so client … by [@​nuernber](https://github.com/nuernber) in [#​36008](https://github.com/BerriAI/litellm/pull/36008)
- refactor(proxy): bound the budget window seed by time instead of request ids by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​38851](https://github.com/BerriAI/litellm/pull/38851)
- fix(proxy): ship psycopg so partitioned SpendLogs detection actually runs by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​38994](https://github.com/BerriAI/litellm/pull/38994)
- test(e2e): assert user-observable behavior instead of DOM structure by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39016](https://github.com/BerriAI/litellm/pull/39016)
- build(rust): configure native extension profiles by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39020](https://github.com/BerriAI/litellm/pull/39020)
- fix(ui): keep litellm\_credential\_name from LiteLLM Params JSON when no credential is selected by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39005](https://github.com/BerriAI/litellm/pull/39005)
- Revert "fix(ui): keep litellm\_credential\_name from LiteLLM Params JSON when no credential is selected" by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39046](https://github.com/BerriAI/litellm/pull/39046)
- fix(auth): quiet malformed virtual key rejections to stdout by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38838](https://github.com/BerriAI/litellm/pull/38838)
- fix(proxy): wire team-level logging callbacks into passthrough endpoints by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38979](https://github.com/BerriAI/litellm/pull/38979)
- feat(complexity\_router): opt-in modality-based capability routing for image requests by [@​tin-berri](https://github.com/tin-berri) in [#​39032](https://github.com/BerriAI/litellm/pull/39032)
- fix(ui): let the auto-router scoring tier list follow the theme by [@​tin-berri](https://github.com/tin-berri) in [#​39040](https://github.com/BerriAI/litellm/pull/39040)
- feat(ui): auto-router controls for context-window escalation by [@​tin-berri](https://github.com/tin-berri) in [#​39054](https://github.com/BerriAI/litellm/pull/39054)
- fix(redis): coerce env var string types and fix param discovery through decorator wrappers by [@​koladefaj](https://github.com/koladefaj) in [#​30644](https://github.com/BerriAI/litellm/pull/30644)
- feat(key management): show budget window usage on /key/info by [@​Thijmen](https://github.com/Thijmen) in [#​37044](https://github.com/BerriAI/litellm/pull/37044)
- fix(websearch): reject invalid explicit search tool selections by [@​georgeatparallel](https://github.com/georgeatparallel) in [#​38113](https://github.com/BerriAI/litellm/pull/38113)
- feat(shadow\_eval): compare several auto-routers on one job's sampled traffic by [@​tin-berri](https://github.com/tin-berri) in [#​39028](https://github.com/BerriAI/litellm/pull/39028)
- fix(speech): honor pcm/wav response\_format for Gemini TTS and reject unsupported containers by [@​mateo-berri](https://github.com/mateo-berri) in [#​38868](https://github.com/BerriAI/litellm/pull/38868)
- fix(proxy): match /v1/audio/speech content-type to the returned audio format by [@​mateo-berri](https://github.com/mateo-berri) in [#​38798](https://github.com/BerriAI/litellm/pull/38798)
- test(e2e): drop the two mgmt registry cells no shared-proxy test can cover by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39055](https://github.com/BerriAI/litellm/pull/39055)
- feat(ui): one classification frequency picker for complexity auto-routers by [@​tin-berri](https://github.com/tin-berri) in [#​39042](https://github.com/BerriAI/litellm/pull/39042)
- test(e2e/ui): automate 8 manual QA checklist flows by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39025](https://github.com/BerriAI/litellm/pull/39025)
- fix(key\_management): allow non-admin key\_type preset transitions on /key/update by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39051](https://github.com/BerriAI/litellm/pull/39051)
- chore(typing): clear 1.1k basedpyright Any errors across 53 backend files by [@​mateo-berri](https://github.com/mateo-berri) in [#​38796](https://github.com/BerriAI/litellm/pull/38796)
- fix(openai): forward reasoning\_effort for unknown model aliases instead of failing closed by [@​mateo-berri](https://github.com/mateo-berri) in [#​39065](https://github.com/BerriAI/litellm/pull/39065)
- test(e2e-ui): poll credential availability before Test Connect to deflake multi-instance runs by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39073](https://github.com/BerriAI/litellm/pull/39073)
- feat(ui): modality routing toggle on the auto-router create and edit forms by [@​tin-berri](https://github.com/tin-berri) in [#​39059](https://github.com/BerriAI/litellm/pull/39059)
- fix(proxy): include litellm\_model\_table in GET /v2/team/list by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39045](https://github.com/BerriAI/litellm/pull/39045)
- fix(bedrock): mask signed request headers in guardrail debug log by [@​mateo-berri](https://github.com/mateo-berri) in [#​39044](https://github.com/BerriAI/litellm/pull/39044)
- fix(bedrock): forward aws\_external\_id in files and batches credential loading by [@​mateo-berri](https://github.com/mateo-berri) in [#​39066](https://github.com/BerriAI/litellm/pull/39066)
- fix(mcp): persist alias MCP grants verbatim instead of rewriting to local server ids by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39119](https://github.com/BerriAI/litellm/pull/39119)
- fix(responses): json-encode object tool call arguments in the chat completions bridge by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35417](https://github.com/BerriAI/litellm/pull/35417)
- fix(cost): bill OCR annotation pages via annotation\_cost\_per\_page by [@​mateo-berri](https://github.com/mateo-berri) in [#​38985](https://github.com/BerriAI/litellm/pull/38985)
- fix(policy\_engine): restore request guardrails list after pipeline allow by [@​mateo-berri](https://github.com/mateo-berri) in [#​39038](https://github.com/BerriAI/litellm/pull/39038)
- fix(embeddings): omit encoding\_format when the client omits it on OpenAI-compatible calls by [@​mateo-berri](https://github.com/mateo-berri) in [#​38774](https://github.com/BerriAI/litellm/pull/38774)
- test: deflake MCP registry state, savings cost map, and MCP identity env reload tests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38891](https://github.com/BerriAI/litellm/pull/38891)
- feat(helm): add Argo CD PreSync hook and rollout strategy knobs to the componentized chart by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39112](https://github.com/BerriAI/litellm/pull/39112)
- fix(registry): veo 3.1 pricing tiers + roll up open registry PRs (glm-5.2, Qwen3.8-Flash, gemma-4-31b, scribe\_v2, fireworks/databricks deepseek v4) + deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38990](https://github.com/BerriAI/litellm/pull/38990)
- test(ui): budget DOM-structure assertions in dashboard tests by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39082](https://github.com/BerriAI/litellm/pull/39082)
- test(ui): assert DataTable behavior instead of DOM structure by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39084](https://github.com/BerriAI/litellm/pull/39084)
- test(ui): query the screen instead of the render result by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39085](https://github.com/BerriAI/litellm/pull/39085)
- fix(ui): stop checkboxes stretching to the full width of a form field by [@​yatishgoel](https://github.com/yatishgoel) in [#​39108](https://github.com/BerriAI/litellm/pull/39108)
- chore: bump litellm-enterprise 0.1.62 -> 0.1.63, litellm-proxy-extras 0.4.91 -> 0.4.92, litellm 1.100.0 -> 1.101.0 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39140](https://github.com/BerriAI/litellm/pull/39140)
- revert: restore search tool fallback when no router is configured by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39146](https://github.com/BerriAI/litellm/pull/39146)
- test(websearch): register configured search tool in pre-request hook test by [@​mateo-berri](https://github.com/mateo-berri) in [#​39074](https://github.com/BerriAI/litellm/pull/39074)
- feat(proxy): default to the v2 migration resolver, keep v1 as an opt-out by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31125](https://github.com/BerriAI/litellm/pull/31125)
- build(deps): bump browserslist to 4.28.8 to clear osv-scan by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39142](https://github.com/BerriAI/litellm/pull/39142)
- fix(ui): render the skill detail page with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39130](https://github.com/BerriAI/litellm/pull/39130)
- feat: add Azure AI DeepSeek V4 Flash 0731 pricing by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39023](https://github.com/BerriAI/litellm/pull/39023)
- fix(streaming): keep response id stable across streamed chunks by [@​Timik232](https://github.com/Timik232) in [#​38106](https://github.com/BerriAI/litellm/pull/38106)
- test(e2e/ui): cover the Budgets page create, edit and delete flows by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39052](https://github.com/BerriAI/litellm/pull/39052)
- feat(dashscope): add QwenCloud and Qwen AI Platform provider aliases by [@​mateo-berri](https://github.com/mateo-berri) in [#​39149](https://github.com/BerriAI/litellm/pull/39149)
- fix(bedrock): forward native structured outputs on Invoke instead of silently inlining the schema by [@​tin-berri](https://github.com/tin-berri) in [#​39070](https://github.com/BerriAI/litellm/pull/39070)
- test(e2e/ui): cover creating, testing and deleting a guardrail by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39053](https://github.com/BerriAI/litellm/pull/39053)
- refactor(types): replace Any with precise types across 73 modules by [@​mateo-berri](https://github.com/mateo-berri) in [#​39104](https://github.com/BerriAI/litellm/pull/39104)
- feat(models): add Claude Fable 5.1 across Anthropic, Bedrock, Vertex AI, and Azure AI by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39148](https://github.com/BerriAI/litellm/pull/39148)
- feat(guardrails): add Alice guardrail by [@​seanyasno-af](https://github.com/seanyasno-af) in [#​38898](https://github.com/BerriAI/litellm/pull/38898)
- test(e2e/ui): cover the Logs page filter drawer by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39056](https://github.com/BerriAI/litellm/pull/39056)
- test(e2e/ui): stop the suite failing on things that are not regressions by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39063](https://github.com/BerriAI/litellm/pull/39063)
- test(e2e/ui): cover the team Settings tab by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39058](https://github.com/BerriAI/litellm/pull/39058)
- test(e2e/ui): cover the Usage page activity tabs by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39061](https://github.com/BerriAI/litellm/pull/39061)
- fix(ui): render the guardrail garden detail page with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39131](https://github.com/BerriAI/litellm/pull/39131)
- fix(responses): tool call id shape breaks gpt-5 -> claude fallback conversations by [@​mateo-berri](https://github.com/mateo-berri) in [#​39144](https://github.com/BerriAI/litellm/pull/39144)
- fix(openai): drop tool\_choice when request has no tools on chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​39147](https://github.com/BerriAI/litellm/pull/39147)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39141](https://github.com/BerriAI/litellm/pull/39141)
- test(ui): pick select options by role instead of by text by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39175](https://github.com/BerriAI/litellm/pull/39175)
- feat(cost): support time-based off-peak pricing in cost calculation by [@​Srivatsa03](https://github.com/Srivatsa03) in [#​31725](https://github.com/BerriAI/litellm/pull/31725)
- fix(openai): flatten top-level tool schema combinators on chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38839](https://github.com/BerriAI/litellm/pull/38839)
- fix(s3): bound s3 object keys and download filenames for long Responses API ids by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39164](https://github.com/BerriAI/litellm/pull/39164)
- revert: default the proxy back to the v1 migration resolver by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39178](https://github.com/BerriAI/litellm/pull/39178)
- fix(prometheus): bound requested\_model label cardinality on client failure paths by [@​mateo-berri](https://github.com/mateo-berri) in [#​39136](https://github.com/BerriAI/litellm/pull/39136)
- feat(ui): add search to the Agent Hub tab and admin agents table by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39155](https://github.com/BerriAI/litellm/pull/39155)
- fix(anthropic): fix response\_format for claude-fable-5-1 on Vertex AI and Bedrock by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39184](https://github.com/BerriAI/litellm/pull/39184)
- fix: keep litellm\_credential\_name from LiteLLM Params JSON and gate stored credential attach to proxy admins by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39047](https://github.com/BerriAI/litellm/pull/39047)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39186](https://github.com/BerriAI/litellm/pull/39186)
- test: exempt MockTransport request-shape embedding tests from VCR replay by [@​mateo-berri](https://github.com/mateo-berri) in [#​39185](https://github.com/BerriAI/litellm/pull/39185)
- fix(ui): render the logs Tools panel with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39129](https://github.com/BerriAI/litellm/pull/39129)
- fix(proxy): default max\_idle\_connection\_lifetime to 60s on DB URLs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39134](https://github.com/BerriAI/litellm/pull/39134)
- fix(mcp): follow tools/list pagination from upstream servers by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39172](https://github.com/BerriAI/litellm/pull/39172)
- fix(proxy): resolve router model aliases in /utils/supported\_openai\_params by [@​mateo-berri](https://github.com/mateo-berri) in [#​39000](https://github.com/BerriAI/litellm/pull/39000)
- fix(azure): flatten top-level tool schema combinators on Azure chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38870](https://github.com/BerriAI/litellm/pull/38870)
- fix(bedrock): route streamed responses-API output through the unified guardrail by [@​mateo-berri](https://github.com/mateo-berri) in [#​38734](https://github.com/BerriAI/litellm/pull/38734)
- fix(ui): hide model write affordances from view-only admin sessions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38872](https://github.com/BerriAI/litellm/pull/38872)
- fix(cli): quote the Claude Code apiKeyHelper for cmd.exe on Windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39174](https://github.com/BerriAI/litellm/pull/39174)
- fix(logging): guarantee max\_parallel\_requests slot release when streaming logging fails by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39093](https://github.com/BerriAI/litellm/pull/39093)
- feat(alerting): slack alerts for per-user daily/monthly spend thresholds and spend anomaly detection by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38438](https://github.com/BerriAI/litellm/pull/38438)
- fix(docker): add public Wolfi apk repo to runtime image by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39033](https://github.com/BerriAI/litellm/pull/39033)
- fix(router): keep order fallback on the requested order level by [@​emerzon](https://github.com/emerzon) in [#​38969](https://github.com/BerriAI/litellm/pull/38969)
- test(e2e): cover retry-on-timeout and the context-window fallback by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39197](https://github.com/BerriAI/litellm/pull/39197)
- fix(budget): reject known estimates over remaining budget under fail\_closed\_budget\_enforcement by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39214](https://github.com/BerriAI/litellm/pull/39214)
- fix: stop a cleared Team field from blocking personal key creation by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39206](https://github.com/BerriAI/litellm/pull/39206)
- test: record each e2e test's source location in the JUnit report by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39209](https://github.com/BerriAI/litellm/pull/39209)
- feat(router): fall back on anthropic safeguard refusals on /v1/messages by [@​tin-berri](https://github.com/tin-berri) in [#​39157](https://github.com/BerriAI/litellm/pull/39157)
- fix(proxy): report requested model on Anthropic streaming message\_start by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35816](https://github.com/BerriAI/litellm/pull/35816)
- fix(helm): reuse the generated master key Secret on helm upgrade by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39219](https://github.com/BerriAI/litellm/pull/39219)
- fix(mcp): report per-server outcomes in aggregate REST tools/list by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39232](https://github.com/BerriAI/litellm/pull/39232)
- fix(cost-map): retry transient boot fetch failures and recover config deployments dropped by a stale cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39230](https://github.com/BerriAI/litellm/pull/39230)
- perf(scim): resolve group members with one user table read per member by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39228](https://github.com/BerriAI/litellm/pull/39228)
- fix(docker): install bedrock-realtime extra in monolith proxy images by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39223](https://github.com/BerriAI/litellm/pull/39223)
- fix(aiohttp\_transport): map transport-internal CancelledError to a retryable ConnectError by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39240](https://github.com/BerriAI/litellm/pull/39240)
- fix(bedrock): gate Converse cachePoint emission on model prompt caching support by [@​tin-berri](https://github.com/tin-berri) in [#​39210](https://github.com/BerriAI/litellm/pull/39210)
- fix(datadog\_llm\_obs): send tool calls, tool results and cache tokens in DD's own fields by [@​tin-berri](https://github.com/tin-berri) in [#​39222](https://github.com/BerriAI/litellm/pull/39222)
- feat(prometheus): expose per-key and per-team rate limit allowed and used gauges by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39236](https://github.com/BerriAI/litellm/pull/39236)
- feat(scim): add placeholder listing and merge so a shadowed account can be healed by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39231](https://github.com/BerriAI/litellm/pull/39231)
- fix: normalize provider-specific cache token fields in OTel v2 usage by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39202](https://github.com/BerriAI/litellm/pull/39202)
- fix: stop deployment default API key limits leaking into provider requests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39211](https://github.com/BerriAI/litellm/pull/39211)
- fix(proxy): keep passthrough logging metadata and model\_info dicts when team callbacks are wired by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39216](https://github.com/BerriAI/litellm/pull/39216)
- fix(guardrails): deliver modify\_response block as valid SSE on streaming chat and Responses by [@​mateo-berri](https://github.com/mateo-berri) in [#​39036](https://github.com/BerriAI/litellm/pull/39036)
- fix(search): forward search-tool params through the router, complete Parallel AI v1 param mapping by [@​jliounis](https://github.com/jliounis) in [#​37883](https://github.com/BerriAI/litellm/pull/37883)
- fix(bedrock): stop Converse crashing on bearer-token auth without SigV4 credentials by [@​mateo-berri](https://github.com/mateo-berri) in [#​39166](https://github.com/BerriAI/litellm/pull/39166)
- fix(docker): install saml extra in litellm-backend image by [@​ojensen-berri](https://github.com/ojensen-berri) in [#​39291](https://github.com/BerriAI/litellm/pull/39291)
- fix(guardrails): run apply\_guardrail-only providers in logging\_only mode by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39297](https://github.com/BerriAI/litellm/pull/39297)
- feat(gemini): day-0 pricing for gemini-3.8-flash by [@​mateo-berri](https://github.com/mateo-berri) in [#​39340](https://github.com/BerriAI/litellm/pull/39340)
- fix(vertex): avoid duplicate DeepSeek OCR model namespace by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39194](https://github.com/BerriAI/litellm/pull/39194)
- feat(streaming): carry final response cost on streamed usage by default by [@​mateo-berri](https://github.com/mateo-berri) in [#​39069](https://github.com/BerriAI/litellm/pull/39069)
- fix(rerank): map provider errors with the resolved provider on sync and async paths by [@​mateo-berri](https://github.com/mateo-berri) in [#​39176](https://github.com/BerriAI/litellm/pull/39176)
- test(e2e): read JUnit properties off the real collected pytest Item by [@​mateo-berri](https://github.com/mateo-berri) in [#​39246](https://github.com/BerriAI/litellm/pull/39246)
- feat(proxy): configurable display\_name for the Anthropic-shaped /v1/models listing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39238](https://github.com/BerriAI/litellm/pull/39238)
- fix(helm): scale the classic chart's HPA out at the documented 60 percent CPU by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​35975](https://github.com/BerriAI/litellm/pull/35975)
- fix(gemini): return enabled thinking content by default by [@​mateo-berri](https://github.com/mateo-berri) in [#​39160](https://github.com/BerriAI/litellm/pull/39160)
- fix: run access group key sync UPDATEs on the writer, not the read replica by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39128](https://github.com/BerriAI/litellm/pull/39128)
- fix(models): registry audit 2026-09-01: openai realtime and long-context tiers, mistral aliases, voyage, xai, fireworks, together, scaleway, azure ai, govcloud, azure gov, cloudflare whisper, deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39170](https://github.com/BerriAI/litellm/pull/39170)
- fix: apply optional\_pre\_call\_checks and reject unsupported router settings on /config/update by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39249](https://github.com/BerriAI/litellm/pull/39249)
- fix(vector\_stores): s3 vectors search router bypass + rag query config drop + ui error swallow by [@​michelligabriele](https://github.com/michelligabriele) in [#​34788](https://github.com/BerriAI/litellm/pull/34788)
- fix(models): key Azure DeepSeek V4 Flash 0731 by its Foundry catalog id by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39341](https://github.com/BerriAI/litellm/pull/39341)
- fix(deps): raise the tornado and pypdf floors for six new advisories by [@​mateo-berri](https://github.com/mateo-berri) in [#​39188](https://github.com/BerriAI/litellm/pull/39188)
- fix(headroom): stop re-compressing retrieved CCR content in client tool loops by [@​QuantumBreakz](https://github.com/QuantumBreakz) in [#​38591](https://github.com/BerriAI/litellm/pull/38591)
- feat(agentcore-a2a): derive runtime session id from A2A message.contextId by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39371](https://github.com/BerriAI/litellm/pull/39371)
- fix(proxy): share per-model budget counters across replicas through the spend counter cache by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39375](https://github.com/BerriAI/litellm/pull/39375)
- fix(proxy-extras): give prisma migrate deploy its own timeout budget by [@​mateo-berri](https://github.com/mateo-berri) in [#​39365](https://github.com/BerriAI/litellm/pull/39365)
- fix(proxy): route container create and list through model\_list deployments by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39220](https://github.com/BerriAI/litellm/pull/39220)
- test(build): validate release wheel contracts by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39021](https://github.com/BerriAI/litellm/pull/39021)
- refactor(rust): extract domain-neutral Python interop by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39026](https://github.com/BerriAI/litellm/pull/39026)
- refactor(rust): standardize the core Error type by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39331](https://github.com/BerriAI/litellm/pull/39331)
- fix(ui): preserve full AgentCore runtime ARN in agent edit form by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39382](https://github.com/BerriAI/litellm/pull/39382)
- feat(ui): update OpenAI preset model tiers by [@​tin-berri](https://github.com/tin-berri) in [#​39396](https://github.com/BerriAI/litellm/pull/39396)
- fix(router): resolve realtime session model to routed deployment by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​36811](https://github.com/BerriAI/litellm/pull/36811)
- fix(security): restrict and validate file uploads at /v1/files and /upload/logo by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39379](https://github.com/BerriAI/litellm/pull/39379)
- feat(auth): enforce configurable password policy and SSO-only login by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39381](https://github.com/BerriAI/litellm/pull/39381)
- fix(agents): redact secret litellm\_params fields from all /v1/agents responses by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39389](https://github.com/BerriAI/litellm/pull/39389)
- fix(otel): stamp Langfuse root observation input and output from the request task by [@​mateo-berri](https://github.com/mateo-berri) in [#​39369](https://github.com/BerriAI/litellm/pull/39369)
- fix(guardrails): track and tear down presidio sibling callbacks on delete and update by [@​mateo-berri](https://github.com/mateo-berri) in [#​39271](https://github.com/BerriAI/litellm/pull/39271)
- fix(spend): keep every-deployment scope on gateway cache-injection marks by [@​mateo-berri](https://github.com/mateo-berri) in [#​39241](https://github.com/BerriAI/litellm/pull/39241)
- fix(proxy/db): keep prisma predicates from raising TypeError under a mocked prisma module by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39253](https://github.com/BerriAI/litellm/pull/39253)
- fix(proxy): word database 503s by whether the fault is transient by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39256](https://github.com/BerriAI/litellm/pull/39256)
- refactor(utils): remove the dead get\_api\_key provider-key resolver by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39260](https://github.com/BerriAI/litellm/pull/39260)
- feat(mcp): semantic tool search for the native MCP Gateway by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39404](https://github.com/BerriAI/litellm/pull/39404)
- fix(logging): redact credential query params from the uvicorn access log by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39293](https://github.com/BerriAI/litellm/pull/39293)
- feat(model\_prices): add meta/muse-spark-1.3 and its contributor tier by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39417](https://github.com/BerriAI/litellm/pull/39417)
- refactor(core): move audio transcription into core by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39126](https://github.com/BerriAI/litellm/pull/39126)
- fix(proxy): build coordination Redis from REDIS\_\* env vars unconditionally by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39410](https://github.com/BerriAI/litellm/pull/39410)
- test: add interactive Rust Python parity harness by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39419](https://github.com/BerriAI/litellm/pull/39419)
- test(proxy): verify NO\_DOCS/NO\_REDOC/NO\_OPENAPI restrict every doc surface by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39378](https://github.com/BerriAI/litellm/pull/39378)
- test(bedrock): accept the router kwarg in the knowledge base search fake by [@​mateo-berri](https://github.com/mateo-berri) in [#​39420](https://github.com/BerriAI/litellm/pull/39420)
- refactor(python-bridge): split routes and add shared function tracing by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39031](https://github.com/BerriAI/litellm/pull/39031)
- fix(python-bridge): harden sync and async execution boundaries by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39332](https://github.com/BerriAI/litellm/pull/39332)
- refactor(python-bridge): declare sync and async routes once by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39333](https://github.com/BerriAI/litellm/pull/39333)
- feat(python): unify Rust opt-in and bridge policy by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39334](https://github.com/BerriAI/litellm/pull/39334)
- feat(router): add heuristic v2 complexity routing by [@​tin-berri](https://github.com/tin-berri) in [#​39276](https://github.com/BerriAI/litellm/pull/39276)
- fix(anthropic): upgrade legacy thinking to adaptive on adaptive-only Claude models for chat, Bedrock Converse, Invoke, Vertex AI, and Databricks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39159](https://github.com/BerriAI/litellm/pull/39159)
- fix(proxy): mark session/SSO/SAML cookies Secure behind a TLS-terminating reverse proxy by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39391](https://github.com/BerriAI/litellm/pull/39391)
- fix(bedrock): honor BEDROCK\_MANTLE\_API\_BASE on bedrock/mantle messages and chat URLs by [@​mateo-berri](https://github.com/mateo-berri) in [#​39364](https://github.com/BerriAI/litellm/pull/39364)
- fix(bedrock): strip client\_metadata from converse additionalModelRequestFields by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35967](https://github.com/BerriAI/litellm/pull/35967)
- chore(techdebt): clear fresh debt from the 2026-08-31 and 2026-09-01 windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39091](https://github.com/BerriAI/litellm/pull/39091)
- fix(mcp): cap tools preview and test-connection at the listing timeout and name the unreachable upstream by [@​mateo-berri](https://github.com/mateo-berri) in [#​38791](https://github.com/BerriAI/litellm/pull/38791)
- fix(hosted\_vllm): forward truncate\_prompt\_tokens on rerank requests by [@​mateo-berri](https://github.com/mateo-berri) in [#​39363](https://github.com/BerriAI/litellm/pull/39363)
- fix(messages): drop cache\_control ttl on non-Anthropic /v1/messages passthrough by [@​mateo-berri](https://github.com/mateo-berri) in [#​39355](https://github.com/BerriAI/litellm/pull/39355)
- fix(bedrock\_mantle): carry per-request AWS credentials into chat completions SigV4 signing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39362](https://github.com/BerriAI/litellm/pull/39362)
- feat(router): add a hybrid classifier that defers near tier boundaries by [@​tin-berri](https://github.com/tin-berri) in [#​39403](https://github.com/BerriAI/litellm/pull/39403)
- fix: recover the v2 migration resolver from concurrent migrate deploy deadlocks by [@​mateo-berri](https://github.com/mateo-berri) in [#​39187](https://github.com/BerriAI/litellm/pull/39187)
- fix(ollama\_chat): stamp finish\_reason tool\_calls when tool calls streamed before the done chunk by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39010](https://github.com/BerriAI/litellm/pull/39010)
- fix(router): route Claude Code subagents through session router by [@​moe-berri](https://github.com/moe-berri) in [#​39239](https://github.com/BerriAI/litellm/pull/39239)
- fix(responses): keep namespace tools intact when a guardrail returns them unchanged by [@​mateo-berri](https://github.com/mateo-berri) in [#​39366](https://github.com/BerriAI/litellm/pull/39366)
- fix(vector-store): resolve embedding credentials per request by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​38936](https://github.com/BerriAI/litellm/pull/38936)
- test(e2e/ui): give the seeded users passwords that pass the default password policy by [@​mateo-berri](https://github.com/mateo-berri) in [#​39442](https://github.com/BerriAI/litellm/pull/39442)
- fix(http\_handler): honor HTTP(S)\_PROXY / NO\_PROXY when force\_ipv4 uses the httpx transport by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39443](https://github.com/BerriAI/litellm/pull/39443)
- fix(proxy): stop leaking internal exception details to clients by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39380](https://github.com/BerriAI/litellm/pull/39380)
- fix(guardrails): forward mode and streaming params to crowdstrike\_aidr handler by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39317](https://github.com/BerriAI/litellm/pull/39317)
- fix(mcp): gate the connect-time OBO pre-flight on the key's allowed servers by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39447](https://github.com/BerriAI/litellm/pull/39447)
- fix(responses): keep provider response headers in streaming logging callbacks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38131](https://github.com/BerriAI/litellm/pull/38131)
- fix(mcp): fence an outbound-token write against an overlapping invalidation by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​35398](https://github.com/BerriAI/litellm/pull/35398)
- feat(cli): pre-fill the SSO verification code in the browser when the proxy allows it by [@​mateo-berri](https://github.com/mateo-berri) in [#​39428](https://github.com/BerriAI/litellm/pull/39428)
- fix(ui): paginate request logs by session groups server-side by [@​tin-berri](https://github.com/tin-berri) in [#​39257](https://github.com/BerriAI/litellm/pull/39257)
- feat(proxy): serve the auto-router preset catalog at runtime by [@​tin-berri](https://github.com/tin-berri) in [#​39412](https://github.com/BerriAI/litellm/pull/39412)
- docs: define Rust Python harness structure by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39456](https://github.com/BerriAI/litellm/pull/39456)
- fix(guardrails): apply PUT /guardrails/{id} to the serving worker immediately and reject invalid configs with 422 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38877](https://github.com/BerriAI/litellm/pull/38877)
- test(responses): expect the 404 OpenAI now returns for an unknown model by [@​mateo-berri](https://github.com/mateo-berri) in [#​39457](https://github.com/BerriAI/litellm/pull/39457)
- fix(guardrails): skip streaming guardrail rounds that re-scan cleared output by [@​mateo-berri](https://github.com/mateo-berri) in [#​39386](https://github.com/BerriAI/litellm/pull/39386)
- fix: keep litellm importable on Python 3.10 and guard 3.11-only typing imports in CI by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39448](https://github.com/BerriAI/litellm/pull/39448)
- fix(proxy): keep SpendLogs and callback session ids in sync when the request has none by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39450](https://github.com/BerriAI/litellm/pull/39450)
- feat(router): arm safeguard-refusal fallback on generic chains when no content-policy list exists by [@​tin-berri](https://github.com/tin-berri) in [#​39274](https://github.com/BerriAI/litellm/pull/39274)
- feat(azure): support credential chain for storage by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39229](https://github.com/BerriAI/litellm/pull/39229)
- chore(crowdstrike): expect the deduped end-of-stream scan in crowdstrike cadence test by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39467](https://github.com/BerriAI/litellm/pull/39467)
- fix(model\_armor): handle Anthropic Messages and Responses streams in post\_call by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39181](https://github.com/BerriAI/litellm/pull/39181)
- test: add OCR python-to-rust test parity ledger (WIP) by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39434](https://github.com/BerriAI/litellm/pull/39434)
- feat(complexity\_router): opt-in modality override of a kept session-affinity pin by [@​tin-berri](https://github.com/tin-berri) in [#​39454](https://github.com/BerriAI/litellm/pull/39454)
- feat(datadog\_llm\_obs): cost tag dimensions, router decision fields, reasoning token metric, redaction gating by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39402](https://github.com/BerriAI/litellm/pull/39402)
- test(rust-python-harness): wire existing e2e SDK tests into the matrix by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39463](https://github.com/BerriAI/litellm/pull/39463)
- fix(mcp): never exchange the LiteLLM virtual key as the upstream subject token by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39446](https://github.com/BerriAI/litellm/pull/39446)
- test: add mistral ocr transformation parity coverage by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39482](https://github.com/BerriAI/litellm/pull/39482)
- test(vector-store): accept embedding\_executor in the Bedrock KB hook fake handler by [@​mateo-berri](https://github.com/mateo-berri) in [#​39472](https://github.com/BerriAI/litellm/pull/39472)
- refactor(s3\_vectors): embed search queries through the shared vector store executor by [@​mateo-berri](https://github.com/mateo-berri) in [#​39474](https://github.com/BerriAI/litellm/pull/39474)
- fix(xai): bill from the cost xAI reports instead of recomputing it (internal copy of [#​36281](https://github.com/BerriAI/litellm/issues/36281)) by [@​mateo-berri](https://github.com/mateo-berri) in [#​39441](https://github.com/BerriAI/litellm/pull/39441)
- feat(ui): add 1M context auto-router preset by [@​tin-berri](https://github.com/tin-berri) in [#​39490](https://github.com/BerriAI/litellm/pull/39490)
- fix(ui): stop the create team form resetting organization and models by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39476](https://github.com/BerriAI/litellm/pull/39476)
- fix(ui): read the preset catalog at runtime in the dashboard tests by [@​tin-berri](https://github.com/tin-berri) in [#​39478](https://github.com/BerriAI/litellm/pull/39478)
- fix(sso): resolve multi-valued role claims to the highest privilege role by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39480](https://github.com/BerriAI/litellm/pull/39480)
- fix(guardrail): hide-secrets playground redaction and guardrail telemetry by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39398](https://github.com/BerriAI/litellm/pull/39398)
- fix(test): drop the duplicate embedding\_executor arg in the Bedrock KB fake handler by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39502](https://github.com/BerriAI/litellm/pull/39502)
- fix(ui): keep Virtual Keys list state in the URL so it survives leaving the page by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39481](https://github.com/BerriAI/litellm/pull/39481)
- fix(proxy): 404 a credential delete that matched nothing, and raise instead of return by [@​eeshsaxena](https://github.com/eeshsaxena) in [#​36260](https://github.com/BerriAI/litellm/pull/36260)
- fix(proxy-extras): only spend a migrate-deploy attempt when a pass made no progress by [@​mateo-berri](https://github.com/mateo-berri) in [#​39506](https://github.com/BerriAI/litellm/pull/39506)
- feat(cli): enable Claude Code gateway model discovery by default in lite claude by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39445](https://github.com/BerriAI/litellm/pull/39445)
- fix(docker): bump nginx runtime to 1.31.5-alpine3.24 and pin digest by [@​rakeshrepository](https://github.com/rakeshrepository) in [#​39561](https://github.com/BerriAI/litellm/pull/39561)
- fix: 1.99.0-rc2 UI bug batch (empty org on key create, session pagination, access group rename/delete) by [@​mateo-berri](https://github.com/mateo-berri) in [#​39436](https://github.com/BerriAI/litellm/pull/39436)
- feat(auto-router): support classifier reasoning effort by [@​moe-berri](https://github.com/moe-berri) in [#​39372](https://github.com/BerriAI/litellm/pull/39372)
- fix(ui): replace the key detail URL entry when a virtual key is rotated by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39471](https://github.com/BerriAI/litellm/pull/39471)
- test(timeout): time out against the local fake endpoint instead of api.openai.com by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39583](https://github.com/BerriAI/litellm/pull/39583)
- test(harness): add OCR parity with migration strategy runners by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​38765](https://github.com/BerriAI/litellm/pull/38765)
- fix(databricks): strip thinking\_blocks and reasoning\_content from outbound messages by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39409](https://github.com/BerriAI/litellm/pull/39409)
- test(ocr): record provider fixtures in the migration harness by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39425](https://github.com/BerriAI/litellm/pull/39425)
- feat(ui): keyset-paginate request logs by session trace by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38794](https://github.com/BerriAI/litellm/pull/38794)
- fix(proxy/db): translate libpq sslrootcert and verify-\* into Prisma's strict TLS params by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39563](https://github.com/BerriAI/litellm/pull/39563)
- fix(agents): keep the published agent in public\_agent\_groups by [@​mateo-berri](https://github.com/mateo-berri) in [#​39554](https://github.com/BerriAI/litellm/pull/39554)
- fix(mcp): scope allow-all servers to virtual keys by [@​tin-berri](https://github.com/tin-berri) in [#​39531](https://github.com/BerriAI/litellm/pull/39531)
- fix(team): generate team IDs for blank input by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39571](https://github.com/BerriAI/litellm/pull/39571)
- fix(bedrock\_mantle): stop dropping the web\_search tool on /v1/responses by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35987](https://github.com/BerriAI/litellm/pull/35987)
- chore: bump litellm-enterprise 0.1.63 -> 0.1.64, litellm-proxy-extras 0.4.92 -> 0.4.93 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39595](https://github.com/BerriAI/litellm/pull/39595)
- fix(images): forward gpt-image supported params like background to OpenAI and Azure by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39525](https://github.com/BerriAI/litellm/pull/39525)
- fix(proxy): return persisted team memberships from /user/new so first CLI login gets the default team by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39545](https://github.com/BerriAI/litellm/pull/39545)
- fix(spend\_tracking): add missing\_session\_id: omit to leave SpendLogs.session\_id null without a client session by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39458](https://github.com/BerriAI/litellm/pull/39458)
- fix: stop a cleared Organization field from failing key creation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39316](https://github.com/BerriAI/litellm/pull/39316)
- fix(ui): show MCP servers and agents inherited from access groups on team overview by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39215](https://github.com/BerriAI/litellm/pull/39215)
- fix(proxy): expose configured mode for auto-router models by [@​moe-berri](https://github.com/moe-berri) in [#​39619](https://github.com/BerriAI/litellm/pull/39619)
- fix(ui): aggregate session token usage in the logs table by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39598](https://github.com/BerriAI/litellm/pull/39598)
- fix(cost): apply off\_peak\_pricing in the dashscope cost calculator by [@​mateo-berri](https://github.com/mateo-berri) in [#​39592](https://github.com/BerriAI/litellm/pull/39592)
- test(bedrock): drop EOL cohere.command-r-plus-v1:0 from local\_testing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39608](https://github.com/BerriAI/litellm/pull/39608)
- fix(openai): default stream usage on PrivateLink and regional api.openai.com hosts by [@​mateo-berri](https://github.com/mateo-berri) in [#​39614](https://github.com/BerriAI/litellm/pull/39614)
- fix(proxy): drop anthropic-beta on the Vertex passthrough count-tokens route by [@​mateo-berri](https://github.com/mateo-berri) in [#​39597](https://github.com/BerriAI/litellm/pull/39597)
- fix(headroom): resolve CCR retrieval on streaming /v1/responses by [@​mateo-berri](https://github.com/mateo-berri) in [#​38808](https://github.com/BerriAI/litellm/pull/38808)
- fix(openai): bridge gpt-5.4+ tool calls to /v1/responses on every api.openai.com host by [@​mateo-berri](https://github.com/mateo-berri) in [#​39587](https://github.com/BerriAI/litellm/pull/39587)
- fix(router): pin JWT-authenticated callers by user id in deployment\_affinity by [@​mateo-berri](https://github.com/mateo-berri) in [#​39594](https://github.com/BerriAI/litellm/pull/39594)
- fix(cost): bill bedrock\_mantle web search at $12 per 1k queries using Bedrock's reported count by [@​mateo-berri](https://github.com/mateo-berri) in [#​39610](https://github.com/BerriAI/litellm/pull/39610)
- fix(azure\_ai): don't reclassify Foundry deployments as azure provider by [@​mateo-berri](https://github.com/mateo-berri) in [#​38975](https://github.com/BerriAI/litellm/pull/38975)
- fix(vector\_stores): only list vector stores the caller was granted by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39612](https://github.com/BerriAI/litellm/pull/39612)
- feat(models): add gpt-6-astra pricing and metadata by [@​mateo-berri](https://github.com/mateo-berri) in [#​39622](https://github.com/BerriAI/litellm/pull/39622)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39593](https://github.com/BerriAI/litellm/pull/39593)
- feat(router): limit heuristic\_v2 auto-routers to one without the auto\_router license feature by [@​tin-berri](https://github.com/tin-berri) in [#​39468](https://github.com/BerriAI/litellm/pull/39468)
- fix(ui): clear agents when updating team permissions by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39600](https://github.com/BerriAI/litellm/pull/39600)
- fix(auto\_router): bill the routing embedding to the caller's key and team by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39532](https://github.com/BerriAI/litellm/pull/39532)
- test(router): cover get\_configured\_mode so router\_code\_coverage passes by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​39630](https://github.com/BerriAI/litellm/pull/39630)
- fix: treat gpt-6 names as the gpt-5 request family in OpenAI and Azure configs by [@​mateo-berri](https://github.com/mateo-berri) in [#​39631](https://github.com/BerriAI/litellm/pull/39631)
- fix(prompts): key the in-memory prompt registry by environment by [@​mateo-berri](https://github.com/mateo-berri) in [#​38440](https://github.com/BerriAI/litellm/pull/38440)
- fix(ui): let the Internal Users search box match user\_id as well as email by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39604](https://github.com/BerriAI/litellm/pull/39604)
- test(responses): bound the background stream cancel e2e so an upstream stall skips fast by [@​mateo-berri](https://github.com/mateo-berri) in [#​39617](https://github.com/BerriAI/litellm/pull/39617)
- fix(vertex): add the API version to versionless project routes on the Vertex passthrough by [@​mateo-berri](https://github.com/mateo-berri) in [#​39625](https://github.com/BerriAI/litellm/pull/39625)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39648](https://github.com/BerriAI/litellm/pull/39648)
- fix(spend\_tracking): key /v1/messages spend rows on the msg\_ id the client received by [@​mateo-berri](https://github.com/mateo-berri) in [#​39511](https://github.com/BerriAI/litellm/pull/39511)
- ci(rust): build and test the ai-gateway server feature by [@​mateo-berri](https://github.com/mateo-berri) in [#​39493](https://github.com/BerriAI/litellm/pull/39493)
- ci(ui): run the UI build check through the image's ui-builder stage by [@​mateo-berri](https://github.com/mateo-berri) in [#​39496](https://github.com/BerriAI/litellm/pull/39496)
- fix(proxy): parse numeric multipart fields on /v1/images/edits back into numbers by [@​mateo-berri](https://github.com/mateo-berri) in [#​39510](https://github.com/BerriAI/litellm/pull/39510)
- fix(guardrails): remove the module-global translation mapping that leaked between tests by [@​mateo-berri](https://github.com/mateo-berri) in [#​39543](https://github.com/BerriAI/litellm/pull/39543)
- feat(azure\_ai): add grok-4.6 to the model cost map by [@​mateo-berri](https://github.com/mateo-berri) in [#​39426](https://github.com/BerriAI/litellm/pull/39426)
- fix: attach vector store search\_results when a guardrail is registered by [@​mateo-berri](https://github.com/mateo-berri) in [#​38984](https://github.com/BerriAI/litellm/pull/38984)
- fix(proxy): stop putting the literal string "None" in error payloads by [@​mateo-berri](https://github.com/mateo-berri) in [#​39521](https://github.com/BerriAI/litellm/pull/39521)
- fix(router): keep retry breadcrumbs per request and out of the request snapshot by [@​mateo-berri](https://github.com/mateo-berri) in [#​39491](https://github.com/BerriAI/litellm/pull/39491)
- fix(vector-stores): survive a failing vector store search in the chat completions hook by [@​mateo-berri](https://github.com/mateo-berri) in [#​39495](https://github.com/BerriAI/litellm/pull/39495)
- fix(utils): redact credential kwargs from the set\_verbose request line by [@​mateo-berri](https://github.com/mateo-berri) in [#​39526](https://github.com/BerriAI/litellm/pull/39526)
- fix(bedrock): skip the SigV4 credential chain when a bearer token is configured by [@​mateo-berri](https://github.com/mateo-berri) in [#​39411](https://github.com/BerriAI/litellm/pull/39411)
- fix(proxy-extras): kill the whole Prisma process group when a command times out by [@​mateo-berri](https://github.com/mateo-berri) in [#​39466](https://github.com/BerriAI/litellm/pull/39466)
- fix(rag): forward the managed vector store's params to the search call by [@​mateo-berri](https://github.com/mateo-berri) in [#​39452](https://github.com/BerriAI/litellm/pull/39452)
- fix(utils): redact credentials nested in extra\_body on the verbose optional-params line by [@​mateo-berri](https://github.com/mateo-berri) in [#​39538](https://github.com/BerriAI/litellm/pull/39538)
- fix(cont…
…101.0) (#2106)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | minor | `v1.100.1` → `v1.101.0` |
---
> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/6) for more information.
---
### Release Notes
<details>
<summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary>
### [`v1.101.0`](https://github.com/BerriAI/litellm/releases/tag/v1.101.0)
[Compare Source](https://github.com/BerriAI/litellm/compare/v1.100.1...v1.101.0)
#### Verify Docker Image Signature
All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0).
**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:
```bash
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
ghcr.io/berriai/litellm:v1.101.0
```
**Verify 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:
```bash
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.101.0/cosign.pub \
ghcr.io/berriai/litellm:v1.101.0
```
Expected 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
- fix(proxy): emit timing headers and overhead for /v1/messages and /v1/responses by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38840](https://github.com/BerriAI/litellm/pull/38840)
- fix(tests): derive the no-cache-read-rate savings baseline from the model map by [@​tin-berri](https://github.com/tin-berri) in [#​38863](https://github.com/BerriAI/litellm/pull/38863)
- chore(typing): clear Any seams across 47 files, ratchet basedpyright ceilings -3,302 by [@​mateo-berri](https://github.com/mateo-berri) in [#​37778](https://github.com/BerriAI/litellm/pull/37778)
- chore(typing): clear 1.2k basedpyright Any errors across 16 hotspot files by [@​mateo-berri](https://github.com/mateo-berri) in [#​36722](https://github.com/BerriAI/litellm/pull/36722)
- feat(bedrock): honor streaming buffer/sampling config for unbuffered post\_call scans by [@​mateo-berri](https://github.com/mateo-berri) in [#​38722](https://github.com/BerriAI/litellm/pull/38722)
- feat(cli): set ENABLE\_TOOL\_SEARCH=true for lite claude by [@​mateo-berri](https://github.com/mateo-berri) in [#​38942](https://github.com/BerriAI/litellm/pull/38942)
- fix(proxy): deliver budget alerts on webhook-only alerting and accept ALERTING\_WEBHOOK\_URL by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38441](https://github.com/BerriAI/litellm/pull/38441)
- docs(claude.md): require tests to check behavior, not code structure by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​38772](https://github.com/BerriAI/litellm/pull/38772)
- chore(newrelic): cover static default\_team\_settings per-team routing by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38857](https://github.com/BerriAI/litellm/pull/38857)
- fix: update stale source URLs and deprecation dates in model cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38801](https://github.com/BerriAI/litellm/pull/38801)
- feat(ci): close duplicate issues after a 3-day grace period by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​38381](https://github.com/BerriAI/litellm/pull/38381)
- docs(proxy): clarify spend semantics on /v2/user/info and /user/daily/activity by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38883](https://github.com/BerriAI/litellm/pull/38883)
- fix(guardrails): configure Prompt Security file timeout policy by [@​davida-ps](https://github.com/davida-ps) in [#​38083](https://github.com/BerriAI/litellm/pull/38083)
- fix(bedrock): stop duplicating Converse config blocks inside inferenceConfig by [@​mateo-berri](https://github.com/mateo-berri) in [#​38993](https://github.com/BerriAI/litellm/pull/38993)
- fix(guardrails): exclude images from HiddenLayer v1 scans by [@​Ashton-Sidhu](https://github.com/Ashton-Sidhu) in [#​29210](https://github.com/BerriAI/litellm/pull/29210)
- feat(spend\_tracking): persist router metadata in spend logs for internal router models by [@​mateo-berri](https://github.com/mateo-berri) in [#​39001](https://github.com/BerriAI/litellm/pull/39001)
- fix(vertex\_ai): graft default vertex path when api\_base has a version-only path by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38986](https://github.com/BerriAI/litellm/pull/38986)
- fix(proxy): allow unblocking customers via /customer/update by [@​cat0825](https://github.com/cat0825) in [#​34696](https://github.com/BerriAI/litellm/pull/34696)
- feat(openai): support workload identity federation (OIDC token exchange) by [@​mateo-berri](https://github.com/mateo-berri) in [#​38995](https://github.com/BerriAI/litellm/pull/38995)
- fix(otel): emit cache token counts on OTel v2 LLM spans by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38716](https://github.com/BerriAI/litellm/pull/38716)
- feat(proxy): add /v1/responses/input\_tokens token counting endpoint by [@​mateo-berri](https://github.com/mateo-berri) in [#​38997](https://github.com/BerriAI/litellm/pull/38997)
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38917](https://github.com/BerriAI/litellm/pull/38917)
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 in migrations image by [@​mateo-berri](https://github.com/mateo-berri) in [#​38973](https://github.com/BerriAI/litellm/pull/38973)
- feat(friendli): add zai-org/GLM-5.3-Flash model pricing by [@​Lee-Si-Yoon](https://github.com/Lee-Si-Yoon) in [#​38880](https://github.com/BerriAI/litellm/pull/38880)
- chore(techdebt): clear fresh debt from the 2026-08-29 and 2026-08-30 windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38884](https://github.com/BerriAI/litellm/pull/38884)
- fix(bedrock): surface Nova Sonic user transcripts, speech events, and usage in realtime API by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38597](https://github.com/BerriAI/litellm/pull/38597)
- fix(guardrails): carry Anthropic url image sources through to guardrails by [@​samtsai15](https://github.com/samtsai15) in [#​38940](https://github.com/BerriAI/litellm/pull/38940)
- feat(friendli): add zai-org/GLM-5.3 model pricing by [@​Lee-Si-Yoon](https://github.com/Lee-Si-Yoon) in [#​38881](https://github.com/BerriAI/litellm/pull/38881)
- fix(router): apply model renames to the in-memory deployment list by [@​yatishgoel](https://github.com/yatishgoel) in [#​38479](https://github.com/BerriAI/litellm/pull/38479)
- test(e2e): cover SCIM token creation and SCIM API auth in the Admin UI suite by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39027](https://github.com/BerriAI/litellm/pull/39027)
- feat(gigachat): add native API passthrough routes with spend logging by [@​mateo-berri](https://github.com/mateo-berri) in [#​38913](https://github.com/BerriAI/litellm/pull/38913)
- feat(gigachat): add passthrough gigachat route by [@​KnyazSh](https://github.com/KnyazSh) in [#​25886](https://github.com/BerriAI/litellm/pull/25886)
- feat(complexity-router): add classification\_mode to skip classifier on continuation turns by [@​tin-berri](https://github.com/tin-berri) in [#​38861](https://github.com/BerriAI/litellm/pull/38861)
- fix(proxy): preserve model table columns on master key rotation by [@​mateo-berri](https://github.com/mateo-berri) in [#​38878](https://github.com/BerriAI/litellm/pull/38878)
- fix(speech): stop forwarding response\_format as a chat param for Gemini TTS by [@​mateo-berri](https://github.com/mateo-berri) in [#​38819](https://github.com/BerriAI/litellm/pull/38819)
- fix(proxy): return 200 from /model/block and /model/unblock instead of 500 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38873](https://github.com/BerriAI/litellm/pull/38873)
- feat(complexity\_router): escalate oversized prompts to a tier that fits before dispatch by [@​tin-berri](https://github.com/tin-berri) in [#​38844](https://github.com/BerriAI/litellm/pull/38844)
- feat(shadow\_eval): target teams and users so JWT-auth traffic can be evaluated by [@​tin-berri](https://github.com/tin-berri) in [#​39015](https://github.com/BerriAI/litellm/pull/39015)
- fix(anthropic\_messages): drain upstream in a detached pump so client … by [@​nuernber](https://github.com/nuernber) in [#​36008](https://github.com/BerriAI/litellm/pull/36008)
- refactor(proxy): bound the budget window seed by time instead of request ids by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​38851](https://github.com/BerriAI/litellm/pull/38851)
- fix(proxy): ship psycopg so partitioned SpendLogs detection actually runs by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​38994](https://github.com/BerriAI/litellm/pull/38994)
- test(e2e): assert user-observable behavior instead of DOM structure by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39016](https://github.com/BerriAI/litellm/pull/39016)
- build(rust): configure native extension profiles by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39020](https://github.com/BerriAI/litellm/pull/39020)
- fix(ui): keep litellm\_credential\_name from LiteLLM Params JSON when no credential is selected by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39005](https://github.com/BerriAI/litellm/pull/39005)
- Revert "fix(ui): keep litellm\_credential\_name from LiteLLM Params JSON when no credential is selected" by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39046](https://github.com/BerriAI/litellm/pull/39046)
- fix(auth): quiet malformed virtual key rejections to stdout by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38838](https://github.com/BerriAI/litellm/pull/38838)
- fix(proxy): wire team-level logging callbacks into passthrough endpoints by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38979](https://github.com/BerriAI/litellm/pull/38979)
- feat(complexity\_router): opt-in modality-based capability routing for image requests by [@​tin-berri](https://github.com/tin-berri) in [#​39032](https://github.com/BerriAI/litellm/pull/39032)
- fix(ui): let the auto-router scoring tier list follow the theme by [@​tin-berri](https://github.com/tin-berri) in [#​39040](https://github.com/BerriAI/litellm/pull/39040)
- feat(ui): auto-router controls for context-window escalation by [@​tin-berri](https://github.com/tin-berri) in [#​39054](https://github.com/BerriAI/litellm/pull/39054)
- fix(redis): coerce env var string types and fix param discovery through decorator wrappers by [@​koladefaj](https://github.com/koladefaj) in [#​30644](https://github.com/BerriAI/litellm/pull/30644)
- feat(key management): show budget window usage on /key/info by [@​Thijmen](https://github.com/Thijmen) in [#​37044](https://github.com/BerriAI/litellm/pull/37044)
- fix(websearch): reject invalid explicit search tool selections by [@​georgeatparallel](https://github.com/georgeatparallel) in [#​38113](https://github.com/BerriAI/litellm/pull/38113)
- feat(shadow\_eval): compare several auto-routers on one job's sampled traffic by [@​tin-berri](https://github.com/tin-berri) in [#​39028](https://github.com/BerriAI/litellm/pull/39028)
- fix(speech): honor pcm/wav response\_format for Gemini TTS and reject unsupported containers by [@​mateo-berri](https://github.com/mateo-berri) in [#​38868](https://github.com/BerriAI/litellm/pull/38868)
- fix(proxy): match /v1/audio/speech content-type to the returned audio format by [@​mateo-berri](https://github.com/mateo-berri) in [#​38798](https://github.com/BerriAI/litellm/pull/38798)
- test(e2e): drop the two mgmt registry cells no shared-proxy test can cover by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39055](https://github.com/BerriAI/litellm/pull/39055)
- feat(ui): one classification frequency picker for complexity auto-routers by [@​tin-berri](https://github.com/tin-berri) in [#​39042](https://github.com/BerriAI/litellm/pull/39042)
- test(e2e/ui): automate 8 manual QA checklist flows by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39025](https://github.com/BerriAI/litellm/pull/39025)
- fix(key\_management): allow non-admin key\_type preset transitions on /key/update by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39051](https://github.com/BerriAI/litellm/pull/39051)
- chore(typing): clear 1.1k basedpyright Any errors across 53 backend files by [@​mateo-berri](https://github.com/mateo-berri) in [#​38796](https://github.com/BerriAI/litellm/pull/38796)
- fix(openai): forward reasoning\_effort for unknown model aliases instead of failing closed by [@​mateo-berri](https://github.com/mateo-berri) in [#​39065](https://github.com/BerriAI/litellm/pull/39065)
- test(e2e-ui): poll credential availability before Test Connect to deflake multi-instance runs by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39073](https://github.com/BerriAI/litellm/pull/39073)
- feat(ui): modality routing toggle on the auto-router create and edit forms by [@​tin-berri](https://github.com/tin-berri) in [#​39059](https://github.com/BerriAI/litellm/pull/39059)
- fix(proxy): include litellm\_model\_table in GET /v2/team/list by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39045](https://github.com/BerriAI/litellm/pull/39045)
- fix(bedrock): mask signed request headers in guardrail debug log by [@​mateo-berri](https://github.com/mateo-berri) in [#​39044](https://github.com/BerriAI/litellm/pull/39044)
- fix(bedrock): forward aws\_external\_id in files and batches credential loading by [@​mateo-berri](https://github.com/mateo-berri) in [#​39066](https://github.com/BerriAI/litellm/pull/39066)
- fix(mcp): persist alias MCP grants verbatim instead of rewriting to local server ids by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39119](https://github.com/BerriAI/litellm/pull/39119)
- fix(responses): json-encode object tool call arguments in the chat completions bridge by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35417](https://github.com/BerriAI/litellm/pull/35417)
- fix(cost): bill OCR annotation pages via annotation\_cost\_per\_page by [@​mateo-berri](https://github.com/mateo-berri) in [#​38985](https://github.com/BerriAI/litellm/pull/38985)
- fix(policy\_engine): restore request guardrails list after pipeline allow by [@​mateo-berri](https://github.com/mateo-berri) in [#​39038](https://github.com/BerriAI/litellm/pull/39038)
- fix(embeddings): omit encoding\_format when the client omits it on OpenAI-compatible calls by [@​mateo-berri](https://github.com/mateo-berri) in [#​38774](https://github.com/BerriAI/litellm/pull/38774)
- test: deflake MCP registry state, savings cost map, and MCP identity env reload tests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38891](https://github.com/BerriAI/litellm/pull/38891)
- feat(helm): add Argo CD PreSync hook and rollout strategy knobs to the componentized chart by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39112](https://github.com/BerriAI/litellm/pull/39112)
- fix(registry): veo 3.1 pricing tiers + roll up open registry PRs (glm-5.2, Qwen3.8-Flash, gemma-4-31b, scribe\_v2, fireworks/databricks deepseek v4) + deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38990](https://github.com/BerriAI/litellm/pull/38990)
- test(ui): budget DOM-structure assertions in dashboard tests by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39082](https://github.com/BerriAI/litellm/pull/39082)
- test(ui): assert DataTable behavior instead of DOM structure by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39084](https://github.com/BerriAI/litellm/pull/39084)
- test(ui): query the screen instead of the render result by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39085](https://github.com/BerriAI/litellm/pull/39085)
- fix(ui): stop checkboxes stretching to the full width of a form field by [@​yatishgoel](https://github.com/yatishgoel) in [#​39108](https://github.com/BerriAI/litellm/pull/39108)
- chore: bump litellm-enterprise 0.1.62 -> 0.1.63, litellm-proxy-extras 0.4.91 -> 0.4.92, litellm 1.100.0 -> 1.101.0 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39140](https://github.com/BerriAI/litellm/pull/39140)
- revert: restore search tool fallback when no router is configured by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39146](https://github.com/BerriAI/litellm/pull/39146)
- test(websearch): register configured search tool in pre-request hook test by [@​mateo-berri](https://github.com/mateo-berri) in [#​39074](https://github.com/BerriAI/litellm/pull/39074)
- feat(proxy): default to the v2 migration resolver, keep v1 as an opt-out by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31125](https://github.com/BerriAI/litellm/pull/31125)
- build(deps): bump browserslist to 4.28.8 to clear osv-scan by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39142](https://github.com/BerriAI/litellm/pull/39142)
- fix(ui): render the skill detail page with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39130](https://github.com/BerriAI/litellm/pull/39130)
- feat: add Azure AI DeepSeek V4 Flash 0731 pricing by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39023](https://github.com/BerriAI/litellm/pull/39023)
- fix(streaming): keep response id stable across streamed chunks by [@​Timik232](https://github.com/Timik232) in [#​38106](https://github.com/BerriAI/litellm/pull/38106)
- test(e2e/ui): cover the Budgets page create, edit and delete flows by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39052](https://github.com/BerriAI/litellm/pull/39052)
- feat(dashscope): add QwenCloud and Qwen AI Platform provider aliases by [@​mateo-berri](https://github.com/mateo-berri) in [#​39149](https://github.com/BerriAI/litellm/pull/39149)
- fix(bedrock): forward native structured outputs on Invoke instead of silently inlining the schema by [@​tin-berri](https://github.com/tin-berri) in [#​39070](https://github.com/BerriAI/litellm/pull/39070)
- test(e2e/ui): cover creating, testing and deleting a guardrail by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39053](https://github.com/BerriAI/litellm/pull/39053)
- refactor(types): replace Any with precise types across 73 modules by [@​mateo-berri](https://github.com/mateo-berri) in [#​39104](https://github.com/BerriAI/litellm/pull/39104)
- feat(models): add Claude Fable 5.1 across Anthropic, Bedrock, Vertex AI, and Azure AI by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39148](https://github.com/BerriAI/litellm/pull/39148)
- feat(guardrails): add Alice guardrail by [@​seanyasno-af](https://github.com/seanyasno-af) in [#​38898](https://github.com/BerriAI/litellm/pull/38898)
- test(e2e/ui): cover the Logs page filter drawer by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39056](https://github.com/BerriAI/litellm/pull/39056)
- test(e2e/ui): stop the suite failing on things that are not regressions by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39063](https://github.com/BerriAI/litellm/pull/39063)
- test(e2e/ui): cover the team Settings tab by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39058](https://github.com/BerriAI/litellm/pull/39058)
- test(e2e/ui): cover the Usage page activity tabs by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39061](https://github.com/BerriAI/litellm/pull/39061)
- fix(ui): render the guardrail garden detail page with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39131](https://github.com/BerriAI/litellm/pull/39131)
- fix(responses): tool call id shape breaks gpt-5 -> claude fallback conversations by [@​mateo-berri](https://github.com/mateo-berri) in [#​39144](https://github.com/BerriAI/litellm/pull/39144)
- fix(openai): drop tool\_choice when request has no tools on chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​39147](https://github.com/BerriAI/litellm/pull/39147)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39141](https://github.com/BerriAI/litellm/pull/39141)
- test(ui): pick select options by role instead of by text by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39175](https://github.com/BerriAI/litellm/pull/39175)
- feat(cost): support time-based off-peak pricing in cost calculation by [@​Srivatsa03](https://github.com/Srivatsa03) in [#​31725](https://github.com/BerriAI/litellm/pull/31725)
- fix(openai): flatten top-level tool schema combinators on chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38839](https://github.com/BerriAI/litellm/pull/38839)
- fix(s3): bound s3 object keys and download filenames for long Responses API ids by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39164](https://github.com/BerriAI/litellm/pull/39164)
- revert: default the proxy back to the v1 migration resolver by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39178](https://github.com/BerriAI/litellm/pull/39178)
- fix(prometheus): bound requested\_model label cardinality on client failure paths by [@​mateo-berri](https://github.com/mateo-berri) in [#​39136](https://github.com/BerriAI/litellm/pull/39136)
- feat(ui): add search to the Agent Hub tab and admin agents table by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39155](https://github.com/BerriAI/litellm/pull/39155)
- fix(anthropic): fix response\_format for claude-fable-5-1 on Vertex AI and Bedrock by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39184](https://github.com/BerriAI/litellm/pull/39184)
- fix: keep litellm\_credential\_name from LiteLLM Params JSON and gate stored credential attach to proxy admins by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39047](https://github.com/BerriAI/litellm/pull/39047)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39186](https://github.com/BerriAI/litellm/pull/39186)
- test: exempt MockTransport request-shape embedding tests from VCR replay by [@​mateo-berri](https://github.com/mateo-berri) in [#​39185](https://github.com/BerriAI/litellm/pull/39185)
- fix(ui): render the logs Tools panel with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39129](https://github.com/BerriAI/litellm/pull/39129)
- fix(proxy): default max\_idle\_connection\_lifetime to 60s on DB URLs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39134](https://github.com/BerriAI/litellm/pull/39134)
- fix(mcp): follow tools/list pagination from upstream servers by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39172](https://github.com/BerriAI/litellm/pull/39172)
- fix(proxy): resolve router model aliases in /utils/supported\_openai\_params by [@​mateo-berri](https://github.com/mateo-berri) in [#​39000](https://github.com/BerriAI/litellm/pull/39000)
- fix(azure): flatten top-level tool schema combinators on Azure chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38870](https://github.com/BerriAI/litellm/pull/38870)
- fix(bedrock): route streamed responses-API output through the unified guardrail by [@​mateo-berri](https://github.com/mateo-berri) in [#​38734](https://github.com/BerriAI/litellm/pull/38734)
- fix(ui): hide model write affordances from view-only admin sessions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38872](https://github.com/BerriAI/litellm/pull/38872)
- fix(cli): quote the Claude Code apiKeyHelper for cmd.exe on Windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39174](https://github.com/BerriAI/litellm/pull/39174)
- fix(logging): guarantee max\_parallel\_requests slot release when streaming logging fails by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39093](https://github.com/BerriAI/litellm/pull/39093)
- feat(alerting): slack alerts for per-user daily/monthly spend thresholds and spend anomaly detection by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38438](https://github.com/BerriAI/litellm/pull/38438)
- fix(docker): add public Wolfi apk repo to runtime image by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39033](https://github.com/BerriAI/litellm/pull/39033)
- fix(router): keep order fallback on the requested order level by [@​emerzon](https://github.com/emerzon) in [#​38969](https://github.com/BerriAI/litellm/pull/38969)
- test(e2e): cover retry-on-timeout and the context-window fallback by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39197](https://github.com/BerriAI/litellm/pull/39197)
- fix(budget): reject known estimates over remaining budget under fail\_closed\_budget\_enforcement by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39214](https://github.com/BerriAI/litellm/pull/39214)
- fix: stop a cleared Team field from blocking personal key creation by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39206](https://github.com/BerriAI/litellm/pull/39206)
- test: record each e2e test's source location in the JUnit report by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39209](https://github.com/BerriAI/litellm/pull/39209)
- feat(router): fall back on anthropic safeguard refusals on /v1/messages by [@​tin-berri](https://github.com/tin-berri) in [#​39157](https://github.com/BerriAI/litellm/pull/39157)
- fix(proxy): report requested model on Anthropic streaming message\_start by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35816](https://github.com/BerriAI/litellm/pull/35816)
- fix(helm): reuse the generated master key Secret on helm upgrade by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39219](https://github.com/BerriAI/litellm/pull/39219)
- fix(mcp): report per-server outcomes in aggregate REST tools/list by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39232](https://github.com/BerriAI/litellm/pull/39232)
- fix(cost-map): retry transient boot fetch failures and recover config deployments dropped by a stale cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39230](https://github.com/BerriAI/litellm/pull/39230)
- perf(scim): resolve group members with one user table read per member by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39228](https://github.com/BerriAI/litellm/pull/39228)
- fix(docker): install bedrock-realtime extra in monolith proxy images by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39223](https://github.com/BerriAI/litellm/pull/39223)
- fix(aiohttp\_transport): map transport-internal CancelledError to a retryable ConnectError by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39240](https://github.com/BerriAI/litellm/pull/39240)
- fix(bedrock): gate Converse cachePoint emission on model prompt caching support by [@​tin-berri](https://github.com/tin-berri) in [#​39210](https://github.com/BerriAI/litellm/pull/39210)
- fix(datadog\_llm\_obs): send tool calls, tool results and cache tokens in DD's own fields by [@​tin-berri](https://github.com/tin-berri) in [#​39222](https://github.com/BerriAI/litellm/pull/39222)
- feat(prometheus): expose per-key and per-team rate limit allowed and used gauges by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39236](https://github.com/BerriAI/litellm/pull/39236)
- feat(scim): add placeholder listing and merge so a shadowed account can be healed by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39231](https://github.com/BerriAI/litellm/pull/39231)
- fix: normalize provider-specific cache token fields in OTel v2 usage by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39202](https://github.com/BerriAI/litellm/pull/39202)
- fix: stop deployment default API key limits leaking into provider requests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39211](https://github.com/BerriAI/litellm/pull/39211)
- fix(proxy): keep passthrough logging metadata and model\_info dicts when team callbacks are wired by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39216](https://github.com/BerriAI/litellm/pull/39216)
- fix(guardrails): deliver modify\_response block as valid SSE on streaming chat and Responses by [@​mateo-berri](https://github.com/mateo-berri) in [#​39036](https://github.com/BerriAI/litellm/pull/39036)
- fix(search): forward search-tool params through the router, complete Parallel AI v1 param mapping by [@​jliounis](https://github.com/jliounis) in [#​37883](https://github.com/BerriAI/litellm/pull/37883)
- fix(bedrock): stop Converse crashing on bearer-token auth without SigV4 credentials by [@​mateo-berri](https://github.com/mateo-berri) in [#​39166](https://github.com/BerriAI/litellm/pull/39166)
- fix(docker): install saml extra in litellm-backend image by [@​ojensen-berri](https://github.com/ojensen-berri) in [#​39291](https://github.com/BerriAI/litellm/pull/39291)
- fix(guardrails): run apply\_guardrail-only providers in logging\_only mode by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39297](https://github.com/BerriAI/litellm/pull/39297)
- feat(gemini): day-0 pricing for gemini-3.8-flash by [@​mateo-berri](https://github.com/mateo-berri) in [#​39340](https://github.com/BerriAI/litellm/pull/39340)
- fix(vertex): avoid duplicate DeepSeek OCR model namespace by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39194](https://github.com/BerriAI/litellm/pull/39194)
- feat(streaming): carry final response cost on streamed usage by default by [@​mateo-berri](https://github.com/mateo-berri) in [#​39069](https://github.com/BerriAI/litellm/pull/39069)
- fix(rerank): map provider errors with the resolved provider on sync and async paths by [@​mateo-berri](https://github.com/mateo-berri) in [#​39176](https://github.com/BerriAI/litellm/pull/39176)
- test(e2e): read JUnit properties off the real collected pytest Item by [@​mateo-berri](https://github.com/mateo-berri) in [#​39246](https://github.com/BerriAI/litellm/pull/39246)
- feat(proxy): configurable display\_name for the Anthropic-shaped /v1/models listing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39238](https://github.com/BerriAI/litellm/pull/39238)
- fix(helm): scale the classic chart's HPA out at the documented 60 percent CPU by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​35975](https://github.com/BerriAI/litellm/pull/35975)
- fix(gemini): return enabled thinking content by default by [@​mateo-berri](https://github.com/mateo-berri) in [#​39160](https://github.com/BerriAI/litellm/pull/39160)
- fix: run access group key sync UPDATEs on the writer, not the read replica by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39128](https://github.com/BerriAI/litellm/pull/39128)
- fix(models): registry audit 2026-09-01: openai realtime and long-context tiers, mistral aliases, voyage, xai, fireworks, together, scaleway, azure ai, govcloud, azure gov, cloudflare whisper, deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39170](https://github.com/BerriAI/litellm/pull/39170)
- fix: apply optional\_pre\_call\_checks and reject unsupported router settings on /config/update by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39249](https://github.com/BerriAI/litellm/pull/39249)
- fix(vector\_stores): s3 vectors search router bypass + rag query config drop + ui error swallow by [@​michelligabriele](https://github.com/michelligabriele) in [#​34788](https://github.com/BerriAI/litellm/pull/34788)
- fix(models): key Azure DeepSeek V4 Flash 0731 by its Foundry catalog id by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39341](https://github.com/BerriAI/litellm/pull/39341)
- fix(deps): raise the tornado and pypdf floors for six new advisories by [@​mateo-berri](https://github.com/mateo-berri) in [#​39188](https://github.com/BerriAI/litellm/pull/39188)
- fix(headroom): stop re-compressing retrieved CCR content in client tool loops by [@​QuantumBreakz](https://github.com/QuantumBreakz) in [#​38591](https://github.com/BerriAI/litellm/pull/38591)
- feat(agentcore-a2a): derive runtime session id from A2A message.contextId by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39371](https://github.com/BerriAI/litellm/pull/39371)
- fix(proxy): share per-model budget counters across replicas through the spend counter cache by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39375](https://github.com/BerriAI/litellm/pull/39375)
- fix(proxy-extras): give prisma migrate deploy its own timeout budget by [@​mateo-berri](https://github.com/mateo-berri) in [#​39365](https://github.com/BerriAI/litellm/pull/39365)
- fix(proxy): route container create and list through model\_list deployments by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39220](https://github.com/BerriAI/litellm/pull/39220)
- test(build): validate release wheel contracts by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39021](https://github.com/BerriAI/litellm/pull/39021)
- refactor(rust): extract domain-neutral Python interop by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39026](https://github.com/BerriAI/litellm/pull/39026)
- refactor(rust): standardize the core Error type by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39331](https://github.com/BerriAI/litellm/pull/39331)
- fix(ui): preserve full AgentCore runtime ARN in agent edit form by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39382](https://github.com/BerriAI/litellm/pull/39382)
- feat(ui): update OpenAI preset model tiers by [@​tin-berri](https://github.com/tin-berri) in [#​39396](https://github.com/BerriAI/litellm/pull/39396)
- fix(router): resolve realtime session model to routed deployment by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​36811](https://github.com/BerriAI/litellm/pull/36811)
- fix(security): restrict and validate file uploads at /v1/files and /upload/logo by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39379](https://github.com/BerriAI/litellm/pull/39379)
- feat(auth): enforce configurable password policy and SSO-only login by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39381](https://github.com/BerriAI/litellm/pull/39381)
- fix(agents): redact secret litellm\_params fields from all /v1/agents responses by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39389](https://github.com/BerriAI/litellm/pull/39389)
- fix(otel): stamp Langfuse root observation input and output from the request task by [@​mateo-berri](https://github.com/mateo-berri) in [#​39369](https://github.com/BerriAI/litellm/pull/39369)
- fix(guardrails): track and tear down presidio sibling callbacks on delete and update by [@​mateo-berri](https://github.com/mateo-berri) in [#​39271](https://github.com/BerriAI/litellm/pull/39271)
- fix(spend): keep every-deployment scope on gateway cache-injection marks by [@​mateo-berri](https://github.com/mateo-berri) in [#​39241](https://github.com/BerriAI/litellm/pull/39241)
- fix(proxy/db): keep prisma predicates from raising TypeError under a mocked prisma module by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39253](https://github.com/BerriAI/litellm/pull/39253)
- fix(proxy): word database 503s by whether the fault is transient by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39256](https://github.com/BerriAI/litellm/pull/39256)
- refactor(utils): remove the dead get\_api\_key provider-key resolver by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39260](https://github.com/BerriAI/litellm/pull/39260)
- feat(mcp): semantic tool search for the native MCP Gateway by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39404](https://github.com/BerriAI/litellm/pull/39404)
- fix(logging): redact credential query params from the uvicorn access log by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39293](https://github.com/BerriAI/litellm/pull/39293)
- feat(model\_prices): add meta/muse-spark-1.3 and its contributor tier by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39417](https://github.com/BerriAI/litellm/pull/39417)
- refactor(core): move audio transcription into core by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39126](https://github.com/BerriAI/litellm/pull/39126)
- fix(proxy): build coordination Redis from REDIS\_\* env vars unconditionally by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39410](https://github.com/BerriAI/litellm/pull/39410)
- test: add interactive Rust Python parity harness by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39419](https://github.com/BerriAI/litellm/pull/39419)
- test(proxy): verify NO\_DOCS/NO\_REDOC/NO\_OPENAPI restrict every doc surface by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39378](https://github.com/BerriAI/litellm/pull/39378)
- test(bedrock): accept the router kwarg in the knowledge base search fake by [@​mateo-berri](https://github.com/mateo-berri) in [#​39420](https://github.com/BerriAI/litellm/pull/39420)
- refactor(python-bridge): split routes and add shared function tracing by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39031](https://github.com/BerriAI/litellm/pull/39031)
- fix(python-bridge): harden sync and async execution boundaries by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39332](https://github.com/BerriAI/litellm/pull/39332)
- refactor(python-bridge): declare sync and async routes once by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39333](https://github.com/BerriAI/litellm/pull/39333)
- feat(python): unify Rust opt-in and bridge policy by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39334](https://github.com/BerriAI/litellm/pull/39334)
- feat(router): add heuristic v2 complexity routing by [@​tin-berri](https://github.com/tin-berri) in [#​39276](https://github.com/BerriAI/litellm/pull/39276)
- fix(anthropic): upgrade legacy thinking to adaptive on adaptive-only Claude models for chat, Bedrock Converse, Invoke, Vertex AI, and Databricks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39159](https://github.com/BerriAI/litellm/pull/39159)
- fix(proxy): mark session/SSO/SAML cookies Secure behind a TLS-terminating reverse proxy by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39391](https://github.com/BerriAI/litellm/pull/39391)
- fix(bedrock): honor BEDROCK\_MANTLE\_API\_BASE on bedrock/mantle messages and chat URLs by [@​mateo-berri](https://github.com/mateo-berri) in [#​39364](https://github.com/BerriAI/litellm/pull/39364)
- fix(bedrock): strip client\_metadata from converse additionalModelRequestFields by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35967](https://github.com/BerriAI/litellm/pull/35967)
- chore(techdebt): clear fresh debt from the 2026-08-31 and 2026-09-01 windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39091](https://github.com/BerriAI/litellm/pull/39091)
- fix(mcp): cap tools preview and test-connection at the listing timeout and name the unreachable upstream by [@​mateo-berri](https://github.com/mateo-berri) in [#​38791](https://github.com/BerriAI/litellm/pull/38791)
- fix(hosted\_vllm): forward truncate\_prompt\_tokens on rerank requests by [@​mateo-berri](https://github.com/mateo-berri) in [#​39363](https://github.com/BerriAI/litellm/pull/39363)
- fix(messages): drop cache\_control ttl on non-Anthropic /v1/messages passthrough by [@​mateo-berri](https://github.com/mateo-berri) in [#​39355](https://github.com/BerriAI/litellm/pull/39355)
- fix(bedrock\_mantle): carry per-request AWS credentials into chat completions SigV4 signing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39362](https://github.com/BerriAI/litellm/pull/39362)
- feat(router): add a hybrid classifier that defers near tier boundaries by [@​tin-berri](https://github.com/tin-berri) in [#​39403](https://github.com/BerriAI/litellm/pull/39403)
- fix: recover the v2 migration resolver from concurrent migrate deploy deadlocks by [@​mateo-berri](https://github.com/mateo-berri) in [#​39187](https://github.com/BerriAI/litellm/pull/39187)
- fix(ollama\_chat): stamp finish\_reason tool\_calls when tool calls streamed before the done chunk by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39010](https://github.com/BerriAI/litellm/pull/39010)
- fix(router): route Claude Code subagents through session router by [@​moe-berri](https://github.com/moe-berri) in [#​39239](https://github.com/BerriAI/litellm/pull/39239)
- fix(responses): keep namespace tools intact when a guardrail returns them unchanged by [@​mateo-berri](https://github.com/mateo-berri) in [#​39366](https://github.com/BerriAI/litellm/pull/39366)
- fix(vector-store): resolve embedding credentials per request by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​38936](https://github.com/BerriAI/litellm/pull/38936)
- test(e2e/ui): give the seeded users passwords that pass the default password policy by [@​mateo-berri](https://github.com/mateo-berri) in [#​39442](https://github.com/BerriAI/litellm/pull/39442)
- fix(http\_handler): honor HTTP(S)\_PROXY / NO\_PROXY when force\_ipv4 uses the httpx transport by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39443](https://github.com/BerriAI/litellm/pull/39443)
- fix(proxy): stop leaking internal exception details to clients by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39380](https://github.com/BerriAI/litellm/pull/39380)
- fix(guardrails): forward mode and streaming params to crowdstrike\_aidr handler by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39317](https://github.com/BerriAI/litellm/pull/39317)
- fix(mcp): gate the connect-time OBO pre-flight on the key's allowed servers by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39447](https://github.com/BerriAI/litellm/pull/39447)
- fix(responses): keep provider response headers in streaming logging callbacks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38131](https://github.com/BerriAI/litellm/pull/38131)
- fix(mcp): fence an outbound-token write against an overlapping invalidation by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​35398](https://github.com/BerriAI/litellm/pull/35398)
- feat(cli): pre-fill the SSO verification code in the browser when the proxy allows it by [@​mateo-berri](https://github.com/mateo-berri) in [#​39428](https://github.com/BerriAI/litellm/pull/39428)
- fix(ui): paginate request logs by session groups server-side by [@​tin-berri](https://github.com/tin-berri) in [#​39257](https://github.com/BerriAI/litellm/pull/39257)
- feat(proxy): serve the auto-router preset catalog at runtime by [@​tin-berri](https://github.com/tin-berri) in [#​39412](https://github.com/BerriAI/litellm/pull/39412)
- docs: define Rust Python harness structure by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39456](https://github.com/BerriAI/litellm/pull/39456)
- fix(guardrails): apply PUT /guardrails/{id} to the serving worker immediately and reject invalid configs with 422 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38877](https://github.com/BerriAI/litellm/pull/38877)
- test(responses): expect the 404 OpenAI now returns for an unknown model by [@​mateo-berri](https://github.com/mateo-berri) in [#​39457](https://github.com/BerriAI/litellm/pull/39457)
- fix(guardrails): skip streaming guardrail rounds that re-scan cleared output by [@​mateo-berri](https://github.com/mateo-berri) in [#​39386](https://github.com/BerriAI/litellm/pull/39386)
- fix: keep litellm importable on Python 3.10 and guard 3.11-only typing imports in CI by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39448](https://github.com/BerriAI/litellm/pull/39448)
- fix(proxy): keep SpendLogs and callback session ids in sync when the request has none by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39450](https://github.com/BerriAI/litellm/pull/39450)
- feat(router): arm safeguard-refusal fallback on generic chains when no content-policy list exists by [@​tin-berri](https://github.com/tin-berri) in [#​39274](https://github.com/BerriAI/litellm/pull/39274)
- feat(azure): support credential chain for storage by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39229](https://github.com/BerriAI/litellm/pull/39229)
- chore(crowdstrike): expect the deduped end-of-stream scan in crowdstrike cadence test by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39467](https://github.com/BerriAI/litellm/pull/39467)
- fix(model\_armor): handle Anthropic Messages and Responses streams in post\_call by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39181](https://github.com/BerriAI/litellm/pull/39181)
- test: add OCR python-to-rust test parity ledger (WIP) by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39434](https://github.com/BerriAI/litellm/pull/39434)
- feat(complexity\_router): opt-in modality override of a kept session-affinity pin by [@​tin-berri](https://github.com/tin-berri) in [#​39454](https://github.com/BerriAI/litellm/pull/39454)
- feat(datadog\_llm\_obs): cost tag dimensions, router decision fields, reasoning token metric, redaction gating by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39402](https://github.com/BerriAI/litellm/pull/39402)
- test(rust-python-harness): wire existing e2e SDK tests into the matrix by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39463](https://github.com/BerriAI/litellm/pull/39463)
- fix(mcp): never exchange the LiteLLM virtual key as the upstream subject token by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39446](https://github.com/BerriAI/litellm/pull/39446)
- test: add mistral ocr transformation parity coverage by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39482](https://github.com/BerriAI/litellm/pull/39482)
- test(vector-store): accept embedding\_executor in the Bedrock KB hook fake handler by [@​mateo-berri](https://github.com/mateo-berri) in [#​39472](https://github.com/BerriAI/litellm/pull/39472)
- refactor(s3\_vectors): embed search queries through the shared vector store executor by [@​mateo-berri](https://github.com/mateo-berri) in [#​39474](https://github.com/BerriAI/litellm/pull/39474)
- fix(xai): bill from the cost xAI reports instead of recomputing it (internal copy of [#​36281](https://github.com/BerriAI/litellm/issues/36281)) by [@​mateo-berri](https://github.com/mateo-berri) in [#​39441](https://github.com/BerriAI/litellm/pull/39441)
- feat(ui): add 1M context auto-router preset by [@​tin-berri](https://github.com/tin-berri) in [#​39490](https://github.com/BerriAI/litellm/pull/39490)
- fix(ui): stop the create team form resetting organization and models by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39476](https://github.com/BerriAI/litellm/pull/39476)
- fix(ui): read the preset catalog at runtime in the dashboard tests by [@​tin-berri](https://github.com/tin-berri) in [#​39478](https://github.com/BerriAI/litellm/pull/39478)
- fix(sso): resolve multi-valued role claims to the highest privilege role by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39480](https://github.com/BerriAI/litellm/pull/39480)
- fix(guardrail): hide-secrets playground redaction and guardrail telemetry by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39398](https://github.com/BerriAI/litellm/pull/39398)
- fix(test): drop the duplicate embedding\_executor arg in the Bedrock KB fake handler by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39502](https://github.com/BerriAI/litellm/pull/39502)
- fix(ui): keep Virtual Keys list state in the URL so it survives leaving the page by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39481](https://github.com/BerriAI/litellm/pull/39481)
- fix(proxy): 404 a credential delete that matched nothing, and raise instead of return by [@​eeshsaxena](https://github.com/eeshsaxena) in [#​36260](https://github.com/BerriAI/litellm/pull/36260)
- fix(proxy-extras): only spend a migrate-deploy attempt when a pass made no progress by [@​mateo-berri](https://github.com/mateo-berri) in [#​39506](https://github.com/BerriAI/litellm/pull/39506)
- feat(cli): enable Claude Code gateway model discovery by default in lite claude by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39445](https://github.com/BerriAI/litellm/pull/39445)
- fix(docker): bump nginx runtime to 1.31.5-alpine3.24 and pin digest by [@​rakeshrepository](https://github.com/rakeshrepository) in [#​39561](https://github.com/BerriAI/litellm/pull/39561)
- fix: 1.99.0-rc2 UI bug batch (empty org on key create, session pagination, access group rename/delete) by [@​mateo-berri](https://github.com/mateo-berri) in [#​39436](https://github.com/BerriAI/litellm/pull/39436)
- feat(auto-router): support classifier reasoning effort by [@​moe-berri](https://github.com/moe-berri) in [#​39372](https://github.com/BerriAI/litellm/pull/39372)
- fix(ui): replace the key detail URL entry when a virtual key is rotated by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39471](https://github.com/BerriAI/litellm/pull/39471)
- test(timeout): time out against the local fake endpoint instead of api.openai.com by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39583](https://github.com/BerriAI/litellm/pull/39583)
- test(harness): add OCR parity with migration strategy runners by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​38765](https://github.com/BerriAI/litellm/pull/38765)
- fix(databricks): strip thinking\_blocks and reasoning\_content from outbound messages by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39409](https://github.com/BerriAI/litellm/pull/39409)
- test(ocr): record provider fixtures in the migration harness by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39425](https://github.com/BerriAI/litellm/pull/39425)
- feat(ui): keyset-paginate request logs by session trace by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38794](https://github.com/BerriAI/litellm/pull/38794)
- fix(proxy/db): translate libpq sslrootcert and verify-\* into Prisma's strict TLS params by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39563](https://github.com/BerriAI/litellm/pull/39563)
- fix(agents): keep the published agent in public\_agent\_groups by [@​mateo-berri](https://github.com/mateo-berri) in [#​39554](https://github.com/BerriAI/litellm/pull/39554)
- fix(mcp): scope allow-all servers to virtual keys by [@​tin-berri](https://github.com/tin-berri) in [#​39531](https://github.com/BerriAI/litellm/pull/39531)
- fix(team): generate team IDs for blank input by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39571](https://github.com/BerriAI/litellm/pull/39571)
- fix(bedrock\_mantle): stop dropping the web\_search tool on /v1/responses by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35987](https://github.com/BerriAI/litellm/pull/35987)
- chore: bump litellm-enterprise 0.1.63 -> 0.1.64, litellm-proxy-extras 0.4.92 -> 0.4.93 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39595](https://github.com/BerriAI/litellm/pull/39595)
- fix(images): forward gpt-image supported params like background to OpenAI and Azure by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39525](https://github.com/BerriAI/litellm/pull/39525)
- fix(proxy): return persisted team memberships from /user/new so first CLI login gets the default team by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39545](https://github.com/BerriAI/litellm/pull/39545)
- fix(spend\_tracking): add missing\_session\_id: omit to leave SpendLogs.session\_id null without a client session by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39458](https://github.com/BerriAI/litellm/pull/39458)
- fix: stop a cleared Organization field from failing key creation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39316](https://github.com/BerriAI/litellm/pull/39316)
- fix(ui): show MCP servers and agents inherited from access groups on team overview by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39215](https://github.com/BerriAI/litellm/pull/39215)
- fix(proxy): expose configured mode for auto-router models by [@​moe-berri](https://github.com/moe-berri) in [#​39619](https://github.com/BerriAI/litellm/pull/39619)
- fix(ui): aggregate session token usage in the logs table by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39598](https://github.com/BerriAI/litellm/pull/39598)
- fix(cost): apply off\_peak\_pricing in the dashscope cost calculator by [@​mateo-berri](https://github.com/mateo-berri) in [#​39592](https://github.com/BerriAI/litellm/pull/39592)
- test(bedrock): drop EOL cohere.command-r-plus-v1:0 from local\_testing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39608](https://github.com/BerriAI/litellm/pull/39608)
- fix(openai): default stream usage on PrivateLink and regional api.openai.com hosts by [@​mateo-berri](https://github.com/mateo-berri) in [#​39614](https://github.com/BerriAI/litellm/pull/39614)
- fix(proxy): drop anthropic-beta on the Vertex passthrough count-tokens route by [@​mateo-berri](https://github.com/mateo-berri) in [#​39597](https://github.com/BerriAI/litellm/pull/39597)
- fix(headroom): resolve CCR retrieval on streaming /v1/responses by [@​mateo-berri](https://github.com/mateo-berri) in [#​38808](https://github.com/BerriAI/litellm/pull/38808)
- fix(openai): bridge gpt-5.4+ tool calls to /v1/responses on every api.openai.com host by [@​mateo-berri](https://github.com/mateo-berri) in [#​39587](https://github.com/BerriAI/litellm/pull/39587)
- fix(router): pin JWT-authenticated callers by user id in deployment\_affinity by [@​mateo-berri](https://github.com/mateo-berri) in [#​39594](https://github.com/BerriAI/litellm/pull/39594)
- fix(cost): bill bedrock\_mantle web search at $12 per 1k queries using Bedrock's reported count by [@​mateo-berri](https://github.com/mateo-berri) in [#​39610](https://github.com/BerriAI/litellm/pull/39610)
- fix(azure\_ai): don't reclassify Foundry deployments as azure provider by [@​mateo-berri](https://github.com/mateo-berri) in [#​38975](https://github.com/BerriAI/litellm/pull/38975)
- fix(vector\_stores): only list vector stores the caller was granted by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39612](https://github.com/BerriAI/litellm/pull/39612)
- feat(models): add gpt-6-astra pricing and metadata by [@​mateo-berri](https://github.com/mateo-berri) in [#​39622](https://github.com/BerriAI/litellm/pull/39622)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39593](https://github.com/BerriAI/litellm/pull/39593)
- feat(router): limit heuristic\_v2 auto-routers to one without the auto\_router license feature by [@​tin-berri](https://github.com/tin-berri) in [#​39468](https://github.com/BerriAI/litellm/pull/39468)
- fix(ui): clear agents when updating team permissions by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39600](https://github.com/BerriAI/litellm/pull/39600)
- fix(auto\_router): bill the routing embedding to the caller's key and team by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39532](https://github.com/BerriAI/litellm/pull/39532)
- test(router): cover get\_configured\_mode so router\_code\_coverage passes by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​39630](https://github.com/BerriAI/litellm/pull/39630)
- fix: treat gpt-6 names as the gpt-5 request family in OpenAI and Azure configs by [@​mateo-berri](https://github.com/mateo-berri) in [#​39631](https://github.com/BerriAI/litellm/pull/39631)
- fix(prompts): key the in-memory prompt registry by environment by [@​mateo-berri](https://github.com/mateo-berri) in [#​38440](https://github.com/BerriAI/litellm/pull/38440)
- fix(ui): let the Internal Users search box match user\_id as well as email by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39604](https://github.com/BerriAI/litellm/pull/39604)
- test(responses): bound the background stream cancel e2e so an upstream stall skips fast by [@​mateo-berri](https://github.com/mateo-berri) in [#​39617](https://github.com/BerriAI/litellm/pull/39617)
- fix(vertex): add the API version to versionless project routes on the Vertex passthrough by [@​mateo-berri](https://github.com/mateo-berri) in [#​39625](https://github.com/BerriAI/litellm/pull/39625)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39648](https://github.com/BerriAI/litellm/pull/39648)
- fix(spend\_tracking): key /v1/messages spend rows on the msg\_ id the client received by [@​mateo-berri](https://github.com/mateo-berri) in [#​39511](https://github.com/BerriAI/litellm/pull/39511)
- ci(rust): build and test the ai-gateway server feature by [@​mateo-berri](https://github.com/mateo-berri) in [#​39493](https://github.com/BerriAI/litellm/pull/39493)
- ci(ui): run the UI build check through the image's ui-builder stage by [@​mateo-berri](https://github.com/mateo-berri) in [#​39496](https://github.com/BerriAI/litellm/pull/39496)
- fix(proxy): parse numeric multipart fields on /v1/images/edits back into numbers by [@​mateo-berri](https://github.com/mateo-berri) in [#​39510](https://github.com/BerriAI/litellm/pull/39510)
- fix(guardrails): remove the module-global translation mapping that leaked between tests by [@​mateo-berri](https://github.com/mateo-berri) in [#​39543](https://github.com/BerriAI/litellm/pull/39543)
- feat(azure\_ai): add grok-4.6 to the model cost map by [@​mateo-berri](https://github.com/mateo-berri) in [#​39426](https://github.com/BerriAI/litellm/pull/39426)
- fix: attach vector store search\_results when a guardrail is registered by [@​mateo-berri](https://github.com/mateo-berri) in [#​38984](https://github.com/BerriAI/litellm/pull/38984)
- fix(proxy): stop putting the literal string "None" in error payloads by [@​mateo-berri](https://github.com/mateo-berri) in [#​39521](https://github.com/BerriAI/litellm/pull/39521)
- fix(router): keep retry breadcrumbs per request and out of the request snapshot by [@​mateo-berri](https://github.com/mateo-berri) in [#​39491](https://github.com/BerriAI/litellm/pull/39491)
- fix(vector-stores): survive a failing vector store search in the chat completions hook by [@​mateo-berri](https://github.com/mateo-berri) in [#​39495](https://github.com/BerriAI/litellm/pull/39495)
- fix(utils): redact credential kwargs from the set\_verbose request line by [@​mateo-berri](https://github.com/mateo-berri) in [#​39526](https://github.com/BerriAI/litellm/pull/39526)
- fix(bedrock): skip the SigV4 credential chain when a bearer token is configured by [@​mateo-berri](https://github.com/mateo-berri) in [#​39411](https://github.com/BerriAI/litellm/pull/39411)
- fix(proxy-extras): kill the whole Prisma process group when a command times out by [@​mateo-berri](https://github.com/mateo-berri) in [#​39466](https://github.com/BerriAI/litellm/pull/39466)
- fix(rag): forward the managed vector store's params to the search call by [@​mateo-berri](https://github.com/mateo-berri) in [#​39452](https://github.com/BerriAI/litellm/pull/39452)
- fix(utils): redact credentials nested in extra\_body on the verbose optional-params…
…102.0) (#630)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | minor | `v1.100.1` → `v1.102.0` |
---
> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/141) for more information.
---
### Release Notes
<details>
<summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary>
### [`v1.102.0`](https://github.com/BerriAI/litellm/compare/v1.101.0...v1.102.0)
[Compare Source](https://github.com/BerriAI/litellm/compare/v1.101.0...v1.102.0)
### [`v1.101.0`](https://github.com/BerriAI/litellm/releases/tag/v1.101.0)
[Compare Source](https://github.com/BerriAI/litellm/compare/v1.100.1...v1.101.0)
##### Verify Docker Image Signature
All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0).
**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:
```bash
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
ghcr.io/berriai/litellm:v1.101.0
```
**Verify 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:
```bash
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.101.0/cosign.pub \
ghcr.io/berriai/litellm:v1.101.0
```
Expected 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
- fix(proxy): emit timing headers and overhead for /v1/messages and /v1/responses by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38840](https://github.com/BerriAI/litellm/pull/38840)
- fix(tests): derive the no-cache-read-rate savings baseline from the model map by [@​tin-berri](https://github.com/tin-berri) in [#​38863](https://github.com/BerriAI/litellm/pull/38863)
- chore(typing): clear Any seams across 47 files, ratchet basedpyright ceilings -3,302 by [@​mateo-berri](https://github.com/mateo-berri) in [#​37778](https://github.com/BerriAI/litellm/pull/37778)
- chore(typing): clear 1.2k basedpyright Any errors across 16 hotspot files by [@​mateo-berri](https://github.com/mateo-berri) in [#​36722](https://github.com/BerriAI/litellm/pull/36722)
- feat(bedrock): honor streaming buffer/sampling config for unbuffered post\_call scans by [@​mateo-berri](https://github.com/mateo-berri) in [#​38722](https://github.com/BerriAI/litellm/pull/38722)
- feat(cli): set ENABLE\_TOOL\_SEARCH=true for lite claude by [@​mateo-berri](https://github.com/mateo-berri) in [#​38942](https://github.com/BerriAI/litellm/pull/38942)
- fix(proxy): deliver budget alerts on webhook-only alerting and accept ALERTING\_WEBHOOK\_URL by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38441](https://github.com/BerriAI/litellm/pull/38441)
- docs(claude.md): require tests to check behavior, not code structure by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​38772](https://github.com/BerriAI/litellm/pull/38772)
- chore(newrelic): cover static default\_team\_settings per-team routing by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38857](https://github.com/BerriAI/litellm/pull/38857)
- fix: update stale source URLs and deprecation dates in model cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38801](https://github.com/BerriAI/litellm/pull/38801)
- feat(ci): close duplicate issues after a 3-day grace period by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​38381](https://github.com/BerriAI/litellm/pull/38381)
- docs(proxy): clarify spend semantics on /v2/user/info and /user/daily/activity by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38883](https://github.com/BerriAI/litellm/pull/38883)
- fix(guardrails): configure Prompt Security file timeout policy by [@​davida-ps](https://github.com/davida-ps) in [#​38083](https://github.com/BerriAI/litellm/pull/38083)
- fix(bedrock): stop duplicating Converse config blocks inside inferenceConfig by [@​mateo-berri](https://github.com/mateo-berri) in [#​38993](https://github.com/BerriAI/litellm/pull/38993)
- fix(guardrails): exclude images from HiddenLayer v1 scans by [@​Ashton-Sidhu](https://github.com/Ashton-Sidhu) in [#​29210](https://github.com/BerriAI/litellm/pull/29210)
- feat(spend\_tracking): persist router metadata in spend logs for internal router models by [@​mateo-berri](https://github.com/mateo-berri) in [#​39001](https://github.com/BerriAI/litellm/pull/39001)
- fix(vertex\_ai): graft default vertex path when api\_base has a version-only path by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38986](https://github.com/BerriAI/litellm/pull/38986)
- fix(proxy): allow unblocking customers via /customer/update by [@​cat0825](https://github.com/cat0825) in [#​34696](https://github.com/BerriAI/litellm/pull/34696)
- feat(openai): support workload identity federation (OIDC token exchange) by [@​mateo-berri](https://github.com/mateo-berri) in [#​38995](https://github.com/BerriAI/litellm/pull/38995)
- fix(otel): emit cache token counts on OTel v2 LLM spans by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38716](https://github.com/BerriAI/litellm/pull/38716)
- feat(proxy): add /v1/responses/input\_tokens token counting endpoint by [@​mateo-berri](https://github.com/mateo-berri) in [#​38997](https://github.com/BerriAI/litellm/pull/38997)
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38917](https://github.com/BerriAI/litellm/pull/38917)
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 in migrations image by [@​mateo-berri](https://github.com/mateo-berri) in [#​38973](https://github.com/BerriAI/litellm/pull/38973)
- feat(friendli): add zai-org/GLM-5.3-Flash model pricing by [@​Lee-Si-Yoon](https://github.com/Lee-Si-Yoon) in [#​38880](https://github.com/BerriAI/litellm/pull/38880)
- chore(techdebt): clear fresh debt from the 2026-08-29 and 2026-08-30 windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38884](https://github.com/BerriAI/litellm/pull/38884)
- fix(bedrock): surface Nova Sonic user transcripts, speech events, and usage in realtime API by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38597](https://github.com/BerriAI/litellm/pull/38597)
- fix(guardrails): carry Anthropic url image sources through to guardrails by [@​samtsai15](https://github.com/samtsai15) in [#​38940](https://github.com/BerriAI/litellm/pull/38940)
- feat(friendli): add zai-org/GLM-5.3 model pricing by [@​Lee-Si-Yoon](https://github.com/Lee-Si-Yoon) in [#​38881](https://github.com/BerriAI/litellm/pull/38881)
- fix(router): apply model renames to the in-memory deployment list by [@​yatishgoel](https://github.com/yatishgoel) in [#​38479](https://github.com/BerriAI/litellm/pull/38479)
- test(e2e): cover SCIM token creation and SCIM API auth in the Admin UI suite by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39027](https://github.com/BerriAI/litellm/pull/39027)
- feat(gigachat): add native API passthrough routes with spend logging by [@​mateo-berri](https://github.com/mateo-berri) in [#​38913](https://github.com/BerriAI/litellm/pull/38913)
- feat(gigachat): add passthrough gigachat route by [@​KnyazSh](https://github.com/KnyazSh) in [#​25886](https://github.com/BerriAI/litellm/pull/25886)
- feat(complexity-router): add classification\_mode to skip classifier on continuation turns by [@​tin-berri](https://github.com/tin-berri) in [#​38861](https://github.com/BerriAI/litellm/pull/38861)
- fix(proxy): preserve model table columns on master key rotation by [@​mateo-berri](https://github.com/mateo-berri) in [#​38878](https://github.com/BerriAI/litellm/pull/38878)
- fix(speech): stop forwarding response\_format as a chat param for Gemini TTS by [@​mateo-berri](https://github.com/mateo-berri) in [#​38819](https://github.com/BerriAI/litellm/pull/38819)
- fix(proxy): return 200 from /model/block and /model/unblock instead of 500 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38873](https://github.com/BerriAI/litellm/pull/38873)
- feat(complexity\_router): escalate oversized prompts to a tier that fits before dispatch by [@​tin-berri](https://github.com/tin-berri) in [#​38844](https://github.com/BerriAI/litellm/pull/38844)
- feat(shadow\_eval): target teams and users so JWT-auth traffic can be evaluated by [@​tin-berri](https://github.com/tin-berri) in [#​39015](https://github.com/BerriAI/litellm/pull/39015)
- fix(anthropic\_messages): drain upstream in a detached pump so client … by [@​nuernber](https://github.com/nuernber) in [#​36008](https://github.com/BerriAI/litellm/pull/36008)
- refactor(proxy): bound the budget window seed by time instead of request ids by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​38851](https://github.com/BerriAI/litellm/pull/38851)
- fix(proxy): ship psycopg so partitioned SpendLogs detection actually runs by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​38994](https://github.com/BerriAI/litellm/pull/38994)
- test(e2e): assert user-observable behavior instead of DOM structure by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39016](https://github.com/BerriAI/litellm/pull/39016)
- build(rust): configure native extension profiles by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39020](https://github.com/BerriAI/litellm/pull/39020)
- fix(ui): keep litellm\_credential\_name from LiteLLM Params JSON when no credential is selected by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39005](https://github.com/BerriAI/litellm/pull/39005)
- Revert "fix(ui): keep litellm\_credential\_name from LiteLLM Params JSON when no credential is selected" by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39046](https://github.com/BerriAI/litellm/pull/39046)
- fix(auth): quiet malformed virtual key rejections to stdout by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38838](https://github.com/BerriAI/litellm/pull/38838)
- fix(proxy): wire team-level logging callbacks into passthrough endpoints by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​38979](https://github.com/BerriAI/litellm/pull/38979)
- feat(complexity\_router): opt-in modality-based capability routing for image requests by [@​tin-berri](https://github.com/tin-berri) in [#​39032](https://github.com/BerriAI/litellm/pull/39032)
- fix(ui): let the auto-router scoring tier list follow the theme by [@​tin-berri](https://github.com/tin-berri) in [#​39040](https://github.com/BerriAI/litellm/pull/39040)
- feat(ui): auto-router controls for context-window escalation by [@​tin-berri](https://github.com/tin-berri) in [#​39054](https://github.com/BerriAI/litellm/pull/39054)
- fix(redis): coerce env var string types and fix param discovery through decorator wrappers by [@​koladefaj](https://github.com/koladefaj) in [#​30644](https://github.com/BerriAI/litellm/pull/30644)
- feat(key management): show budget window usage on /key/info by [@​Thijmen](https://github.com/Thijmen) in [#​37044](https://github.com/BerriAI/litellm/pull/37044)
- fix(websearch): reject invalid explicit search tool selections by [@​georgeatparallel](https://github.com/georgeatparallel) in [#​38113](https://github.com/BerriAI/litellm/pull/38113)
- feat(shadow\_eval): compare several auto-routers on one job's sampled traffic by [@​tin-berri](https://github.com/tin-berri) in [#​39028](https://github.com/BerriAI/litellm/pull/39028)
- fix(speech): honor pcm/wav response\_format for Gemini TTS and reject unsupported containers by [@​mateo-berri](https://github.com/mateo-berri) in [#​38868](https://github.com/BerriAI/litellm/pull/38868)
- fix(proxy): match /v1/audio/speech content-type to the returned audio format by [@​mateo-berri](https://github.com/mateo-berri) in [#​38798](https://github.com/BerriAI/litellm/pull/38798)
- test(e2e): drop the two mgmt registry cells no shared-proxy test can cover by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39055](https://github.com/BerriAI/litellm/pull/39055)
- feat(ui): one classification frequency picker for complexity auto-routers by [@​tin-berri](https://github.com/tin-berri) in [#​39042](https://github.com/BerriAI/litellm/pull/39042)
- test(e2e/ui): automate 8 manual QA checklist flows by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39025](https://github.com/BerriAI/litellm/pull/39025)
- fix(key\_management): allow non-admin key\_type preset transitions on /key/update by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39051](https://github.com/BerriAI/litellm/pull/39051)
- chore(typing): clear 1.1k basedpyright Any errors across 53 backend files by [@​mateo-berri](https://github.com/mateo-berri) in [#​38796](https://github.com/BerriAI/litellm/pull/38796)
- fix(openai): forward reasoning\_effort for unknown model aliases instead of failing closed by [@​mateo-berri](https://github.com/mateo-berri) in [#​39065](https://github.com/BerriAI/litellm/pull/39065)
- test(e2e-ui): poll credential availability before Test Connect to deflake multi-instance runs by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39073](https://github.com/BerriAI/litellm/pull/39073)
- feat(ui): modality routing toggle on the auto-router create and edit forms by [@​tin-berri](https://github.com/tin-berri) in [#​39059](https://github.com/BerriAI/litellm/pull/39059)
- fix(proxy): include litellm\_model\_table in GET /v2/team/list by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39045](https://github.com/BerriAI/litellm/pull/39045)
- fix(bedrock): mask signed request headers in guardrail debug log by [@​mateo-berri](https://github.com/mateo-berri) in [#​39044](https://github.com/BerriAI/litellm/pull/39044)
- fix(bedrock): forward aws\_external\_id in files and batches credential loading by [@​mateo-berri](https://github.com/mateo-berri) in [#​39066](https://github.com/BerriAI/litellm/pull/39066)
- fix(mcp): persist alias MCP grants verbatim instead of rewriting to local server ids by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39119](https://github.com/BerriAI/litellm/pull/39119)
- fix(responses): json-encode object tool call arguments in the chat completions bridge by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35417](https://github.com/BerriAI/litellm/pull/35417)
- fix(cost): bill OCR annotation pages via annotation\_cost\_per\_page by [@​mateo-berri](https://github.com/mateo-berri) in [#​38985](https://github.com/BerriAI/litellm/pull/38985)
- fix(policy\_engine): restore request guardrails list after pipeline allow by [@​mateo-berri](https://github.com/mateo-berri) in [#​39038](https://github.com/BerriAI/litellm/pull/39038)
- fix(embeddings): omit encoding\_format when the client omits it on OpenAI-compatible calls by [@​mateo-berri](https://github.com/mateo-berri) in [#​38774](https://github.com/BerriAI/litellm/pull/38774)
- test: deflake MCP registry state, savings cost map, and MCP identity env reload tests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38891](https://github.com/BerriAI/litellm/pull/38891)
- feat(helm): add Argo CD PreSync hook and rollout strategy knobs to the componentized chart by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39112](https://github.com/BerriAI/litellm/pull/39112)
- fix(registry): veo 3.1 pricing tiers + roll up open registry PRs (glm-5.2, Qwen3.8-Flash, gemma-4-31b, scribe\_v2, fireworks/databricks deepseek v4) + deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38990](https://github.com/BerriAI/litellm/pull/38990)
- test(ui): budget DOM-structure assertions in dashboard tests by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39082](https://github.com/BerriAI/litellm/pull/39082)
- test(ui): assert DataTable behavior instead of DOM structure by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39084](https://github.com/BerriAI/litellm/pull/39084)
- test(ui): query the screen instead of the render result by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39085](https://github.com/BerriAI/litellm/pull/39085)
- fix(ui): stop checkboxes stretching to the full width of a form field by [@​yatishgoel](https://github.com/yatishgoel) in [#​39108](https://github.com/BerriAI/litellm/pull/39108)
- chore: bump litellm-enterprise 0.1.62 -> 0.1.63, litellm-proxy-extras 0.4.91 -> 0.4.92, litellm 1.100.0 -> 1.101.0 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39140](https://github.com/BerriAI/litellm/pull/39140)
- revert: restore search tool fallback when no router is configured by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39146](https://github.com/BerriAI/litellm/pull/39146)
- test(websearch): register configured search tool in pre-request hook test by [@​mateo-berri](https://github.com/mateo-berri) in [#​39074](https://github.com/BerriAI/litellm/pull/39074)
- feat(proxy): default to the v2 migration resolver, keep v1 as an opt-out by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31125](https://github.com/BerriAI/litellm/pull/31125)
- build(deps): bump browserslist to 4.28.8 to clear osv-scan by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39142](https://github.com/BerriAI/litellm/pull/39142)
- fix(ui): render the skill detail page with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39130](https://github.com/BerriAI/litellm/pull/39130)
- feat: add Azure AI DeepSeek V4 Flash 0731 pricing by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39023](https://github.com/BerriAI/litellm/pull/39023)
- fix(streaming): keep response id stable across streamed chunks by [@​Timik232](https://github.com/Timik232) in [#​38106](https://github.com/BerriAI/litellm/pull/38106)
- test(e2e/ui): cover the Budgets page create, edit and delete flows by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39052](https://github.com/BerriAI/litellm/pull/39052)
- feat(dashscope): add QwenCloud and Qwen AI Platform provider aliases by [@​mateo-berri](https://github.com/mateo-berri) in [#​39149](https://github.com/BerriAI/litellm/pull/39149)
- fix(bedrock): forward native structured outputs on Invoke instead of silently inlining the schema by [@​tin-berri](https://github.com/tin-berri) in [#​39070](https://github.com/BerriAI/litellm/pull/39070)
- test(e2e/ui): cover creating, testing and deleting a guardrail by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39053](https://github.com/BerriAI/litellm/pull/39053)
- refactor(types): replace Any with precise types across 73 modules by [@​mateo-berri](https://github.com/mateo-berri) in [#​39104](https://github.com/BerriAI/litellm/pull/39104)
- feat(models): add Claude Fable 5.1 across Anthropic, Bedrock, Vertex AI, and Azure AI by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39148](https://github.com/BerriAI/litellm/pull/39148)
- feat(guardrails): add Alice guardrail by [@​seanyasno-af](https://github.com/seanyasno-af) in [#​38898](https://github.com/BerriAI/litellm/pull/38898)
- test(e2e/ui): cover the Logs page filter drawer by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39056](https://github.com/BerriAI/litellm/pull/39056)
- test(e2e/ui): stop the suite failing on things that are not regressions by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39063](https://github.com/BerriAI/litellm/pull/39063)
- test(e2e/ui): cover the team Settings tab by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39058](https://github.com/BerriAI/litellm/pull/39058)
- test(e2e/ui): cover the Usage page activity tabs by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39061](https://github.com/BerriAI/litellm/pull/39061)
- fix(ui): render the guardrail garden detail page with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39131](https://github.com/BerriAI/litellm/pull/39131)
- fix(responses): tool call id shape breaks gpt-5 -> claude fallback conversations by [@​mateo-berri](https://github.com/mateo-berri) in [#​39144](https://github.com/BerriAI/litellm/pull/39144)
- fix(openai): drop tool\_choice when request has no tools on chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​39147](https://github.com/BerriAI/litellm/pull/39147)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39141](https://github.com/BerriAI/litellm/pull/39141)
- test(ui): pick select options by role instead of by text by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39175](https://github.com/BerriAI/litellm/pull/39175)
- feat(cost): support time-based off-peak pricing in cost calculation by [@​Srivatsa03](https://github.com/Srivatsa03) in [#​31725](https://github.com/BerriAI/litellm/pull/31725)
- fix(openai): flatten top-level tool schema combinators on chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38839](https://github.com/BerriAI/litellm/pull/38839)
- fix(s3): bound s3 object keys and download filenames for long Responses API ids by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39164](https://github.com/BerriAI/litellm/pull/39164)
- revert: default the proxy back to the v1 migration resolver by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39178](https://github.com/BerriAI/litellm/pull/39178)
- fix(prometheus): bound requested\_model label cardinality on client failure paths by [@​mateo-berri](https://github.com/mateo-berri) in [#​39136](https://github.com/BerriAI/litellm/pull/39136)
- feat(ui): add search to the Agent Hub tab and admin agents table by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39155](https://github.com/BerriAI/litellm/pull/39155)
- fix(anthropic): fix response\_format for claude-fable-5-1 on Vertex AI and Bedrock by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39184](https://github.com/BerriAI/litellm/pull/39184)
- fix: keep litellm\_credential\_name from LiteLLM Params JSON and gate stored credential attach to proxy admins by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39047](https://github.com/BerriAI/litellm/pull/39047)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39186](https://github.com/BerriAI/litellm/pull/39186)
- test: exempt MockTransport request-shape embedding tests from VCR replay by [@​mateo-berri](https://github.com/mateo-berri) in [#​39185](https://github.com/BerriAI/litellm/pull/39185)
- fix(ui): render the logs Tools panel with theme tokens by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39129](https://github.com/BerriAI/litellm/pull/39129)
- fix(proxy): default max\_idle\_connection\_lifetime to 60s on DB URLs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39134](https://github.com/BerriAI/litellm/pull/39134)
- fix(mcp): follow tools/list pagination from upstream servers by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39172](https://github.com/BerriAI/litellm/pull/39172)
- fix(proxy): resolve router model aliases in /utils/supported\_openai\_params by [@​mateo-berri](https://github.com/mateo-berri) in [#​39000](https://github.com/BerriAI/litellm/pull/39000)
- fix(azure): flatten top-level tool schema combinators on Azure chat completions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38870](https://github.com/BerriAI/litellm/pull/38870)
- fix(bedrock): route streamed responses-API output through the unified guardrail by [@​mateo-berri](https://github.com/mateo-berri) in [#​38734](https://github.com/BerriAI/litellm/pull/38734)
- fix(ui): hide model write affordances from view-only admin sessions by [@​mateo-berri](https://github.com/mateo-berri) in [#​38872](https://github.com/BerriAI/litellm/pull/38872)
- fix(cli): quote the Claude Code apiKeyHelper for cmd.exe on Windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39174](https://github.com/BerriAI/litellm/pull/39174)
- fix(logging): guarantee max\_parallel\_requests slot release when streaming logging fails by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39093](https://github.com/BerriAI/litellm/pull/39093)
- feat(alerting): slack alerts for per-user daily/monthly spend thresholds and spend anomaly detection by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38438](https://github.com/BerriAI/litellm/pull/38438)
- fix(docker): add public Wolfi apk repo to runtime image by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39033](https://github.com/BerriAI/litellm/pull/39033)
- fix(router): keep order fallback on the requested order level by [@​emerzon](https://github.com/emerzon) in [#​38969](https://github.com/BerriAI/litellm/pull/38969)
- test(e2e): cover retry-on-timeout and the context-window fallback by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39197](https://github.com/BerriAI/litellm/pull/39197)
- fix(budget): reject known estimates over remaining budget under fail\_closed\_budget\_enforcement by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39214](https://github.com/BerriAI/litellm/pull/39214)
- fix: stop a cleared Team field from blocking personal key creation by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39206](https://github.com/BerriAI/litellm/pull/39206)
- test: record each e2e test's source location in the JUnit report by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39209](https://github.com/BerriAI/litellm/pull/39209)
- feat(router): fall back on anthropic safeguard refusals on /v1/messages by [@​tin-berri](https://github.com/tin-berri) in [#​39157](https://github.com/BerriAI/litellm/pull/39157)
- fix(proxy): report requested model on Anthropic streaming message\_start by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35816](https://github.com/BerriAI/litellm/pull/35816)
- fix(helm): reuse the generated master key Secret on helm upgrade by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39219](https://github.com/BerriAI/litellm/pull/39219)
- fix(mcp): report per-server outcomes in aggregate REST tools/list by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39232](https://github.com/BerriAI/litellm/pull/39232)
- fix(cost-map): retry transient boot fetch failures and recover config deployments dropped by a stale cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39230](https://github.com/BerriAI/litellm/pull/39230)
- perf(scim): resolve group members with one user table read per member by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39228](https://github.com/BerriAI/litellm/pull/39228)
- fix(docker): install bedrock-realtime extra in monolith proxy images by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39223](https://github.com/BerriAI/litellm/pull/39223)
- fix(aiohttp\_transport): map transport-internal CancelledError to a retryable ConnectError by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39240](https://github.com/BerriAI/litellm/pull/39240)
- fix(bedrock): gate Converse cachePoint emission on model prompt caching support by [@​tin-berri](https://github.com/tin-berri) in [#​39210](https://github.com/BerriAI/litellm/pull/39210)
- fix(datadog\_llm\_obs): send tool calls, tool results and cache tokens in DD's own fields by [@​tin-berri](https://github.com/tin-berri) in [#​39222](https://github.com/BerriAI/litellm/pull/39222)
- feat(prometheus): expose per-key and per-team rate limit allowed and used gauges by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39236](https://github.com/BerriAI/litellm/pull/39236)
- feat(scim): add placeholder listing and merge so a shadowed account can be healed by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39231](https://github.com/BerriAI/litellm/pull/39231)
- fix: normalize provider-specific cache token fields in OTel v2 usage by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39202](https://github.com/BerriAI/litellm/pull/39202)
- fix: stop deployment default API key limits leaking into provider requests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39211](https://github.com/BerriAI/litellm/pull/39211)
- fix(proxy): keep passthrough logging metadata and model\_info dicts when team callbacks are wired by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39216](https://github.com/BerriAI/litellm/pull/39216)
- fix(guardrails): deliver modify\_response block as valid SSE on streaming chat and Responses by [@​mateo-berri](https://github.com/mateo-berri) in [#​39036](https://github.com/BerriAI/litellm/pull/39036)
- fix(search): forward search-tool params through the router, complete Parallel AI v1 param mapping by [@​jliounis](https://github.com/jliounis) in [#​37883](https://github.com/BerriAI/litellm/pull/37883)
- fix(bedrock): stop Converse crashing on bearer-token auth without SigV4 credentials by [@​mateo-berri](https://github.com/mateo-berri) in [#​39166](https://github.com/BerriAI/litellm/pull/39166)
- fix(docker): install saml extra in litellm-backend image by [@​ojensen-berri](https://github.com/ojensen-berri) in [#​39291](https://github.com/BerriAI/litellm/pull/39291)
- fix(guardrails): run apply\_guardrail-only providers in logging\_only mode by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39297](https://github.com/BerriAI/litellm/pull/39297)
- feat(gemini): day-0 pricing for gemini-3.8-flash by [@​mateo-berri](https://github.com/mateo-berri) in [#​39340](https://github.com/BerriAI/litellm/pull/39340)
- fix(vertex): avoid duplicate DeepSeek OCR model namespace by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39194](https://github.com/BerriAI/litellm/pull/39194)
- feat(streaming): carry final response cost on streamed usage by default by [@​mateo-berri](https://github.com/mateo-berri) in [#​39069](https://github.com/BerriAI/litellm/pull/39069)
- fix(rerank): map provider errors with the resolved provider on sync and async paths by [@​mateo-berri](https://github.com/mateo-berri) in [#​39176](https://github.com/BerriAI/litellm/pull/39176)
- test(e2e): read JUnit properties off the real collected pytest Item by [@​mateo-berri](https://github.com/mateo-berri) in [#​39246](https://github.com/BerriAI/litellm/pull/39246)
- feat(proxy): configurable display\_name for the Anthropic-shaped /v1/models listing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39238](https://github.com/BerriAI/litellm/pull/39238)
- fix(helm): scale the classic chart's HPA out at the documented 60 percent CPU by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​35975](https://github.com/BerriAI/litellm/pull/35975)
- fix(gemini): return enabled thinking content by default by [@​mateo-berri](https://github.com/mateo-berri) in [#​39160](https://github.com/BerriAI/litellm/pull/39160)
- fix: run access group key sync UPDATEs on the writer, not the read replica by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39128](https://github.com/BerriAI/litellm/pull/39128)
- fix(models): registry audit 2026-09-01: openai realtime and long-context tiers, mistral aliases, voyage, xai, fireworks, together, scaleway, azure ai, govcloud, azure gov, cloudflare whisper, deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39170](https://github.com/BerriAI/litellm/pull/39170)
- fix: apply optional\_pre\_call\_checks and reject unsupported router settings on /config/update by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39249](https://github.com/BerriAI/litellm/pull/39249)
- fix(vector\_stores): s3 vectors search router bypass + rag query config drop + ui error swallow by [@​michelligabriele](https://github.com/michelligabriele) in [#​34788](https://github.com/BerriAI/litellm/pull/34788)
- fix(models): key Azure DeepSeek V4 Flash 0731 by its Foundry catalog id by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39341](https://github.com/BerriAI/litellm/pull/39341)
- fix(deps): raise the tornado and pypdf floors for six new advisories by [@​mateo-berri](https://github.com/mateo-berri) in [#​39188](https://github.com/BerriAI/litellm/pull/39188)
- fix(headroom): stop re-compressing retrieved CCR content in client tool loops by [@​QuantumBreakz](https://github.com/QuantumBreakz) in [#​38591](https://github.com/BerriAI/litellm/pull/38591)
- feat(agentcore-a2a): derive runtime session id from A2A message.contextId by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39371](https://github.com/BerriAI/litellm/pull/39371)
- fix(proxy): share per-model budget counters across replicas through the spend counter cache by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39375](https://github.com/BerriAI/litellm/pull/39375)
- fix(proxy-extras): give prisma migrate deploy its own timeout budget by [@​mateo-berri](https://github.com/mateo-berri) in [#​39365](https://github.com/BerriAI/litellm/pull/39365)
- fix(proxy): route container create and list through model\_list deployments by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39220](https://github.com/BerriAI/litellm/pull/39220)
- test(build): validate release wheel contracts by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39021](https://github.com/BerriAI/litellm/pull/39021)
- refactor(rust): extract domain-neutral Python interop by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39026](https://github.com/BerriAI/litellm/pull/39026)
- refactor(rust): standardize the core Error type by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39331](https://github.com/BerriAI/litellm/pull/39331)
- fix(ui): preserve full AgentCore runtime ARN in agent edit form by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39382](https://github.com/BerriAI/litellm/pull/39382)
- feat(ui): update OpenAI preset model tiers by [@​tin-berri](https://github.com/tin-berri) in [#​39396](https://github.com/BerriAI/litellm/pull/39396)
- fix(router): resolve realtime session model to routed deployment by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​36811](https://github.com/BerriAI/litellm/pull/36811)
- fix(security): restrict and validate file uploads at /v1/files and /upload/logo by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39379](https://github.com/BerriAI/litellm/pull/39379)
- feat(auth): enforce configurable password policy and SSO-only login by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39381](https://github.com/BerriAI/litellm/pull/39381)
- fix(agents): redact secret litellm\_params fields from all /v1/agents responses by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39389](https://github.com/BerriAI/litellm/pull/39389)
- fix(otel): stamp Langfuse root observation input and output from the request task by [@​mateo-berri](https://github.com/mateo-berri) in [#​39369](https://github.com/BerriAI/litellm/pull/39369)
- fix(guardrails): track and tear down presidio sibling callbacks on delete and update by [@​mateo-berri](https://github.com/mateo-berri) in [#​39271](https://github.com/BerriAI/litellm/pull/39271)
- fix(spend): keep every-deployment scope on gateway cache-injection marks by [@​mateo-berri](https://github.com/mateo-berri) in [#​39241](https://github.com/BerriAI/litellm/pull/39241)
- fix(proxy/db): keep prisma predicates from raising TypeError under a mocked prisma module by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39253](https://github.com/BerriAI/litellm/pull/39253)
- fix(proxy): word database 503s by whether the fault is transient by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39256](https://github.com/BerriAI/litellm/pull/39256)
- refactor(utils): remove the dead get\_api\_key provider-key resolver by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39260](https://github.com/BerriAI/litellm/pull/39260)
- feat(mcp): semantic tool search for the native MCP Gateway by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39404](https://github.com/BerriAI/litellm/pull/39404)
- fix(logging): redact credential query params from the uvicorn access log by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39293](https://github.com/BerriAI/litellm/pull/39293)
- feat(model\_prices): add meta/muse-spark-1.3 and its contributor tier by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39417](https://github.com/BerriAI/litellm/pull/39417)
- refactor(core): move audio transcription into core by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39126](https://github.com/BerriAI/litellm/pull/39126)
- fix(proxy): build coordination Redis from REDIS\_\* env vars unconditionally by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39410](https://github.com/BerriAI/litellm/pull/39410)
- test: add interactive Rust Python parity harness by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39419](https://github.com/BerriAI/litellm/pull/39419)
- test(proxy): verify NO\_DOCS/NO\_REDOC/NO\_OPENAPI restrict every doc surface by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39378](https://github.com/BerriAI/litellm/pull/39378)
- test(bedrock): accept the router kwarg in the knowledge base search fake by [@​mateo-berri](https://github.com/mateo-berri) in [#​39420](https://github.com/BerriAI/litellm/pull/39420)
- refactor(python-bridge): split routes and add shared function tracing by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39031](https://github.com/BerriAI/litellm/pull/39031)
- fix(python-bridge): harden sync and async execution boundaries by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39332](https://github.com/BerriAI/litellm/pull/39332)
- refactor(python-bridge): declare sync and async routes once by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39333](https://github.com/BerriAI/litellm/pull/39333)
- feat(python): unify Rust opt-in and bridge policy by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39334](https://github.com/BerriAI/litellm/pull/39334)
- feat(router): add heuristic v2 complexity routing by [@​tin-berri](https://github.com/tin-berri) in [#​39276](https://github.com/BerriAI/litellm/pull/39276)
- fix(anthropic): upgrade legacy thinking to adaptive on adaptive-only Claude models for chat, Bedrock Converse, Invoke, Vertex AI, and Databricks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39159](https://github.com/BerriAI/litellm/pull/39159)
- fix(proxy): mark session/SSO/SAML cookies Secure behind a TLS-terminating reverse proxy by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39391](https://github.com/BerriAI/litellm/pull/39391)
- fix(bedrock): honor BEDROCK\_MANTLE\_API\_BASE on bedrock/mantle messages and chat URLs by [@​mateo-berri](https://github.com/mateo-berri) in [#​39364](https://github.com/BerriAI/litellm/pull/39364)
- fix(bedrock): strip client\_metadata from converse additionalModelRequestFields by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35967](https://github.com/BerriAI/litellm/pull/35967)
- chore(techdebt): clear fresh debt from the 2026-08-31 and 2026-09-01 windows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39091](https://github.com/BerriAI/litellm/pull/39091)
- fix(mcp): cap tools preview and test-connection at the listing timeout and name the unreachable upstream by [@​mateo-berri](https://github.com/mateo-berri) in [#​38791](https://github.com/BerriAI/litellm/pull/38791)
- fix(hosted\_vllm): forward truncate\_prompt\_tokens on rerank requests by [@​mateo-berri](https://github.com/mateo-berri) in [#​39363](https://github.com/BerriAI/litellm/pull/39363)
- fix(messages): drop cache\_control ttl on non-Anthropic /v1/messages passthrough by [@​mateo-berri](https://github.com/mateo-berri) in [#​39355](https://github.com/BerriAI/litellm/pull/39355)
- fix(bedrock\_mantle): carry per-request AWS credentials into chat completions SigV4 signing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39362](https://github.com/BerriAI/litellm/pull/39362)
- feat(router): add a hybrid classifier that defers near tier boundaries by [@​tin-berri](https://github.com/tin-berri) in [#​39403](https://github.com/BerriAI/litellm/pull/39403)
- fix: recover the v2 migration resolver from concurrent migrate deploy deadlocks by [@​mateo-berri](https://github.com/mateo-berri) in [#​39187](https://github.com/BerriAI/litellm/pull/39187)
- fix(ollama\_chat): stamp finish\_reason tool\_calls when tool calls streamed before the done chunk by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39010](https://github.com/BerriAI/litellm/pull/39010)
- fix(router): route Claude Code subagents through session router by [@​moe-berri](https://github.com/moe-berri) in [#​39239](https://github.com/BerriAI/litellm/pull/39239)
- fix(responses): keep namespace tools intact when a guardrail returns them unchanged by [@​mateo-berri](https://github.com/mateo-berri) in [#​39366](https://github.com/BerriAI/litellm/pull/39366)
- fix(vector-store): resolve embedding credentials per request by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​38936](https://github.com/BerriAI/litellm/pull/38936)
- test(e2e/ui): give the seeded users passwords that pass the default password policy by [@​mateo-berri](https://github.com/mateo-berri) in [#​39442](https://github.com/BerriAI/litellm/pull/39442)
- fix(http\_handler): honor HTTP(S)\_PROXY / NO\_PROXY when force\_ipv4 uses the httpx transport by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39443](https://github.com/BerriAI/litellm/pull/39443)
- fix(proxy): stop leaking internal exception details to clients by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​39380](https://github.com/BerriAI/litellm/pull/39380)
- fix(guardrails): forward mode and streaming params to crowdstrike\_aidr handler by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39317](https://github.com/BerriAI/litellm/pull/39317)
- fix(mcp): gate the connect-time OBO pre-flight on the key's allowed servers by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39447](https://github.com/BerriAI/litellm/pull/39447)
- fix(responses): keep provider response headers in streaming logging callbacks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38131](https://github.com/BerriAI/litellm/pull/38131)
- fix(mcp): fence an outbound-token write against an overlapping invalidation by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​35398](https://github.com/BerriAI/litellm/pull/35398)
- feat(cli): pre-fill the SSO verification code in the browser when the proxy allows it by [@​mateo-berri](https://github.com/mateo-berri) in [#​39428](https://github.com/BerriAI/litellm/pull/39428)
- fix(ui): paginate request logs by session groups server-side by [@​tin-berri](https://github.com/tin-berri) in [#​39257](https://github.com/BerriAI/litellm/pull/39257)
- feat(proxy): serve the auto-router preset catalog at runtime by [@​tin-berri](https://github.com/tin-berri) in [#​39412](https://github.com/BerriAI/litellm/pull/39412)
- docs: define Rust Python harness structure by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39456](https://github.com/BerriAI/litellm/pull/39456)
- fix(guardrails): apply PUT /guardrails/{id} to the serving worker immediately and reject invalid configs with 422 by [@​mateo-berri](https://github.com/mateo-berri) in [#​38877](https://github.com/BerriAI/litellm/pull/38877)
- test(responses): expect the 404 OpenAI now returns for an unknown model by [@​mateo-berri](https://github.com/mateo-berri) in [#​39457](https://github.com/BerriAI/litellm/pull/39457)
- fix(guardrails): skip streaming guardrail rounds that re-scan cleared output by [@​mateo-berri](https://github.com/mateo-berri) in [#​39386](https://github.com/BerriAI/litellm/pull/39386)
- fix: keep litellm importable on Python 3.10 and guard 3.11-only typing imports in CI by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39448](https://github.com/BerriAI/litellm/pull/39448)
- fix(proxy): keep SpendLogs and callback session ids in sync when the request has none by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39450](https://github.com/BerriAI/litellm/pull/39450)
- feat(router): arm safeguard-refusal fallback on generic chains when no content-policy list exists by [@​tin-berri](https://github.com/tin-berri) in [#​39274](https://github.com/BerriAI/litellm/pull/39274)
- feat(azure): support credential chain for storage by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39229](https://github.com/BerriAI/litellm/pull/39229)
- chore(crowdstrike): expect the deduped end-of-stream scan in crowdstrike cadence test by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39467](https://github.com/BerriAI/litellm/pull/39467)
- fix(model\_armor): handle Anthropic Messages and Responses streams in post\_call by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39181](https://github.com/BerriAI/litellm/pull/39181)
- test: add OCR python-to-rust test parity ledger (WIP) by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39434](https://github.com/BerriAI/litellm/pull/39434)
- feat(complexity\_router): opt-in modality override of a kept session-affinity pin by [@​tin-berri](https://github.com/tin-berri) in [#​39454](https://github.com/BerriAI/litellm/pull/39454)
- feat(datadog\_llm\_obs): cost tag dimensions, router decision fields, reasoning token metric, redaction gating by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39402](https://github.com/BerriAI/litellm/pull/39402)
- test(rust-python-harness): wire existing e2e SDK tests into the matrix by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39463](https://github.com/BerriAI/litellm/pull/39463)
- fix(mcp): never exchange the LiteLLM virtual key as the upstream subject token by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39446](https://github.com/BerriAI/litellm/pull/39446)
- test: add mistral ocr transformation parity coverage by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​39482](https://github.com/BerriAI/litellm/pull/39482)
- test(vector-store): accept embedding\_executor in the Bedrock KB hook fake handler by [@​mateo-berri](https://github.com/mateo-berri) in [#​39472](https://github.com/BerriAI/litellm/pull/39472)
- refactor(s3\_vectors): embed search queries through the shared vector store executor by [@​mateo-berri](https://github.com/mateo-berri) in [#​39474](https://github.com/BerriAI/litellm/pull/39474)
- fix(xai): bill from the cost xAI reports instead of recomputing it (internal copy of [#​36281](https://github.com/BerriAI/litellm/issues/36281)) by [@​mateo-berri](https://github.com/mateo-berri) in [#​39441](https://github.com/BerriAI/litellm/pull/39441)
- feat(ui): add 1M context auto-router preset by [@​tin-berri](https://github.com/tin-berri) in [#​39490](https://github.com/BerriAI/litellm/pull/39490)
- fix(ui): stop the create team form resetting organization and models by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39476](https://github.com/BerriAI/litellm/pull/39476)
- fix(ui): read the preset catalog at runtime in the dashboard tests by [@​tin-berri](https://github.com/tin-berri) in [#​39478](https://github.com/BerriAI/litellm/pull/39478)
- fix(sso): resolve multi-valued role claims to the highest privilege role by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39480](https://github.com/BerriAI/litellm/pull/39480)
- fix(guardrail): hide-secrets playground redaction and guardrail telemetry by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​39398](https://github.com/BerriAI/litellm/pull/39398)
- fix(test): drop the duplicate embedding\_executor arg in the Bedrock KB fake handler by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39502](https://github.com/BerriAI/litellm/pull/39502)
- fix(ui): keep Virtual Keys list state in the URL so it survives leaving the page by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39481](https://github.com/BerriAI/litellm/pull/39481)
- fix(proxy): 404 a credential delete that matched nothing, and raise instead of return by [@​eeshsaxena](https://github.com/eeshsaxena) in [#​36260](https://github.com/BerriAI/litellm/pull/36260)
- fix(proxy-extras): only spend a migrate-deploy attempt when a pass made no progress by [@​mateo-berri](https://github.com/mateo-berri) in [#​39506](https://github.com/BerriAI/litellm/pull/39506)
- feat(cli): enable Claude Code gateway model discovery by default in lite claude by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39445](https://github.com/BerriAI/litellm/pull/39445)
- fix(docker): bump nginx runtime to 1.31.5-alpine3.24 and pin digest by [@​rakeshrepository](https://github.com/rakeshrepository) in [#​39561](https://github.com/BerriAI/litellm/pull/39561)
- fix: 1.99.0-rc2 UI bug batch (empty org on key create, session pagination, access group rename/delete) by [@​mateo-berri](https://github.com/mateo-berri) in [#​39436](https://github.com/BerriAI/litellm/pull/39436)
- feat(auto-router): support classifier reasoning effort by [@​moe-berri](https://github.com/moe-berri) in [#​39372](https://github.com/BerriAI/litellm/pull/39372)
- fix(ui): replace the key detail URL entry when a virtual key is rotated by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39471](https://github.com/BerriAI/litellm/pull/39471)
- test(timeout): time out against the local fake endpoint instead of api.openai.com by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39583](https://github.com/BerriAI/litellm/pull/39583)
- test(harness): add OCR parity with migration strategy runners by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​38765](https://github.com/BerriAI/litellm/pull/38765)
- fix(databricks): strip thinking\_blocks and reasoning\_content from outbound messages by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39409](https://github.com/BerriAI/litellm/pull/39409)
- test(ocr): record provider fixtures in the migration harness by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39425](https://github.com/BerriAI/litellm/pull/39425)
- feat(ui): keyset-paginate request logs by session trace by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​38794](https://github.com/BerriAI/litellm/pull/38794)
- fix(proxy/db): translate libpq sslrootcert and verify-\* into Prisma's strict TLS params by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39563](https://github.com/BerriAI/litellm/pull/39563)
- fix(agents): keep the published agent in public\_agent\_groups by [@​mateo-berri](https://github.com/mateo-berri) in [#​39554](https://github.com/BerriAI/litellm/pull/39554)
- fix(mcp): scope allow-all servers to virtual keys by [@​tin-berri](https://github.com/tin-berri) in [#​39531](https://github.com/BerriAI/litellm/pull/39531)
- fix(team): generate team IDs for blank input by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​39571](https://github.com/BerriAI/litellm/pull/39571)
- fix(bedrock\_mantle): stop dropping the web\_search tool on /v1/responses by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​35987](https://github.com/BerriAI/litellm/pull/35987)
- chore: bump litellm-enterprise 0.1.63 -> 0.1.64, litellm-proxy-extras 0.4.92 -> 0.4.93 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39595](https://github.com/BerriAI/litellm/pull/39595)
- fix(images): forward gpt-image supported params like background to OpenAI and Azure by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39525](https://github.com/BerriAI/litellm/pull/39525)
- fix(proxy): return persisted team memberships from /user/new so first CLI login gets the default team by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39545](https://github.com/BerriAI/litellm/pull/39545)
- fix(spend\_tracking): add missing\_session\_id: omit to leave SpendLogs.session\_id null without a client session by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39458](https://github.com/BerriAI/litellm/pull/39458)
- fix: stop a cleared Organization field from failing key creation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39316](https://github.com/BerriAI/litellm/pull/39316)
- fix(ui): show MCP servers and agents inherited from access groups on team overview by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39215](https://github.com/BerriAI/litellm/pull/39215)
- fix(proxy): expose configured mode for auto-router models by [@​moe-berri](https://github.com/moe-berri) in [#​39619](https://github.com/BerriAI/litellm/pull/39619)
- fix(ui): aggregate session token usage in the logs table by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39598](https://github.com/BerriAI/litellm/pull/39598)
- fix(cost): apply off\_peak\_pricing in the dashscope cost calculator by [@​mateo-berri](https://github.com/mateo-berri) in [#​39592](https://github.com/BerriAI/litellm/pull/39592)
- test(bedrock): drop EOL cohere.command-r-plus-v1:0 from local\_testing by [@​mateo-berri](https://github.com/mateo-berri) in [#​39608](https://github.com/BerriAI/litellm/pull/39608)
- fix(openai): default stream usage on PrivateLink and regional api.openai.com hosts by [@​mateo-berri](https://github.com/mateo-berri) in [#​39614](https://github.com/BerriAI/litellm/pull/39614)
- fix(proxy): drop anthropic-beta on the Vertex passthrough count-tokens route by [@​mateo-berri](https://github.com/mateo-berri) in [#​39597](https://github.com/BerriAI/litellm/pull/39597)
- fix(headroom): resolve CCR retrieval on streaming /v1/responses by [@​mateo-berri](https://github.com/mateo-berri) in [#​38808](https://github.com/BerriAI/litellm/pull/38808)
- fix(openai): bridge gpt-5.4+ tool calls to /v1/responses on every api.openai.com host by [@​mateo-berri](https://github.com/mateo-berri) in [#​39587](https://github.com/BerriAI/litellm/pull/39587)
- fix(router): pin JWT-authenticated callers by user id in deployment\_affinity by [@​mateo-berri](https://github.com/mateo-berri) in [#​39594](https://github.com/BerriAI/litellm/pull/39594)
- fix(cost): bill bedrock\_mantle web search at $12 per 1k queries using Bedrock's reported count by [@​mateo-berri](https://github.com/mateo-berri) in [#​39610](https://github.com/BerriAI/litellm/pull/39610)
- fix(azure\_ai): don't reclassify Foundry deployments as azure provider by [@​mateo-berri](https://github.com/mateo-berri) in [#​38975](https://github.com/BerriAI/litellm/pull/38975)
- fix(vector\_stores): only list vector stores the caller was granted by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39612](https://github.com/BerriAI/litellm/pull/39612)
- feat(models): add gpt-6-astra pricing and metadata by [@​mateo-berri](https://github.com/mateo-berri) in [#​39622](https://github.com/BerriAI/litellm/pull/39622)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39593](https://github.com/BerriAI/litellm/pull/39593)
- feat(router): limit heuristic\_v2 auto-routers to one without the auto\_router license feature by [@​tin-berri](https://github.com/tin-berri) in [#​39468](https://github.com/BerriAI/litellm/pull/39468)
- fix(ui): clear agents when updating team permissions by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39600](https://github.com/BerriAI/litellm/pull/39600)
- fix(auto\_router): bill the routing embedding to the caller's key and team by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39532](https://github.com/BerriAI/litellm/pull/39532)
- test(router): cover get\_configured\_mode so router\_code\_coverage passes by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​39630](https://github.com/BerriAI/litellm/pull/39630)
- fix: treat gpt-6 names as the gpt-5 request family in OpenAI and Azure configs by [@​mateo-berri](https://github.com/mateo-berri) in [#​39631](https://github.com/BerriAI/litellm/pull/39631)
- fix(prompts): key the in-memory prompt registry by environment by [@​mateo-berri](https://github.com/mateo-berri) in [#​38440](https://github.com/BerriAI/litellm/pull/38440)
- fix(ui): let the Internal Users search box match user\_id as well as email by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​39604](https://github.com/BerriAI/litellm/pull/39604)
- test(responses): bound the background stream cancel e2e so an upstream stall skips fast by [@​mateo-berri](https://github.com/mateo-berri) in [#​39617](https://github.com/BerriAI/litellm/pull/39617)
- fix(vertex): add the API version to versionless project routes on the Vertex passthrough by [@​mateo-berri](https://github.com/mateo-berri) in [#​39625](https://github.com/BerriAI/litellm/pull/39625)
- chore(ci): promote internal staging to main by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​39648](https://github.com/BerriAI/litellm/pull/39648)
- fix(spend\_tracking): key /v1/messages spend rows on the msg\_ id the client received by [@​mateo-berri](https://github.com/mateo-berri) in [#​39511](https://github.com/BerriAI/litellm/pull/39511)
- ci(rust): build and test the ai-gateway server feature by [@​mateo-berri](https://github.com/mateo-berri) in [#​39493](https://github.com/BerriAI/litellm/pull/39493)
- ci(ui): run the UI build check through the image's ui-builder stage by [@​mateo-berri](https://github.com/mateo-berri) in [#​39496](https://github.com/BerriAI/litellm/pull/39496)
- fix(proxy): parse numeric multipart fields on /v1/images/edits back into numbers by [@​mateo-berri](https://github.com/mateo-berri) in [#​39510](https://github.com/BerriAI/litellm/pull/39510)
- fix(guardrails): remove the module-global translation mapping that leaked between tests by [@​mateo-berri](https://github.com/mateo-berri) in [#​39543](https://github.com/BerriAI/litellm/pull/39543)
- feat(azure\_ai): add grok-4.6 to the model cost map by [@​mateo-berri](https://github.com/mateo-berri) in [#​39426](https://github.com/BerriAI/litellm/pull/39426)
- fix: attach vector store search\_results when a guardrail is registered by [@​mateo-berri](https://github.com/mateo-berri) in [#​38984](https://github.com/BerriAI/litellm/pull/38984)
- fix(proxy): stop putting the literal string "None" in error payloads by [@​mateo-berri](https://github.com/mateo-berri) in [#​39521](https://github.com/BerriAI/litellm/pull/39521)
- fix(router): keep retry breadcrumbs per request and out of the request snapshot by [@​mateo-berri](https://github.com/mateo-berri) in [#​39491](https://github.com/BerriAI/litellm/pull/39491)
- fix(vector-stores): survive a failing vector store search in the chat completions hook by [@​mateo-berri](https://github.com/mateo-berri) in [#​39495](https://github.com/BerriAI/litellm/pull/39495)
- fix(utils): redact credential kwargs from the set\_verbose request line by [@​mateo-berri](https://github.com/mateo-berri) in [#​39526](https://github.com/BerriAI/litellm/pull/39526)
- fix(bedrock): skip the SigV4 credential chain when a bearer token is configured by [@​mateo-berri](https://github.com/mateo-berri) in [#​39411](https://github.com/BerriAI/litellm/pull/39411)
- fix(proxy-extras): kill the whole Prisma process group when a command times out by [@​mateo-berri](https://github.com/mateo-berri) in [#​39466](https://github.com/BerriAI/litellm/pull/39466)
- fix(rag): forward the managed vector store's params to the search call by [@​mateo-berri](https://github.c…
TLDR
Problem this solves:
GET /v2/team/listalways returnslitellm_model_table: nullfor active teamsmodel_aliasescan never be read back from this endpointHow it solves it:
include={"litellm_model_table": True}to the active-teamfind_manyquery inlist_team_v2find_manyalone:LiteLLM_DeletedTeamTablehas no such relation in the schema, so this include would raise a database error thereUser Flow
Before: an operator listing teams through the API never sees a team's configured model aliases, even though they are stored and routing correctly
model_aliaseson a team, e.g. viaPOST /team/updatewith{"team_id": "<id>", "model_aliases": {"my-fast-model": "gpt-4o"}}GET /v2/team/list?team_id=<id>"litellm_model_table": null, even though the alias exists and routes correctlyAfter: the same list call reflects the real state
model_aliaseson a team the same wayGET /v2/team/list?team_id=<id>"litellm_model_table": {"id": ..., "model_aliases": {"my-fast-model": "gpt-4o"}, ...}, matching whatGET /team/infoandGET /team/listalready returned correctlyRelevant issues
Related to #26312 (litellm_model_table read back as null). That issue was about
/team/info, and was fixed there and on/team/listby #33047; this PR closes the same gap on/v2/team/list, which #33047 didn't touch.Linear ticket
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
uv run pytest tests/test_litellm/<your_test_file>.py -v. Leave the suites (make test-unit-*,make test-unit) to CI: it finishes in ~15 minutes where a laptop takes an hour or more@greptileaito re-request a review after pushing changes)Delays in PR merge?
If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).
Screenshots / Proof of Fix
Ran the proxy locally against a real Postgres (
python litellm/proxy/proxy_cli.py --config <config> --use_v2_migration_resolver).Before (68cfe16)
curl -X POST http://127.0.0.1:14099/team/new -H "Authorization: Bearer sk-1234" -H "Content-Type: application/json" -d '{"team_alias": "v2team-repro-before", "models": ["fake-model"], "model_aliases": {"my-fast-model": "fake-model"}}'->team_id=4572ff65-5c2a-4dd9-bf1e-57dfd3faa933curl "http://127.0.0.1:14099/v2/team/list?team_id=4572ff65-5c2a-4dd9-bf1e-57dfd3faa933" -H "Authorization: Bearer sk-1234"returns:{"team_alias":"v2team-repro-before","team_id":"4572ff65-5c2a-4dd9-bf1e-57dfd3faa933","model_id":1,"litellm_model_table":null, ...}model_aliasesis unreadable from this endpoint even though it was just setAfter (aab515d)
curl -X POST http://127.0.0.1:14199/team/new -H "Authorization: Bearer sk-1234" -H "Content-Type: application/json" -d '{"team_alias": "v2team-final-active", "models": ["fake-model"], "model_aliases": {"my-fast-model": "fake-model"}}'->team_id=1c109696-4d2c-4903-9527-3c58cae33eedcurl "http://127.0.0.1:14199/v2/team/list?team_id=1c109696-4d2c-4903-9527-3c58cae33eed" -H "Authorization: Bearer sk-1234"returnslitellm_model_tablepopulated:{"id": 1, "model_aliases": {"my-fast-model": "fake-model"}, "created_by": "default_user_id", ...}curl -X POST http://127.0.0.1:14199/team/delete -d '{"team_ids": ["1c109696-4d2c-4903-9527-3c58cae33eed"]}'thencurl "http://127.0.0.1:14199/v2/team/list?status=deleted"->HTTP 200with the deleted team listed, confirming the deleted-team branch (which never gets the include) still worksType
🐛 Bug Fix
Caveats (if any)
Low
/v2/team/list. Deleted teams still can't showmodel_aliasesfrom this endpoint (LiteLLM_DeletedTeamTablehas no relation to join), same as before this PR;/team/infoand/team/list(non-deleted) were already fixed by fix: show and allow editing team model aliases after team creation #33047Final Attestation