v1.95.0-dev.1
Pre-release
Pre-release
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.95.0-dev.1Verify 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.95.0-dev.1/cosign.pub \
ghcr.io/berriai/litellm:v1.95.0-dev.1Expected 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 #33810
- test(e2e): assert the long budget window keeps blocking after the short window resets by @ryan-crabbe-berri in #33832
- feat(messages): route native Anthropic /messages through Rust behind LITELLM_RUST env var by @devin-ai-integration[bot] in #33848
- test(e2e): cover credential-backed /v1/messages request by @devin-ai-integration[bot] in #33863
- feat(rust): expose Anthropic Messages route (POST /v1/messages) on the axum gateway by @devin-ai-integration[bot] in #33880
- feat(rust): 1:1 port of OpenAI Responses API WebSockets to litellm-rust by @devin-ai-integration[bot] in #33849
- fix(proxy): treat malformed cost-map token limits as absent on /v1/models by @yuneng-berri in #33903
- feat(rust): port BaseAWSLLM auth (credential resolution + SigV4) to litellm-core as a base provider by @devin-ai-integration[bot] in #33888
- feat(complexity-router): add return_raw_model_name toggle for response model field by @devin-ai-integration[bot] in #33875
- feat(mcp): always-on aggregate gateway DCR discovery front door by @tin-berri in #33174
- fix(langfuse): send v4 ingestion header for otel callback by @yucheng-berri in #33907
- feat(ui): add configuration tabs to the Cost Optimization page by @devin-ai-integration[bot] in #33899
- test(e2e): guard destructive spend-log truncate behind an explicit opt-in by @yassin-berriai in #33751
- chore(rust): migrate the litellm-rust workspace (core, ai-gateway, python-bridge) from Rust edition 2021 to edition 2024 by @vineetpuranik in #33940
- fix(fireworks_ai): restore Content-Type application/json header (fixes 415) by @devin-ai-integration[bot] in #33929
- feat(spend): raise /spend/logs/v2 page_size cap to 1000 by @yuneng-berri in #33994
- feat(mcp): identity-only session tokens for the gateway DCR front door by @tin-berri in #33182
- test(e2e): cover key regeneration rotating to a working new key by @yassin-berriai in #34000
- test(e2e): cover tag creation persisting for spend categorization by @yassin-berriai in #34018
- test(e2e): cover organization deletion removing it from /organization/info by @yassin-berriai in #34009
- perf(bedrock): audio transcription via rust core (py->rust bridge) by @devin-ai-integration[bot] in #33990
- chore(ci): retire daily OSS branches in favor of litellm_internal_staging by @yuneng-berri in #34030
- test(e2e): cover model update persisting to /model/info by @yassin-berriai in #34017
- test(e2e): cover key block persisting to /key/info by @yassin-berriai in #34014
- test(e2e): cover created team appearing in /team/list by @yassin-berriai in #34015
- test(e2e): cover created user appearing in /user/list by @yassin-berriai in #34016
- test(e2e): cover team update persistence via /team/info by @yassin-berriai in #33997
- feat(bedrock): forward bedrock_tags to CreateModelInvocationJob for batch jobs by @mateo-berri in #33733
- test(e2e): cover model registration persistence in /model/info by @yassin-berriai in #33996
- test(e2e): cover user update persistence via /user/info by @yassin-berriai in #33998
- test(proxy): make model_info endpoint tests hermetic to kill an order/merge-skew flake by @mateo-berri in #34037
- chore(e2e): prune the non-deterministic perf.latency SLO coverage cell by @yassin-berriai in #34024
- fix(ui): hide guardrail group headers when only one group has entries by @yuneng-berri in #33885
- test(e2e): cover model deletion removing it from the catalog by @yassin-berriai in #34006
- test(e2e): cover organization update persistence via /organization/info by @yassin-berriai in #34010
- test(e2e): cover team deletion persistence and key revocation by @yassin-berriai in #33999
- test(e2e): cover user deletion removing it from user inventory by @yassin-berriai in #34007
- test(e2e): cover created key appearing in /key/list inventory by @yassin-berriai in #34008
- fix(cache): make in-memory and disk cache increments atomic by @yucheng-berri in #34013
- test(e2e): add reliability suite covering fallback, timeout, and cache behavior by @yassin-berriai in #34023
- test(true_rabbit): cover passthrough headers, batch assume-role, gemini, vllm, bedrock guardrails, batch rate-limit mapping by @mubashir1osmani in #33843
- fix(anthropic): only inject cache_control when the request carries none by @tin-berri in #33886
- feat(mcp): support MCP servers on the Anthropic /v1/messages API by @tin-berri in #33631
- feat(mcp): migrate client_credentials (M2M) onto the v2 resolver arm by @tin-berri in #32259
- fix(router): stop custom model_info leaking onto shared backend cost map key by @mateo-berri in #34041
- perf(streaming): build per-chunk Delta directly instead of setattr/delattr churn by @yassin-berriai in #33992
- refactor(mcp): consolidate exception-tree walkers into one shared faults traversal by @tin-berri in #33183
- fix(budget): reset users/teams whose budget_reset_at is NULL by @jyeung-r7 in #33623
- perf(core): fast-path SafeAttributeModel.delattr for declared fields by @yassin-berriai in #33993
- fix(auth): set budget_reset_at when JWT upsert seeds a budget_duration by @ryan-crabbe-berri in #34050
- fix(proxy/auth): handle tz-aware temp_budget_expiry by @devin-ai-integration[bot] in #33840
- fix(vertex,azure): model-aware mid-conversation system for Claude /v1/messages by @mateo-berri in #33807
- fix(auth): apply temp_budget_increase for cache-hit keys by @devin-ai-integration[bot] in #33841
- fix(agents): allow optional securityScheme fields so /public/agent_hub does not 500 by @devin-ai-integration[bot] in #33897
- build(deps-dev): bump js-yaml to 4.3.0 and brace-expansion to 5.0.7 by @yuneng-berri in #34056
- refactor(ui): migrate credentials table onto shared DataTable by @yuneng-berri in #34053
- fix(cli): stable port and persisted master key for lite autoroute up by @tin-berri in #34026
- fix(mcp): return the DCR client's own redirect_uris to stop the /callback self-redirect loop by @tin-berri in #33756
- feat: add deepkeep as custom guardrail by @yucheng-berri in #33844
- fix(router): propagate capability flags to shared backend cost map key by @mateo-berri in #34047
- fix(mcp): add Google Sheets, Drive, Calendar, and Docs to the OpenAPI registry by @tin-berri in #34059
- fix(bedrock_mantle): hoist Codex additional_tools input items to top-level tools by @lyb0307 in #33228
- fix(bedrock_mantle): gate unsupported service_tier on drop_params for the Responses API by @mateo-berri in #34058
- feat(proxy): auto-enable drop_params for Codex user agents by @mateo-berri in #34068
- refactor(ui): migrate available teams table onto shared DataTable by @yuneng-berri in #34070
- fix(ui): serve /ui/assets from the nginx image instead of SPA fallback by @ryan-crabbe-berri in #34066
- feat(gemini): day-0 pricing for gemini-3.6-flash and gemini-3.5-flash-lite by @mateo-berri in #34106
- refactor(ui): migrate audit logs table onto shared DataTable by @yuneng-berri in #34080
- refactor(ui): migrate organizations table onto shared DataTable by @yuneng-berri in #34081
- refactor(ui): migrate memory table onto shared DataTable by @yuneng-berri in #34079
- refactor(ui): migrate access groups table to shared DataTable by @yuneng-berri in #34078
- fix(model_armor): sanitize error details by default by @yucheng-berri in #33908
- refactor(ui): migrate agents table onto the shared DataTable by @yuneng-berri in #34089
- fix(ui): add tooltip to the Active key status badge by @ryan-crabbe-berri in #34109
- fix(interactions): add queued to the Interaction status enum by @yuneng-berri in #34135
- ci(image-scan): match Python packages against CPE data by @yuneng-berri in #34136
- chore(deps): bump pypdf to 6.14.2 and pyasn1 to 0.6.4 by @yuneng-berri in #34148
- feat(budgets): add configurable budget_reset_time of day by @ryan-crabbe-berri in #31007
- feat(ui): surface key budget_reset_at in key info and keys table by @ryan-crabbe-berri in #34113
- fix(a2a): accept semver protocolVersion values like 0.3.0 in agent cards by @mateo-berri in #34154
- feat(ui): add block/unblock key action to key info page by @ryan-crabbe-berri in #34116
- fix(mcp): attach resolved OAuth credentials to OpenAPI spec_path tool calls by @tin-berri in #34063
- fix(e2e): use EndpointsClient.proxy after Gateway to ProxyClient rename by @yassin-berriai in #34127
- refactor(auth): derive temp budget increase without mutating the token by @ryan-crabbe-berri in #34121
- test(e2e): add Other suite and Guardrails coverage incl. an MCP tool-call guardrail by @mubashir1osmani in #34149
- fix(mcp): let an admin-pinned issuer drive OAuth discovery for url-less servers by @tin-berri in #34065
- fix(router): stop per-deployment num_retries from double-counting as provider max_retries by @yassin-berriai in #34129
- fix(e2e): pin harness Python and surface proxy boot crash output by @ryan-crabbe-berri in #34157
- fix(proxy): stop save_config from snapshotting environment_variables into the DB by @yassin-berriai in #34119
- fix(ui): stop cloning body-carrying requests into stream uploads in fetchClient middleware by @ryan-crabbe-berri in #34122
- fix(ui): distinguish response cache from provider prompt caching by @ryan-crabbe-berri in #34138
- fix(ui): bundle provider logos as static imports and unify fallback in Logo component by @ryan-crabbe-berri in #34125
- refactor(ui): migrate inline provider logo lookups to the shared Logo component by @ryan-crabbe-berri in #34141
- test(e2e): cover team management routes for Management/UI coverage by @yassin-berriai in #34115
- test(e2e): cover key management routes for Management/UI coverage by @yassin-berriai in #34114
- test(e2e): cover budget, customer, user and org routes for Management/UI coverage by @yassin-berriai in #34117
- fix(router): honor request-level num_retries over global litellm_settings.num_retries by @yassin-berriai in #34124
- test(e2e): cover model, tag and access group routes for Management/UI coverage by @yassin-berriai in #34118
- feat(proxy): make DB config-reload interval configurable via config.yaml and UI by @yassin-berriai in #34130
- feat(ui): add controlled row selection to the shared DataTable by @yuneng-berri in #34167
- feat(mcp): store the enterprise IdP identity assertion at SSO login for EMA egress by @tin-berri in #34072
- chore(deps): bump gitpython to 3.1.52 in uv.lock by @yuneng-berri in #34168
- feat(ui): add react-hook-form + zod form infrastructure by @yuneng-berri in #34170
- chore(tests): replace a customer name and domain with neutral placeholders by @mateo-berri in #34172
- refactor(ui): migrate MCP, callback, guardrail, SSO, and search tool logos to the shared Logo component by @ryan-crabbe-berri in #34169
- fix(ui): stop dashboard key-edit form 403ing on non-budget saves by @ryan-crabbe-berri in #34112
- fix(ui): harden provider logo map typing and bundled asset guard by @ryan-crabbe-berri in #34163
- fix(proxy): populate user_email on UserAPIKeyAuth for JWT auth by @ryan-crabbe-berri in #34174
- test(e2e): cover config and misc management routes for Management/UI coverage by @yassin-berriai in #34120
- test(e2e): add Azure AI Foundry and Anthropic /v1/messages coverage for the Rust bridge by @yassin-berriai in #34021
- test(ui): run vitest unit tests in GitHub Actions and fix stale key-info tests by @yuneng-berri in #34175
- refactor(ui): migrate users and model health checks tables onto the shared DataTable by @yuneng-berri in #34182
- fix(ui): restore guardrail_info_helpers exports in GuardrailsPanel test mock by @yuneng-berri in #34197
- chore(ui): bump sharp to 0.35.x via npm override by @yuneng-berri in #34193
- refactor(ui): migrate Tool Policies table onto the shared DataTable by @yuneng-berri in #34176
- chore: bump litellm-proxy-extras 0.4.79 -> 0.4.80, litellm 1.94.0 -> 1.95.0 by @yuneng-berri in #34199
- feat(rust): honor pre-computed Entra ID auth for Azure /messages by @yassin-berriai in #34107
- fix(rust): route agentic-hook /messages requests to Python for all stream modes by @yassin-berriai in #34126
- fix(e2e): drop httpbin.org from passthrough headers test, use real Anthropic by @mubashir1osmani in #34159
- test(e2e): cover 12 non-core LLM coverage registry cells by @ryan-crabbe-berri in #34123
- test(logging): pin compression_savings in the gcs pubsub spend log fixture by @yuneng-berri in #34204
- docs: add TLDR section to PR template by @mateo-berri in #34203
- (Security) - Prevent potential provider key exposure through URL-valued model destinations and fallbacks by @yucheng-berri in #34189
- docs(issue-template): ask for a numbered list of reproduction steps by @ryan-crabbe-berri in #34207
- test(ui): fix key and credential e2e specs after the overflow menu migrations by @yuneng-berri in #34206
- test(e2e): add live A2A agent e2e suite by @devin-ai-integration[bot] in #34052
- fix(ui): reflect REDIS_* env cache config and stop the UI overwriting the stored password by @yassin-berriai in #34160
- fix(ui): surface env-var-sourced theme and logging-callback settings by @yassin-berriai in #34156
- test(musty_leopard): cover customer chat/messages cost + streaming paths by @mubashir1osmani in #34164
- chore(ci): promote internal staging to main by @yuneng-berri in #34200
New Contributors
- @vineetpuranik made their first contribution in #33940
- @jyeung-r7 made their first contribution in #33623
- @lyb0307 made their first contribution in #33228
Full Changelog: v1.94.0-rc.1...v1.95.0-dev.1