v1.97.0-rc.1Pre-release
Added 3
- Add apply_user_budget_to_team_keys opt-in in proxy
- Show user email or alias in usage data export in ui
- Track turns per complexity tier in auto-router
Fixed 16
- Pass SSE-KMS key through to the batch input-file S3 upload in bedrock
- Stop indexing choices[0] on choiceless streaming chunks in anthropic adapter
- Normalize /v1/completions and /v1/responses batch records in bedrock
- Return the real status code when a credential update is rejected in proxy
- Improve Headroom /v1/compress HTTP 404 diagnostics in proxy
- Invalidate cached project object on project update and delete in proxy
- Stop alerting on health probes that lose the planned engine-restart race in proxy
- Stop pooled clients persisting cookies on the aiohttp jar in http
- Bound fallback-walk work and error-log volume in router
- Add AZURE_SENTINEL_AUTHORITY_HOST as a Sentinel scoped override in azure_sentinel
- Derive config agent ids from agent_name so grants survive secret rotation in proxy
- Deny agent access when key and team grants resolve to nothing in proxy
- Align agent list annotation and test with the tuple return type in a2a
- Restore snippet text in native web_search_tool_result blocks in websearch
- Resolve entity access groups in the model listing endpoints in proxy
- Let access groups be a team's only model source with hover provenance in ui
Security 1
- Respect AZURE_AUTHORITY_HOST and derive the Azure Monitor audience per cloud in azure_sentinel
Verify Docker Image Signature
All LiteLLM Docker images are signed with cosign. Every release is signed with the same key introduced in commit 0112e53.
Verify using the pinned commit hash (recommended):
A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
ghcr.io/berriai/litellm:v1.97.0-rc.1
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:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.97.0-rc.1/cosign.pub \
ghcr.io/berriai/litellm:v1.97.0-rc.1
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(azure_sentinel): respect AZURE_AUTHORITY_HOST and derive the Azure Monitor audience per cloud by @yucheng-berri in https://github.com/BerriAI/litellm/pull/36137
- fix(bedrock): pass SSE-KMS key through to the batch input-file S3 upload by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35148
- fix(anthropic adapter): stop indexing choices[0] on choiceless streaming chunks by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35314
- fix(bedrock): normalize /v1/completions and /v1/responses batch records by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35675
- fix(proxy): return the real status code when a credential update is rejected by @yucheng-berri in https://github.com/BerriAI/litellm/pull/36166
- fix(proxy): improve Headroom /v1/compress HTTP 404 diagnostics by @aayush598 in https://github.com/BerriAI/litellm/pull/35952
- fix(proxy): invalidate cached project object on project update and delete by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36028
- feat(proxy): add apply_user_budget_to_team_keys opt-in by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36102
- fix(proxy): stop alerting on health probes that lose the planned engine-restart race by @yassin-berriai in https://github.com/BerriAI/litellm/pull/36141
- test(docker): gate the componentized gateway and backend images on an arbitrary-uid offline boot by @yassin-berriai in https://github.com/BerriAI/litellm/pull/36136
- fix(http): stop pooled clients persisting cookies on the aiohttp jar too by @yassin-berriai in https://github.com/BerriAI/litellm/pull/36149
- fix(router): bound fallback-walk work and error-log volume by @yassin-berriai in https://github.com/BerriAI/litellm/pull/36148
- ci: wire credential_endpoints tests into the proxy endpoints job by @cursor[bot] in https://github.com/BerriAI/litellm/pull/36187
- docs(keys): document /key/info fields and clarify budget_reset_at is the next reset by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36127
- fix(azure_sentinel): add AZURE_SENTINEL_AUTHORITY_HOST as a Sentinel scoped override by @yucheng-berri in https://github.com/BerriAI/litellm/pull/36165
- docs(pr-template): add a User Flow section with authoring instructions by @mateo-berri in https://github.com/BerriAI/litellm/pull/36162
- fix(proxy): derive config agent ids from agent_name so grants survive secret rotation by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36020
- chore(ui): regenerate schema.d.ts for the /key/info docstring update by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36210
- build(deps): bump gitpython to 3.1.58 to clear osv-scan on staging by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36212
- fix(proxy): deny agent access when key and team grants resolve to nothing by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36221
- build(deps): defer the second pypdf advisory until the 6.15.0 bump by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36218
- fix(a2a): align agent list annotation and test with the tuple return type by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36217
- ci: always run the UI API types sync check so it can be required by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36213
- build(deps): bump nanoid to 3.3.17 in the dashboard lockfile by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36227
- feat(ui): show user email or alias in usage data export by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36232
- feat(auto-router): track turns per complexity tier (LIT-5302) by @tin-berri in https://github.com/BerriAI/litellm/pull/36209
- fix(websearch): restore snippet text in native web_search_tool_result blocks (LIT-5315) by @tin-berri in https://github.com/BerriAI/litellm/pull/36228
- fix(proxy): resolve entity access groups in the model listing endpoints by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36230
- fix(ui): let access groups be a team's only model source, with hover provenance by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36234
- fix(managed_files): return unified output file ids from GET /batches by @mateo-berri in https://github.com/BerriAI/litellm/pull/36049
- test(proxy): compare empty agent list to the tuple get_agent_list returns by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36225
- fix(otel): name the RPC system and upstream on MCP tool-call spans by @yucheng-berri in https://github.com/BerriAI/litellm/pull/35857
- fix(guardrails): chunk oversized Bedrock ApplyGuardrail requests instead of failing by @yucheng-berri in https://github.com/BerriAI/litellm/pull/36119
- test(e2e): settle control-plane writes across every replica, not just one by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36247
- fix(responses): forward allowed_openai_params through the chat completions bridge by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35885
- test(proxy): assert the copy _add_team_member_budget_table returns by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36244
- chore(ui): regenerate dashboard api types for tier_turns by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36243
- refactor(types): declare mirrored pricing fields on ModelInfo by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36215
- fix(lint): make strict-gate noqas survive base ruff and flag stale ones by @mateo-berri in https://github.com/BerriAI/litellm/pull/36257
- fix(vertex_ai): surface real error/status on vertex batch create instead of IndexError 500 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35141
- ci: give the remaining pull_request workflows a concurrency group by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36252
- refactor(lint): graduate zero-violation strict rules and guard the budget ratchet by @mateo-berri in https://github.com/BerriAI/litellm/pull/36161
- fix(proxy): enforce require_managed_files on every route that accepts a raw provider id by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35551
- chore(typing): clear 1.4k basedpyright Any errors across 21 hotspot files by @mateo-berri in https://github.com/BerriAI/litellm/pull/36282
- test: roll back live router replay membership between tests by @mateo-berri in https://github.com/BerriAI/litellm/pull/36278
- chore(ci): sync main into internal staging by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36288
- build(lint): rename make pre-commit to make check with a working-tree fallback by @mateo-berri in https://github.com/BerriAI/litellm/pull/36277
- fix(ui): show team BYOK models in team fallback settings by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36241
- fix(otel): mark v2 server spans as failed for pre-call errors by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34546
- fix(websearch_interception): bill intercepted searches to the calling key by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35708
- chore: remove pre-commit rule by @mateo-berri in https://github.com/BerriAI/litellm/pull/36295
- docs: clarify guideline priority ordering in CLAUDE.md by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36296
- feat(router): independent, default-on deployment affinity for the auto-router by @tin-berri in https://github.com/BerriAI/litellm/pull/36146
- test: repair stale CircleCI contracts by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36293
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36286
- chore: rebuild Admin UI bundle for the 2026-08-08 release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36297
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36304
New Contributors
- @aayush598 made their first contribution in https://github.com/BerriAI/litellm/pull/35952
- @cursor[bot] made their first contribution in https://github.com/BerriAI/litellm/pull/36187
Full Changelog: https://github.com/BerriAI/litellm/compare/v1.97.0-dev.2...v1.97.0-rc.1