v1.95.0
BerriAI/litellmv1.95.0Aug 3, 2026by yuneng-berri
AI Summary
A major feature release introducing Rust backend enhancements (Anthropic /messages routing, OpenAI Responses API), a new Cost Optimization UI page, and new guardrails (Compresr, Straiker). Adds Claude Opus 5 and Gemini 3.6/3.5 pricing.
Key Highlights
- Rust backend enhancements: Anthropic /messages routing, OpenAI Responses API (WebSockets), Bedrock audio transcription
- UI overhaul: Migration to shadcn components, new Cost Optimization page (beta), react-hook-form integration
- New Guardrails: Compresr (context compression), Straiker, Deepkeep
- New Models: Claude Opus 5, Gemini 3.6/3.5 Flash pricing
- Budgeting: Configurable budget reset time, prompt compression tracking
New Features
- Route native Anthropic /messages through Rust
- Port OpenAI Responses API WebSockets to litellm-rust
- Track prompt compression saved tokens in daily spend aggregates
- Expose Anthropic Messages route on the axum gateway
- Port BaseAWSLLM auth (credential resolution + SigV4) to litellm-core
- Add Cost Optimization page with spend-by-tool and cache leakage views
- Add Claude Opus 5 support
- Add configurable budget_reset_time of day
- Add Straiker guardrail integration
- Add Compresr guardrail for query-aware context compression
Full Release Notes
## 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.95.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.95.0/cosign.pub \
ghcr.io/berriai/litellm:v1.95.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
* feat(spend): track prompt compression saved tokens in daily spend aggregates by @tin-berri in https://github.com/BerriAI/litellm/pull/33810
* test(e2e): assert the long budget window keeps blocking after the short window resets by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33832
* feat(messages): route native Anthropic /messages through Rust behind LITELLM_RUST env var by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33848
* test(e2e): cover credential-backed /v1/messages request by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33863
* feat(rust): expose Anthropic Messages route (POST /v1/messages) on the axum gateway by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33880
* feat(rust): 1:1 port of OpenAI Responses API WebSockets to litellm-rust by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33849
* fix(proxy): treat malformed cost-map token limits as absent on /v1/models by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33903
* feat(rust): port BaseAWSLLM auth (credential resolution + SigV4) to litellm-core as a base provider by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33888
* feat(complexity-router): add return_raw_model_name toggle for response model field by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33875
* feat(mcp): always-on aggregate gateway DCR discovery front door by @tin-berri in https://github.com/BerriAI/litellm/pull/33174
* fix(langfuse): send v4 ingestion header for otel callback by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33907
* feat(ui): add configuration tabs to the Cost Optimization page by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33899
* test(e2e): guard destructive spend-log truncate behind an explicit opt-in by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33751
* chore(rust): migrate the litellm-rust workspace (core, ai-gateway, python-bridge) from Rust edition 2021 to edition 2024 by @vineetpuranik in https://github.com/BerriAI/litellm/pull/33940
* fix(fireworks_ai): restore Content-Type application/json header (fixes 415) by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33929
* feat(spend): raise /spend/logs/v2 page_size cap to 1000 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33994
* feat(mcp): identity-only session tokens for the gateway DCR front door by @tin-berri in https://github.com/BerriAI/litellm/pull/33182
* test(e2e): cover key regeneration rotating to a working new key by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34000
* test(e2e): cover tag creation persisting for spend categorization by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34018
* test(e2e): cover organization deletion removing it from /organization/info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34009
* perf(bedrock): audio transcription via rust core (py->rust bridge) by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33990
* chore(ci): retire daily OSS branches in favor of litellm_internal_staging by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34030
* test(e2e): cover model update persisting to /model/info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34017
* test(e2e): cover key block persisting to /key/info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34014
* test(e2e): cover created team appearing in /team/list by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34015
* test(e2e): cover created user appearing in /user/list by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34016
* test(e2e): cover team update persistence via /team/info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33997
* feat(bedrock): forward bedrock_tags to CreateModelInvocationJob for batch jobs by @mateo-berri in https://github.com/BerriAI/litellm/pull/33733
* test(e2e): cover model registration persistence in /model/info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33996
* test(e2e): cover user update persistence via /user/info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33998
* test(proxy): make model_info endpoint tests hermetic to kill an order/merge-skew flake by @mateo-berri in https://github.com/BerriAI/litellm/pull/34037
* chore(e2e): prune the non-deterministic perf.latency SLO coverage cell by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34024
* fix(ui): hide guardrail group headers when only one group has entries by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33885
* test(e2e): cover model deletion removing it from the catalog by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34006
* test(e2e): cover organization update persistence via /organization/info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34010
* test(e2e): cover team deletion persistence and key revocation by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33999
* test(e2e): cover user deletion removing it from user inventory by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34007
* test(e2e): cover created key appearing in /key/list inventory by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34008
* fix(cache): make in-memory and disk cache increments atomic by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34013
* test(e2e): add reliability suite covering fallback, timeout, and cache behavior by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34023
* test(true_rabbit): cover passthrough headers, batch assume-role, gemini, vllm, bedrock guardrails, batch rate-limit mapping by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33843
* fix(anthropic): only inject cache_control when the request carries none by @tin-berri in https://github.com/BerriAI/litellm/pull/33886
* feat(mcp): support MCP servers on the Anthropic /v1/messages API by @tin-berri in https://github.com/BerriAI/litellm/pull/33631
* feat(mcp): migrate client_credentials (M2M) onto the v2 resolver arm by @tin-berri in https://github.com/BerriAI/litellm/pull/32259
* fix(router): stop custom model_info leaking onto shared backend cost map key by @mateo-berri in https://github.com/BerriAI/litellm/pull/34041
* perf(streaming): build per-chunk Delta directly instead of setattr/delattr churn by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33992
* refactor(mcp): consolidate exception-tree walkers into one shared faults traversal by @tin-berri in https://github.com/BerriAI/litellm/pull/33183
* fix(budget): reset users/teams whose budget_reset_at is NULL by @jyeung-r7 in https://github.com/BerriAI/litellm/pull/33623
* perf(core): fast-path SafeAttributeModel.__delattr__ for declared fields by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33993
* fix(auth): set budget_reset_at when JWT upsert seeds a budget_duration by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34050
* fix(proxy/auth): handle tz-aware temp_budget_expiry by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33840
* fix(vertex,azure): model-aware mid-conversation system for Claude /v1/messages by @mateo-berri in https://github.com/BerriAI/litellm/pull/33807
* fix(auth): apply temp_budget_increase for cache-hit keys by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33841
* fix(agents): allow optional securityScheme fields so /public/agent_hub does not 500 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33897
* build(deps-dev): bump js-yaml to 4.3.0 and brace-expansion to 5.0.7 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34056
* refactor(ui): migrate credentials table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34053
* fix(cli): stable port and persisted master key for lite autoroute up by @tin-berri in https://github.com/BerriAI/litellm/pull/34026
* fix(mcp): return the DCR client's own redirect_uris to stop the /callback self-redirect loop by @tin-berri in https://github.com/BerriAI/litellm/pull/33756
* feat: add deepkeep as custom guardrail by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33844
* fix(router): propagate capability flags to shared backend cost map key by @mateo-berri in https://github.com/BerriAI/litellm/pull/34047
* fix(mcp): add Google Sheets, Drive, Calendar, and Docs to the OpenAPI registry by @tin-berri in https://github.com/BerriAI/litellm/pull/34059
* fix(bedrock_mantle): hoist Codex additional_tools input items to top-level tools by @lyb0307 in https://github.com/BerriAI/litellm/pull/33228
* fix(bedrock_mantle): gate unsupported service_tier on drop_params for the Responses API by @mateo-berri in https://github.com/BerriAI/litellm/pull/34058
* feat(proxy): auto-enable drop_params for Codex user agents by @mateo-berri in https://github.com/BerriAI/litellm/pull/34068
* refactor(ui): migrate available teams table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34070
* fix(ui): serve /ui/assets from the nginx image instead of SPA fallback by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34066
* feat(gemini): day-0 pricing for gemini-3.6-flash and gemini-3.5-flash-lite by @mateo-berri in https://github.com/BerriAI/litellm/pull/34106
* refactor(ui): migrate audit logs table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34080
* refactor(ui): migrate organizations table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34081
* refactor(ui): migrate memory table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34079
* refactor(ui): migrate access groups table to shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34078
* fix(model_armor): sanitize error details by default by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33908
* refactor(ui): migrate agents table onto the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34089
* fix(ui): add tooltip to the Active key status badge by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34109
* fix(interactions): add queued to the Interaction status enum by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34135
* ci(image-scan): match Python packages against CPE data by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34136
* chore(deps): bump pypdf to 6.14.2 and pyasn1 to 0.6.4 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34148
* feat(budgets): add configurable budget_reset_time of day by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31007
* feat(ui): surface key budget_reset_at in key info and keys table by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34113
* fix(a2a): accept semver protocolVersion values like 0.3.0 in agent cards by @mateo-berri in https://github.com/BerriAI/litellm/pull/34154
* feat(ui): add block/unblock key action to key info page by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34116
* fix(mcp): attach resolved OAuth credentials to OpenAPI spec_path tool calls by @tin-berri in https://github.com/BerriAI/litellm/pull/34063
* fix(e2e): use EndpointsClient.proxy after Gateway to ProxyClient rename by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34127
* refactor(auth): derive temp budget increase without mutating the token by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34121
* test(e2e): add Other suite and Guardrails coverage incl. an MCP tool-call guardrail by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34149
* fix(mcp): let an admin-pinned issuer drive OAuth discovery for url-less servers by @tin-berri in https://github.com/BerriAI/litellm/pull/34065
* fix(router): stop per-deployment num_retries from double-counting as provider max_retries by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34129
* fix(e2e): pin harness Python and surface proxy boot crash output by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34157
* fix(proxy): stop save_config from snapshotting environment_variables into the DB by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34119
* fix(ui): stop cloning body-carrying requests into stream uploads in fetchClient middleware by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34122
* fix(ui): distinguish response cache from provider prompt caching by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34138
* fix(ui): bundle provider logos as static imports and unify fallback in Logo component by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34125
* refactor(ui): migrate inline provider logo lookups to the shared Logo component by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34141
* test(e2e): cover team management routes for Management/UI coverage by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34115
* test(e2e): cover key management routes for Management/UI coverage by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34114
* test(e2e): cover budget, customer, user and org routes for Management/UI coverage by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34117
* fix(router): honor request-level num_retries over global litellm_settings.num_retries by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34124
* test(e2e): cover model, tag and access group routes for Management/UI coverage by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34118
* feat(proxy): make DB config-reload interval configurable via config.yaml and UI by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34130
* feat(ui): add controlled row selection to the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34167
* feat(mcp): store the enterprise IdP identity assertion at SSO login for EMA egress by @tin-berri in https://github.com/BerriAI/litellm/pull/34072
* chore(deps): bump gitpython to 3.1.52 in uv.lock by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34168
* feat(ui): add react-hook-form + zod form infrastructure by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34170
* chore(tests): replace a customer name and domain with neutral placeholders by @mateo-berri in https://github.com/BerriAI/litellm/pull/34172
* refactor(ui): migrate MCP, callback, guardrail, SSO, and search tool logos to the shared Logo component by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34169
* fix(ui): stop dashboard key-edit form 403ing on non-budget saves by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34112
* fix(ui): harden provider logo map typing and bundled asset guard by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34163
* fix(proxy): populate user_email on UserAPIKeyAuth for JWT auth by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34174
* test(e2e): cover config and misc management routes for Management/UI coverage by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34120
* test(e2e): add Azure AI Foundry and Anthropic /v1/messages coverage for the Rust bridge by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34021
* test(ui): run vitest unit tests in GitHub Actions and fix stale key-info tests by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34175
* refactor(ui): migrate users and model health checks tables onto the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34182
* fix(ui): restore guardrail_info_helpers exports in GuardrailsPanel test mock by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34197
* chore(ui): bump sharp to 0.35.x via npm override by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34193
* refactor(ui): migrate Tool Policies table onto the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34176
* chore: bump litellm-proxy-extras 0.4.79 -> 0.4.80, litellm 1.94.0 -> 1.95.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34199
* feat(rust): honor pre-computed Entra ID auth for Azure /messages by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34107
* fix(rust): route agentic-hook /messages requests to Python for all stream modes by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34126
* fix(e2e): drop httpbin.org from passthrough headers test, use real Anthropic by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34159
* test(e2e): cover 12 non-core LLM coverage registry cells by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34123
* test(logging): pin compression_savings in the gcs pubsub spend log fixture by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34204
* docs: add TLDR section to PR template by @mateo-berri in https://github.com/BerriAI/litellm/pull/34203
* (Security) - Prevent potential provider key exposure through URL-valued model destinations and fallbacks by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34189
* docs(issue-template): ask for a numbered list of reproduction steps by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34207
* test(ui): fix key and credential e2e specs after the overflow menu migrations by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34206
* test(e2e): add live A2A agent e2e suite by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34052
* fix(ui): reflect REDIS_* env cache config and stop the UI overwriting the stored password by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34160
* fix(ui): surface env-var-sourced theme and logging-callback settings by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34156
* test(musty_leopard): cover customer chat/messages cost + streaming paths by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34164
* chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34200
* test(e2e): add weekly session-anomaly load test against real providers by @mateo-berri in https://github.com/BerriAI/litellm/pull/34166
* fix(bedrock): emit Nova Sonic realtime session.created on connect and session.updated on session.update by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34133
* feat(guardrails): add only_scan_new_messages for per-session incremental scanning by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33278
* fix(proxy): share CLI SSO login sessions across workers without enable_redis_auth_cache by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33261
* test(e2e): move Admin UI Playwright suite to tests/e2e/ui by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34196
* fix(scim): use members_with_roles as the source of truth for group membership by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34162
* fix(scim): sync team roster and dedup teams for existing-user email upsert by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34183
* fix(proxy): raise dashboard session budget default to $1 and make it configurable in config and Admin UI by @tin-berri in https://github.com/BerriAI/litellm/pull/34146
* fix(scim): prune deleted user from teams' members_with_roles by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34180
* test(e2e): fail the run when a Rust gateway silently serves /messages through Python by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34208
* fix(team): make team member add atomic to prevent concurrent-add member loss by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34185
* fix(ui): surface SSO and SMTP settings supplied as process env vars by @tin-berri in https://github.com/BerriAI/litellm/pull/33576
* fix(scim): parse membership id from filtered PATCH path when value omitted by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34181
* fix(ui): remove misleading os.environ tooltip from logging settings by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34305
* fix(anthropic): strip uniqueItems + other unsupported array/object constraints from output_format schema by @mateo-berri in https://github.com/BerriAI/litellm/pull/34313
* fix(e2e): satisfy basedpyright in test_session_anomaly so the e2e lint gate passes by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34288
* refactor(proxy): type the PATCH /team/{team_id} request body by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34195
* feat(ui): edit fallback chains from router settings by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32841
* fix(mcp): use official Google Drive streamable HTTP MCP server by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34322
* refactor(ui): migrate api-reference to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34263
* refactor(ui): migrate prompts list page to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34289
* refactor(ui): migrate old-usage to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34304
* refactor(ui): migrate transform-request to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34303
* chore(ui): bump next to 16.2.11 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34329
* test(e2e): cover key max_budget blocks on personal, team, and team-member keys by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33895
* fix(tests): remove importlib.reload of http_handler that breaks client injection in later tests by @mateo-berri in https://github.com/BerriAI/litellm/pull/34336
* test(e2e): require a cache-hit row instead of skipping when absent by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34283
* fix(mcp): fall through to an ephemeral DCR mint when passthrough authorize has no client_id by @tin-berri in https://github.com/BerriAI/litellm/pull/33884
* ci: run UI unit tests on a 16-core runner by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34330
* test(e2e): induce spend failure row deterministically instead of skipping by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34282
* chore(ui): add filename, size, JSX-handler, prefer-const, and antd lint rules by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34341
* fix(responses): preserve reasoning through prompt hooks by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33422
* fix(budget): resolve word-form budget_duration so it no longer silently resets daily by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34250
* fix(bedrock): include type in tool_choice disable_parallel_tool_use config for Converse by @mateo-berri in https://github.com/BerriAI/litellm/pull/34347
* fix(autoroute): discover models via /v1/models so an AI-API-only key works by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34259
* feat(ui): give each Models + Endpoints tab its own path by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34327
* feat(organization): add RESTful PATCH /v2/organization/{organization_id} by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32350
* refactor(ui): migrate search-tools info view to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34323
* fix(docker): bake non_root prisma engines at /opt/prisma so migrations run offline for any uid by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34325
* fix(anthropic): strip all remaining output_format schema keywords rejected by Anthropic by @mateo-berri in https://github.com/BerriAI/litellm/pull/34319
* fix(sagemaker): forward stream events as they arrive to cut TTFT by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34338
* test(e2e): cover key budget_duration resets on personal, team, and team-member keys by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33896
* feat(mcp): admit gateway DCR session bearers at the aggregate /mcp scope by @tin-berri in https://github.com/BerriAI/litellm/pull/33190
* fix(mcp): log actionable OAuth discovery failures for misconfigured server urls by @tin-berri in https://github.com/BerriAI/litellm/pull/34225
* refactor(ui): migrate workflow runs to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34370
* refactor(ui): migrate models and endpoints table onto the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34363
* test(e2e): drive a real Linear OAuth MCP through chat completions under both ingress headers by @tin-berri in https://github.com/BerriAI/litellm/pull/33787
* refactor(ui): migrate request logs table onto the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34343
* feat(ui): rebuild Organization Settings on react-hook-form + zod with a dirty-field PATCH by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34324
* refactor(e2e): drop require_env, read os.environ where a cred is used by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34413
* refactor(mcp): delete unreachable v1 OBO handler and gate REST OAuth on v2 resolver by @tin-berri in https://github.com/BerriAI/litellm/pull/34407
* feat(cost-optimization): add spend-by-tool and cache leakage views by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33978
* refactor(ui): migrate agents to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34365
* refactor(ui): extract shared tab-routing helpers and adopt them in Models + Endpoints by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34435
* feat(proxy): add overwrite_user_with_key_hash to stamp outgoing user param with key hash by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34417
* fix(ui): find logs by request id across pages and dates (LIT-3981) by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31743
* fix(proxy): reject failed atomic budget reservations under fail_closed_budget_enforcement by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34429
* ci: only run CodSpeed benchmarks on backend changes by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34345
* fix(cost_tracking): map OpenAI cache_write_tokens for prompt cache creation billing by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34046
* fix(proxy): restore atomic user upsert when adding team members by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34457
* chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34450
* fix(ui): keep cache leakage time range picker inline at narrow widths by @tin-berri in https://github.com/BerriAI/litellm/pull/34439
* feat(ui): show in the log drawer and session sidebar when an auto-router served a request by @tin-berri in https://github.com/BerriAI/litellm/pull/34434
* refactor(ui): migrate memory page to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34366
* refactor(ui): migrate budgets, skills, ui-theme to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34465
* refactor(ui): migrate access-groups, vector-stores, organizations to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34466
* refactor(ui): migrate logging-and-alerts, caching, policies to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34468
* feat(ui): standalone /connect route for MCP OAuth, decoupled from Chat UI flag by @tin-berri in https://github.com/BerriAI/litellm/pull/34334
* refactor(ui): migrate mcp-servers, tag-management, tool-policies to shadcn by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34469
* test(e2e): pin the a2a bridge agent's Anthropic key so message/send works by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34512
* fix(guardrails/model_armor): handle None metadata in post_call _process_response (#34390) by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34405
* feat(anthropic): add Claude Opus 5 by @mateo-berri in https://github.com/BerriAI/litellm/pull/34518
* chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34519
* test(a2a): assert the property agent returns listings, not just non-empty text by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34515
* fix(logging): stop scheduling sync failure_handler concurrently with async_failure_handler by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34306
* fix(vertex): incrementally parse accumulated Gemini stream JSON to prevent multi-value wedge by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34320
* test: replace deprecated gpt-5-codex with gpt-5.3-codex by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34520
* fix(gateway): install bedrock-realtime extra for Nova Sonic realtime by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34426
* feat(proxy): add SAML 2.0 SSO for the admin UI by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31429
* feat(guardrails): add run_in_parallel opt-in for concurrent pre_call and post_call guardrails by @noahnistler in https://github.com/BerriAI/litellm/pull/33770
* fix: handle explicit outputInfo: null in Vertex AI batch response by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34473
* fix(otel): keep an MCP tool call in one trace, anchored to its own request by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34537
* fix(ui): keep a key's MCP toolsets when saving an edit by @tin-berri in https://github.com/BerriAI/litellm/pull/34452
* fix(ui): bind key duration input to one Form.Item so pre-filled expiry submits by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34521
* feat(ui): migrate the Create Organization form to shadcn and react-hook-form by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34552
* refactor(ui): derive the dashboard object_permission type from the generated schema by @tin-berri in https://github.com/BerriAI/litellm/pull/34454
* test(e2e): cover MCP access-group tool selection at key creation by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34480
* test: remove tests that mutation analysis proved assert nothing by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34475
* fix(ui): keep entity usage tabs aligned with their panels by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34573
* fix(guardrails): stop reporting a no-op guardrail as applied on passthrough by @tin-berri in https://github.com/BerriAI/litellm/pull/34411
* fix(proxy): return 400 instead of 500 for chat completions without messages by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34547
* fix(guardrails): keep guardrail information in spend logs when the caller sends its own metadata by @tin-berri in https://github.com/BerriAI/litellm/pull/34458
* fix(responses): strip include_usage from stream_options instead of dropping the param by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34549
* fix(guardrails): add /v1/messages support for Straiker plugin by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34548
* fix(proxy/batches): resolve managed unified input_file_id to storage_url with ownership check before dispatch by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34474
* fix(guardrails): derive tokens_saved when Headroom compression service omits it by @tin-berri in https://github.com/BerriAI/litellm/pull/34578
* refactor(ui): migrate routing groups table onto the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34571
* fix(proxy): attribute org spend for team-linked credentials minted without org_id by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34577
* fix(proxy/batches): make managed-file resolution additive, restore fall-back for missing-row and lookup errors by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34584
* fix(bedrock-mantle): backfill usage on non-streaming /v1/messages responses by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34446
* fix(proxy): cap /v1/tool/spend window at 30 days and bound every SpendLogs read by @tin-berri in https://github.com/BerriAI/litellm/pull/34582
* feat(passthrough): record cost and usage reported by the upstream target by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34590
* fix(logs): scope and bound the End User filter on the logs page by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34579
* feat(ui): deep-link virtual key detail view via ?key= query param by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34591
* revert(ui): return Models + Endpoints tabs to in-memory routing, keep the ?model drill-in by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34629
* fix(proxy): merge model-level guardrails before pre_call_hook by @hclsys in https://github.com/BerriAI/litellm/pull/29654
* fix(router): don't cool down parent deployment on advisor sub-call failure by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33792
* test(e2e): cover /vllm chat passthrough against a hosted backend by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34432
* test(e2e): point four suites at models the providers still serve by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34567
* test(e2e): make the bedrock guardrail test match the guardrail it points at by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34568
* fix(otel): stamp an MCP tool failure on the request that carried it by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34551
* test(e2e): set reasoning_effort=none for gpt-5.6 chat tool calls by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34569
* test(e2e): cover /v1/images/edits by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34476
* chore(deps): bump gitpython and postcss to advisory-clear versions by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34634
* fix(proxy): hash caller-supplied key in key update audit log object_id by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34632
* test(e2e): cover /openai chat passthrough cost logging by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34470
* fix(proxy): global max_budget ignores budget_duration; enforce against the resettable proxy budget row by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33732
* fix(mcp): use a toolset row's stored tool name as written by @tin-berri in https://github.com/BerriAI/litellm/pull/34559
* fix(auth): route JWT default-team into memberships instead of the create payload by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33082
* ci: drop the docker SERVER_ROOT_PATH e2e job for a unit test by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34642
* test: stop bedrock tool acompletion tests from making real network calls by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34644
* fix(proxy): stop litellm/proxy from shadowing installed packages on sys.path by @yassin-berriai in https://github.com/BerriAI/litellm/pull/34656
* fix(cost-optimization): swap methodology Collapse for a shadcn HoverCard by @tin-berri in https://github.com/BerriAI/litellm/pull/34598
* fix(ci): scope UI lint to the files a PR actually changed by @mateo-berri in https://github.com/BerriAI/litellm/pull/34600
* fix(mcp): stop leaking upstream server credentials in tool-call 403 by @tin-berri in https://github.com/BerriAI/litellm/pull/34340
* fix(batches): paginate managed batch list by unified_object_id cursor by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34192
* fix(e2e): stop tests from breaking the shared proxy for every suite after them by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34664
* fix(cost-optimization): anchor the savings line at a $0 range start by @tin-berri in https://github.com/BerriAI/litellm/pull/34453
* fix(bedrock): stop replaying expired Google OIDC tokens to STS on guardrail auth by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34637
* chore: bump litellm-enterprise 0.1.51 -> 0.1.52, litellm-proxy-extras 0.4.80 -> 0.4.81 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34669
* chore(ui): rebuild Next.js build artifacts by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34671
* fix(azure_ai): advertise 1M context window for Claude Opus 4.6+ on Foundry by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34556
* feat(mcp): send RFC 8707 resource indicators on upstream OAuth legs by @tin-berri in https://github.com/BerriAI/litellm/pull/34265
* fix(guardrails): resolve judge_model credentials via lazy Router lookup in llm_as_a_judge by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34509
* style(ui): match MCP Servers tabs to the dashboard's line tab pattern by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34685
* fix(ui): center vertical toolbar dividers by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34684
* fix(ui): restore the Add MCP Server dialog size and header spacing by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34679
* fix(ui): truncate long team names in the models table team dropdown by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34689
* fix(e2e/ui): resolve dashboard base URL from env instead of hardcoding localhost by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34739
* chore(deps): bump gitpython to 3.1.55 and brace-expansion to 5.0.8 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34798
* fix(guardrails): preserve cache_control breakpoints in compresr write-back by @tin-berri in https://github.com/BerriAI/litellm/pull/34660
* fix(install): pass an explicit Python version request to uv tool install by @tin-berri in https://github.com/BerriAI/litellm/pull/34750
* refactor(management): move the logs end-user filter onto /management/v1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34691
* fix: match exact class in callback dedup so a custom subclass does not block a built-in logger by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34804
* fix(prometheus): populate cache write token metrics for OpenAI-style usage by @yucheng-berri in https://github.com/BerriAI/litellm/pull/34803
* fix: backport the management/v1 end-user filter and four dashboard fixes onto rc/1.95.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34811
* chore(typing): clear 2.7k basedpyright Any errors across 15 hotspot files by @mateo-berri in https://github.com/BerriAI/litellm/pull/34745
* test(e2e): stop racing control-plane writes across the mcp, a2a, guardrail and passthrough suites by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34833
* fix(ui): validate default team values in Default User Settings by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34815
* fix(proxy): sanitize per-key callback config out of logged metadata by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32583
* fix(proxy): roll up tool spend daily instead of scanning SpendLogs by @tin-berri in https://github.com/BerriAI/litellm/pull/34675
* fix(responses_bridge): keep one chat completion id per stream and always stream completed responses by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34539
* fix(guardrails): compress content-parts messages in headroom guardrail (Anthropic traffic) by @tin-berri in https://github.com/BerriAI/litellm/pull/34586
* fix(router): release the pre-routing strategy slot when a deployment is replaced or deleted by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/34564
* fix(guardrails): classify all 4xx HTTPException guardrail blocks as intervened by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33821
* chore: rebuild Admin UI bundle for release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34859
* test: unstale the reasoning-effort grid count and the responses bridge test by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34868
* test(e2e): realign Admin UI specs with the MCP dialog and keyless landing by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34870
* test(e2e): unblock the ui suite, fix the mcp registration race, park two known product bugs by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34853
* test(e2e): make MCP and prometheus e2e tests robust to data-plane sync lag by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34854
* Fix cache leakage card layout to keep date picker on right by @tin-berri in https://github.com/BerriAI/litellm/pull/34885
* fix(gateway): route /a2a through the gateway component by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34958
* fix(e2e): poll for both spend rows before asserting the cache-hit contract by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34968
* test(e2e): skip passthrough headers test until stage can route custom paths to provider creds by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/34980
* feat(ui): mark Cost Optimization as beta in the left nav by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34984
* fix(proxy): avoid DB outage during planned RDS IAM rotation by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/34749
* chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34864
* test(e2e): bound the post-/model/new servable wait at 40s by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35020
* test(e2e): poll MCP tools across multi-worker lag (#35047) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35049
* chore(release): backport #35271 to rc/1.95.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35299
* chore(release): sync rc/1.95.0 with the v1.95.0-rc.1 main SHA by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35414
* fix(ui): land general login on the keys dashboard, send MCP consent to /ui/connect (backport #35523 to rc/1.95.0) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35552
## New Contributors
* @vineetpuranik made their first contribution in https://github.com/BerriAI/litellm/pull/33940
* @jyeung-r7 made their first contribution in https://github.com/BerriAI/litellm/pull/33623
* @lyb0307 made their first contribution in https://github.com/BerriAI/litellm/pull/33228
**Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.94.0...v1.95.0