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.0Verify using the release tag (convenience):
Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.95.0/cosign.pub \
ghcr.io/berriai/litellm:v1.95.0Expected output:
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
What's Changed
- feat(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
- test(e2e): add weekly session-anomaly load test against real providers by @mateo-berri in #34166
- fix(bedrock): emit Nova Sonic realtime session.created on connect and session.updated on session.update by @mubashir1osmani in #34133
- feat(guardrails): add only_scan_new_messages for per-session incremental scanning by @devin-ai-integration[bot] in #33278
- fix(proxy): share CLI SSO login sessions across workers without enable_redis_auth_cache by @devin-ai-integration[bot] in #33261
- test(e2e): move Admin UI Playwright suite to tests/e2e/ui by @ryan-crabbe-berri in #34196
- fix(scim): use members_with_roles as the source of truth for group membership by @yassin-berriai in #34162
- fix(scim): sync team roster and dedup teams for existing-user email upsert by @yassin-berriai in #34183
- fix(proxy): raise dashboard session budget default to $1 and make it configurable in config and Admin UI by @tin-berri in #34146
- fix(scim): prune deleted user from teams' members_with_roles by @yassin-berriai in #34180
- test(e2e): fail the run when a Rust gateway silently serves /messages through Python by @yassin-berriai in #34208
- fix(team): make team member add atomic to prevent concurrent-add member loss by @yassin-berriai in #34185
- fix(ui): surface SSO and SMTP settings supplied as process env vars by @tin-berri in #33576
- fix(scim): parse membership id from filtered PATCH path when value omitted by @yassin-berriai in #34181
- fix(ui): remove misleading os.environ tooltip from logging settings by @devin-ai-integration[bot] in #34305
- fix(anthropic): strip uniqueItems + other unsupported array/object constraints from output_format schema by @mateo-berri in #34313
- fix(e2e): satisfy basedpyright in test_session_anomaly so the e2e lint gate passes by @devin-ai-integration[bot] in #34288
- refactor(proxy): type the PATCH /team/{team_id} request body by @yuneng-berri in #34195
- feat(ui): edit fallback chains from router settings by @devin-ai-integration[bot] in #32841
- fix(mcp): use official Google Drive streamable HTTP MCP server by @devin-ai-integration[bot] in #34322
- refactor(ui): migrate api-reference to shadcn by @yuneng-berri in #34263
- refactor(ui): migrate prompts list page to shadcn by @yuneng-berri in #34289
- refactor(ui): migrate old-usage to shadcn by @yuneng-berri in #34304
- refactor(ui): migrate transform-request to shadcn by @yuneng-berri in #34303
- chore(ui): bump next to 16.2.11 by @yuneng-berri in #34329
- test(e2e): cover key max_budget blocks on personal, team, and team-member keys by @ryan-crabbe-berri in #33895
- fix(tests): remove importlib.reload of http_handler that breaks client injection in later tests by @mateo-berri in #34336
- test(e2e): require a cache-hit row instead of skipping when absent by @devin-ai-integration[bot] in #34283
- fix(mcp): fall through to an ephemeral DCR mint when passthrough authorize has no client_id by @tin-berri in #33884
- ci: run UI unit tests on a 16-core runner by @yuneng-berri in #34330
- test(e2e): induce spend failure row deterministically instead of skipping by @devin-ai-integration[bot] in #34282
- chore(ui): add filename, size, JSX-handler, prefer-const, and antd lint rules by @ryan-crabbe-berri in #34341
- fix(responses): preserve reasoning through prompt hooks by @devin-ai-integration[bot] in #33422
- fix(budget): resolve word-form budget_duration so it no longer silently resets daily by @devin-ai-integration[bot] in #34250
- fix(bedrock): include type in tool_choice disable_parallel_tool_use config for Converse by @mateo-berri in #34347
- fix(autoroute): discover models via /v1/models so an AI-API-only key works by @devin-ai-integration[bot] in #34259
- feat(ui): give each Models + Endpoints tab its own path by @ryan-crabbe-berri in #34327
- feat(organization): add RESTful PATCH /v2/organization/{organization_id} by @ryan-crabbe-berri in #32350
- refactor(ui): migrate search-tools info view to shadcn by @yuneng-berri in #34323
- fix(docker): bake non_root prisma engines at /opt/prisma so migrations run offline for any uid by @yuneng-berri in #34325
- fix(anthropic): strip all remaining output_format schema keywords rejected by Anthropic by @mateo-berri in #34319
- fix(sagemaker): forward stream events as they arrive to cut TTFT by @devin-ai-integration[bot] in #34338
- test(e2e): cover key budget_duration resets on personal, team, and team-member keys by @ryan-crabbe-berri in #33896
- feat(mcp): admit gateway DCR session bearers at the aggregate /mcp scope by @tin-berri in #33190
- fix(mcp): log actionable OAuth discovery failures for misconfigured server urls by @tin-berri in #34225
- refactor(ui): migrate workflow runs to shadcn by @yuneng-berri in #34370
- refactor(ui): migrate models and endpoints table onto the shared DataTable by @yuneng-berri in #34363
- test(e2e): drive a real Linear OAuth MCP through chat completions under both ingress headers by @tin-berri in #33787
- refactor(ui): migrate request logs table onto the shared DataTable by @yuneng-berri in #34343
- feat(ui): rebuild Organization Settings on react-hook-form + zod with a dirty-field PATCH by @ryan-crabbe-berri in #34324
- refactor(e2e): drop require_env, read os.environ where a cred is used by @mubashir1osmani in #34413
- refactor(mcp): delete unreachable v1 OBO handler and gate REST OAuth on v2 resolver by @tin-berri in #34407
- feat(cost-optimization): add spend-by-tool and cache leakage views by @devin-ai-integration[bot] in #33978
- refactor(ui): migrate agents to shadcn by @yuneng-berri in #34365
- refactor(ui): extract shared tab-routing helpers and adopt them in Models + Endpoints by @ryan-crabbe-berri in #34435
- feat(proxy): add overwrite_user_with_key_hash to stamp outgoing user param with key hash by @ryan-crabbe-berri in #34417
- fix(ui): find logs by request id across pages and dates (LIT-3981) by @ryan-crabbe-berri in #31743
- fix(proxy): reject failed atomic budget reservations under fail_closed_budget_enforcement by @ryan-crabbe-berri in #34429
- ci: only run CodSpeed benchmarks on backend changes by @devin-ai-integration[bot] in #34345
- fix(cost_tracking): map OpenAI cache_write_tokens for prompt cache creation billing by @devin-ai-integration[bot] in #34046
- fix(proxy): restore atomic user upsert when adding team members by @yuneng-berri in #34457
- chore(ci): promote internal staging to main by @yuneng-berri in #34450
- fix(ui): keep cache leakage time range picker inline at narrow widths by @tin-berri in #34439
- feat(ui): show in the log drawer and session sidebar when an auto-router served a request by @tin-berri in #34434
- refactor(ui): migrate memory page to shadcn by @yuneng-berri in #34366
- refactor(ui): migrate budgets, skills, ui-theme to shadcn by @yuneng-berri in #34465
- refactor(ui): migrate access-groups, vector-stores, organizations to shadcn by @yuneng-berri in #34466
- refactor(ui): migrate logging-and-alerts, caching, policies to shadcn by @yuneng-berri in #34468
- feat(ui): standalone /connect route for MCP OAuth, decoupled from Chat UI flag by @tin-berri in #34334
- refactor(ui): migrate mcp-servers, tag-management, tool-policies to shadcn by @yuneng-berri in #34469
- test(e2e): pin the a2a bridge agent's Anthropic key so message/send works by @mubashir1osmani in #34512
- fix(guardrails/model_armor): handle None metadata in post_call _process_response (#34390) by @devin-ai-integration[bot] in #34405
- feat(anthropic): add Claude Opus 5 by @mateo-berri in #34518
- chore(ci): promote internal staging to main by @yuneng-berri in #34519
- test(a2a): assert the property agent returns listings, not just non-empty text by @devin-ai-integration[bot] in #34515
- fix(logging): stop scheduling sync failure_handler concurrently with async_failure_handler by @yassin-berriai in #34306
- fix(vertex): incrementally parse accumulated Gemini stream JSON to prevent multi-value wedge by @yassin-berriai in #34320
- test: replace deprecated gpt-5-codex with gpt-5.3-codex by @yuneng-berri in #34520
- fix(gateway): install bedrock-realtime extra for Nova Sonic realtime by @mubashir1osmani in #34426
- feat(proxy): add SAML 2.0 SSO for the admin UI by @yassin-berriai in #31429
- feat(guardrails): add run_in_parallel opt-in for concurrent pre_call and post_call guardrails by @noahnistler in #33770
- fix: handle explicit outputInfo: null in Vertex AI batch response by @yucheng-berri in #34473
- fix(otel): keep an MCP tool call in one trace, anchored to its own request by @yassin-berriai in #34537
- fix(ui): keep a key's MCP toolsets when saving an edit by @tin-berri in #34452
- fix(ui): bind key duration input to one Form.Item so pre-filled expiry submits by @ryan-crabbe-berri in #34521
- feat(ui): migrate the Create Organization form to shadcn and react-hook-form by @ryan-crabbe-berri in #34552
- refactor(ui): derive the dashboard object_permission type from the generated schema by @tin-berri in #34454
- test(e2e): cover MCP access-group tool selection at key creation by @mubashir1osmani in #34480
- test: remove tests that mutation analysis proved assert nothing by @yuneng-berri in #34475
- fix(ui): keep entity usage tabs aligned with their panels by @yuneng-berri in #34573
- fix(guardrails): stop reporting a no-op guardrail as applied on passthrough by @tin-berri in #34411
- fix(proxy): return 400 instead of 500 for chat completions without messages by @devin-ai-integration[bot] in #34547
- fix(guardrails): keep guardrail information in spend logs when the caller sends its own metadata by @tin-berri in #34458
- fix(responses): strip include_usage from stream_options instead of dropping the param by @devin-ai-integration[bot] in #34549
- fix(guardrails): add /v1/messages support for Straiker plugin by @yucheng-berri in #34548
- fix(proxy/batches): resolve managed unified input_file_id to storage_url with ownership check before dispatch by @yucheng-berri in #34474
- fix(guardrails): derive tokens_saved when Headroom compression service omits it by @tin-berri in #34578
- refactor(ui): migrate routing groups table onto the shared DataTable by @yuneng-berri in #34571
- fix(proxy): attribute org spend for team-linked credentials minted without org_id by @ryan-crabbe-berri in #34577
- fix(proxy/batches): make managed-file resolution additive, restore fall-back for missing-row and lookup errors by @yucheng-berri in #34584
- fix(bedrock-mantle): backfill usage on non-streaming /v1/messages responses by @devin-ai-integration[bot] in #34446
- fix(proxy): cap /v1/tool/spend window at 30 days and bound every SpendLogs read by @tin-berri in #34582
- feat(passthrough): record cost and usage reported by the upstream target by @yuneng-berri in #34590
- fix(logs): scope and bound the End User filter on the logs page by @yuneng-berri in #34579
- feat(ui): deep-link virtual key detail view via ?key= query param by @ryan-crabbe-berri in #34591
- revert(ui): return Models + Endpoints tabs to in-memory routing, keep the ?model drill-in by @ryan-crabbe-berri in #34629
- fix(proxy): merge model-level guardrails before pre_call_hook by @hclsys in #29654
- fix(router): don't cool down parent deployment on advisor sub-call failure by @devin-ai-integration[bot] in #33792
- test(e2e): cover /vllm chat passthrough against a hosted backend by @mubashir1osmani in #34432
- test(e2e): point four suites at models the providers still serve by @mubashir1osmani in #34567
- test(e2e): make the bedrock guardrail test match the guardrail it points at by @mubashir1osmani in #34568
- fix(otel): stamp an MCP tool failure on the request that carried it by @yassin-berriai in #34551
- test(e2e): set reasoning_effort=none for gpt-5.6 chat tool calls by @mubashir1osmani in #34569
- test(e2e): cover /v1/images/edits by @mubashir1osmani in #34476
- chore(deps): bump gitpython and postcss to advisory-clear versions by @yuneng-berri in #34634
- fix(proxy): hash caller-supplied key in key update audit log object_id by @yucheng-berri in #34632
- test(e2e): cover /openai chat passthrough cost logging by @mubashir1osmani in #34470
- fix(proxy): global max_budget ignores budget_duration; enforce against the resettable proxy budget row by @ryan-crabbe-berri in #33732
- fix(mcp): use a toolset row's stored tool name as written by @tin-berri in #34559
- fix(auth): route JWT default-team into memberships instead of the create payload by @ryan-crabbe-berri in #33082
- ci: drop the docker SERVER_ROOT_PATH e2e job for a unit test by @devin-ai-integration[bot] in #34642
- test: stop bedrock tool acompletion tests from making real network calls by @ryan-crabbe-berri in #34644
- fix(proxy): stop litellm/proxy from shadowing installed packages on sys.path by @yassin-berriai in #34656
- fix(cost-optimization): swap methodology Collapse for a shadcn HoverCard by @tin-berri in #34598
- fix(ci): scope UI lint to the files a PR actually changed by @mateo-berri in #34600
- fix(mcp): stop leaking upstream server credentials in tool-call 403 by @tin-berri in #34340
- fix(batches): paginate managed batch list by unified_object_id cursor by @devin-ai-integration[bot] in #34192
- fix(e2e): stop tests from breaking the shared proxy for every suite after them by @mubashir1osmani in #34664
- fix(cost-optimization): anchor the savings line at a $0 range start by @tin-berri in #34453
- fix(bedrock): stop replaying expired Google OIDC tokens to STS on guardrail auth by @yucheng-berri in #34637
- chore: bump litellm-enterprise 0.1.51 -> 0.1.52, litellm-proxy-extras 0.4.80 -> 0.4.81 by @yuneng-berri in #34669
- chore(ui): rebuild Next.js build artifacts by @yuneng-berri in #34671
- fix(azure_ai): advertise 1M context window for Claude Opus 4.6+ on Foundry by @devin-ai-integration[bot] in #34556
- feat(mcp): send RFC 8707 resource indicators on upstream OAuth legs by @tin-berri in #34265
- fix(guardrails): resolve judge_model credentials via lazy Router lookup in llm_as_a_judge by @devin-ai-integration[bot] in #34509
- style(ui): match MCP Servers tabs to the dashboard's line tab pattern by @yuneng-berri in #34685
- fix(ui): center vertical toolbar dividers by @yuneng-berri in #34684
- fix(ui): restore the Add MCP Server dialog size and header spacing by @yuneng-berri in #34679
- fix(ui): truncate long team names in the models table team dropdown by @yuneng-berri in #34689
- fix(e2e/ui): resolve dashboard base URL from env instead of hardcoding localhost by @mubashir1osmani in #34739
- chore(deps): bump gitpython to 3.1.55 and brace-expansion to 5.0.8 by @yuneng-berri in #34798
- fix(guardrails): preserve cache_control breakpoints in compresr write-back by @tin-berri in #34660
- fix(install): pass an explicit Python version request to uv tool install by @tin-berri in #34750
- refactor(management): move the logs end-user filter onto /management/v1 by @yuneng-berri in #34691
- fix: match exact class in callback dedup so a custom subclass does not block a built-in logger by @yucheng-berri in #34804
- fix(prometheus): populate cache write token metrics for OpenAI-style usage by @yucheng-berri in #34803
- fix: backport the management/v1 end-user filter and four dashboard fixes onto rc/1.95.0 by @yuneng-berri in #34811
- chore(typing): clear 2.7k basedpyright Any errors across 15 hotspot files by @mateo-berri in #34745
- test(e2e): stop racing control-plane writes across the mcp, a2a, guardrail and passthrough suites by @mubashir1osmani in #34833
- fix(ui): validate default team values in Default User Settings by @ryan-crabbe-berri in #34815
- fix(proxy): sanitize per-key callback config out of logged metadata by @yuneng-berri in #32583
- fix(proxy): roll up tool spend daily instead of scanning SpendLogs by @tin-berri in #34675
- fix(responses_bridge): keep one chat completion id per stream and always stream completed responses by @devin-ai-integration[bot] in #34539
- fix(guardrails): compress content-parts messages in headroom guardrail (Anthropic traffic) by @tin-berri in #34586
- fix(router): release the pre-routing strategy slot when a deployment is replaced or deleted by @shivamrawat1 in #34564
- fix(guardrails): classify all 4xx HTTPException guardrail blocks as intervened by @devin-ai-integration[bot] in #33821
- chore: rebuild Admin UI bundle for release by @yuneng-berri in #34859
- test: unstale the reasoning-effort grid count and the responses bridge test by @yuneng-berri in #34868
- test(e2e): realign Admin UI specs with the MCP dialog and keyless landing by @yuneng-berri in #34870
- test(e2e): unblock the ui suite, fix the mcp registration race, park two known product bugs by @mubashir1osmani in #34853
- test(e2e): make MCP and prometheus e2e tests robust to data-plane sync lag by @ryan-crabbe-berri in #34854
- Fix cache leakage card layout to keep date picker on right by @tin-berri in #34885
- fix(gateway): route /a2a through the gateway component by @ryan-crabbe-berri in #34958
- fix(e2e): poll for both spend rows before asserting the cache-hit contract by @ryan-crabbe-berri in #34968
- test(e2e): skip passthrough headers test until stage can route custom paths to provider creds by @ryan-crabbe-berri in #34980
- feat(ui): mark Cost Optimization as beta in the left nav by @yuneng-berri in #34984
- fix(proxy): avoid DB outage during planned RDS IAM rotation by @mubashir1osmani in #34749
- chore(ci): promote internal staging to main by @yuneng-berri in #34864
- test(e2e): bound the post-/model/new servable wait at 40s by @yuneng-berri in #35020
- test(e2e): poll MCP tools across multi-worker lag (#35047) by @yuneng-berri in #35049
- chore(release): backport #35271 to rc/1.95.0 by @yuneng-berri in #35299
- chore(release): sync rc/1.95.0 with the v1.95.0-rc.1 main SHA by @yuneng-berri in #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 #35552
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...v1.95.0