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.91.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.91.0/cosign.pub \
ghcr.io/berriai/litellm:v1.91.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
- fix(proxy): gate team allowed_passthrough_routes to proxy admins by @ryan-crabbe-berri in #28097
- fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend by @mateo-berri in #28110
- fix(bedrock/cohere): send embedding_types as JSON array, not string by @ishaan-berri in #28172
- fix(tests): migrate realtime + rerank tests off shut-down upstream models by @yuneng-berri in #28191
- fix(caching): replay openai/responses bridge cache hits as chat streams by @Sameerlite in #28158
- Litellm oss staging by @Sameerlite in #28161
- feat(prometheus): add user_email and user_alias to user budget metrics by @Sameerlite in #28155
- test(callbacks): harden flaky proxy callback-leak detector by @yuneng-berri in #28195
- fix(bedrock): sanitize batch metadata to prevent Pydantic ValidationError by @mateo-berri in #28202
- fix(deepseek): use native /anthropic/v1/messages endpoint and sanitize tools by @mateo-berri in #28200
- feat(ui): add Interactions API endpoint to playground with SSE streaming by @Sameerlite in #28156
- fix(proxy): decode bytes and pass-through SSE for Google-native streamGenerateContent (#27444) by @Sameerlite in #28213
- refactor(bedrock/sagemaker): switch to lazy loading for response stre… by @harish-berri in #28189
- [Refactor] UI - Spend Logs: consolidate filter state and extract components by @ryan-crabbe-berri in #25847
- fix(tests): replace shut-down gpt-4o-audio-preview with gpt-audio-1.5 by @yuneng-berri in #28281
- chore(ci): bump versions by @yuneng-berri in #28287
- feat: propagate team_id and team_alias to all child OTEL spans by @yassin-berriai in #28273
- Day 0 support : Gemini 3.5 Flash by @Sameerlite in #28268
- Gemini managed agents support by @Sameerlite in #28270
- chore(ci): promote internal staging to main by @yuneng-berri in #28292
- feat(gemini): add gemini-3.1-flash-lite model cost map by @Sameerlite in #28320
- fix(spend_counter): seed Redis counter via SET NX to prevent cross-pod double-seed by @milan-berri in #27854
- fix(proxy): normalize batch file IDs before ManagedObjectTable write by @Sameerlite in #28339
- fix(router): use forwarded model_id for native Azure container IDs by @Sameerlite in #27921
- fix(ui): restore log filter loading indicator by @ryan-crabbe-berri in #28282
- test(e2e): migrate runner to uv, add All Proxy Models key test by @ryan-crabbe-berri in #28313
- feat(ui): team passthrough routes create parity + edit load fix by @ryan-crabbe-berri in #28098
- fix(mcp): JWT on tools/list and REST tools/call server resolution by @Sameerlite in #28227
- feat(interactions): migrate to Google Interactions API steps schema (May 2026) by @Sameerlite in #28153
- test(ui-e2e): admin key creation with a specific proxy model by @ryan-crabbe-berri in #28365
- fix(vertex_ai): omit function_call id on Vertex Gemini 3.5+ tool turns by @Sameerlite in #28324
- feat(mcp): allow native MCP OAuth support for cursor by @Sameerlite in #28327
- fix(interactions): never drop streamed text deltas; always emit terminal completion by @mateo-berri in #28394
- fix(proxy): expose Prisma idle/connect timeout + extra DB URL params by @yassin-berriai in #28395
- Litellm oss staging 1 by @Sameerlite in #28337
- fix: serialize guardrail_response to JSON in OTEL traces by @yassin-berriai in #28362
- chore(ci): merge dev branch by @yuneng-berri in #28314
- test(realtime): expect session.created as xAI realtime initial event by @yuneng-berri in #28424
- feat(tests): behavior-pinning harness + Key Tier-1 matrix by @yuneng-berri in #28321
- fix(proxy): hydrate wildcard discovery credentials (#28284) - CCI Run by @yuneng-berri in #28419
- Litellm oss staging 04 21 2026 2 by @Sameerlite in #26569
- chore(ci): merge dev branch by @yuneng-berri in #28290
- fix(vertex_gemma): strip
context_managementfrom request body by @mateo-berri in #28438 - fix(logging): recalculate cost after router retry failures by @milan-berri in #28476
- fix(otel): emit guardrail span on violation, surface status + categories by @yassin-berriai in #28364
- test(proxy): behavior-pinning matrix for team management endpoints by @yuneng-berri in #28441
- test(vertex_ai): tolerate transient 500 in google maps grounding test by @yuneng-berri in #28503
- fix(docker): restore npm to non_root builder image by @yuneng-berri in #28519
- chore(ci): bump deps by @yuneng-berri in #28524
- build(deps-dev): bump black to 26.3.1 and apply formatting by @yuneng-berri in #28525
- chore(deps): bump deps by @yuneng-berri in #28528
- test(e2e): forward LITELLM_LICENSE to UI e2e proxy by @ryan-crabbe-berri in #28398
- Add granian as a ASGI compliant web server. Provider better throughput stability, by @harish-berri in #26027
- Fix conflicts and UI by @Sameerlite in #28477
- Add error_description and hint for oauth flows by @Sameerlite in #28471
- feat(mcp): Add tool call and tool list support via UI for Oauth mcps by @Sameerlite in #28454
- feat(proxy): persist allowlisted OIDC claims in CLI SSO poll by @Sameerlite in #28463
- fix(responses): use OpenAI SSEDecoder for Responses API streaming by @Sameerlite in #28566
- Litellm oss staging 2 by @Sameerlite in #28582
- [internal copy of #28269] Codex cli jwt team alias by @mateo-berri in #28621
- fix(check_licenses): read PEP 639 license-expression metadata by @yuneng-berri in #28529
- test(proxy): behavior-pinning matrix for tier-2/3 key + team management endpoints by @yuneng-berri in #28620
- chore(test): remove dead old Playwright e2e suite by @ryan-crabbe-berri in #28632
- fix(sagemaker): send native Cohere embed payload to Cohere SageMaker endpoints by @milan-berri in #28613
- style: apply black formatting to fix lint CI (LIT-3274) (#28639) by @krrish-berri-2 in #28641
- fix(bedrock): decouple STS region from Bedrock aws_region_name by @milan-berri in #28245
- test(streaming): tolerate Vertex 429 wrapped in MidStreamFallbackError by @yuneng-berri in #28669
- feat(guardrails): add Microsoft Purview DLP guardrail by @Sameerlite in #24966
- fix(mcp): forward upstream initialize instructions on cold gateway init by @milan-berri in #28231
- chore(ci): promote internal staging to main by @yuneng-berri in #28680
- CI: copy of #25177 (OCI GenAI: embeddings, streaming/reasoning fixes, model catalog) by @mateo-berri in #28223
- Encrypt callback_vars in key/team metadata in DB by @Michael-RZ-Berri in #27141
- perf: reduce per-request and per-chunk overhead across Anthropic streaming hot paths by @yassin-berriai in #28289
- feat(azure): add Speech STT config support by @ishaan-berri in #27482
- test(proxy): phase-4 payload behavior pinning for tier-2/3 key + team management endpoints by @yuneng-berri in #28681
- feat(prometheus): emit per-token-type detail metrics (LIT-3220) (#28372) by @ishaan-berri in #28378
- fix(otel): stamp http.response.status_code on all error responses by @ryan-crabbe-berri in #28405
- chore(ui): build ui by @yuneng-berri in #28707
- fix(helm): drop main- prefix from default image tag by @yuneng-berri in #28710
- test(model_prices): allow audio_transcription_config in schema by @yuneng-berri in #28708
- chore(ci): promote internal staging to main by @yuneng-berri in #28709
- fix(team): refresh team cache on team_model_add/delete (LIT-3244) by @yuneng-berri in #28683
- fix(ui/add-model): stop vertex_ai-anthropic_models from leaking into Anthropic dropdown by @ryan-crabbe-berri in #28723
- Fix spend logs v2 route permissions by @ryan-crabbe-berri in #28705
- fix(proxy): Bedrock Knowledge Base pass-through: preserve SigV4 headers and signed request body by @milan-berri in #27526
- chore(tests): migrate Bedrock CI to AWS account 941277531214 by @mateo-berri in #28728
- fix(otel): export SERVER span on management-endpoint success without http_request by @yassin-berriai in #28794
- chore(ci): merge dev branch by @yuneng-berri in #28801
- chore(ci): merge dev branch by @yuneng-berri in #28657
- fix(ui): show 2-decimal precision for max_budget on key overview by @ryan-crabbe-berri in #28809
- feat(proxy): allow
llm_api_routesvirtual keys to list MCP servers by @ryan-crabbe-berri in #28442 - chore(ci): merge dev branch by @yuneng-berri in #28807
- fix(team): keep team_alias cache in sync on _cache_team_object writes by @yuneng-berri in #28737
- chore(ci): merge dev branch by @yuneng-berri in #28822
- ci: daily oss-agent-shin canonical branch by @ishaan-berri in #28829
- test(proxy): add harness for proxy_server.py behavior-pinning by @yuneng-berri in #28827
- feat(openai): apply regional-processing cost uplift for EU/US data residency by @mateo-berri in #28626
- chore(admin-ui): regenerate static export with trailingSlash: true by @mateo-berri in #28112
- fix(azure): preserve AD token refresh in v1 OpenAI client path by @mateo-berri in #28627
- fix(ui): route API Reference back to query-param page by @ryan-crabbe-berri in #28726
- fix(model-edit): allow clearing custom pricing on wildcard models by @ryan-crabbe-berri in #28719
- fix(tests/vcr): make Redis cassette cache replay deterministically (zero VCR misses on consecutive runs) by @mateo-berri in #28826
- fix(proxy): strip LiteLLM policy tracking from OpenAI batch metadata by @shivamrawat1 in #28425
- Litellm OpenAI double prefix bug by @shivamrawat1 in #28661
- Litellm oss staging 250526 by @Sameerlite in #28770
- fix(bedrock): align toolUse/toolSpec names and allow hyphens by @Sameerlite in #28874
- fix(realtime): send TEXT frames and valid guardrail session.update by @Sameerlite in #28848
- fix(mcp): extend key access-group union to MCP servers by @ryan-crabbe-berri in #28890
- fix(galileo): support hosted v2 spans API and string output extraction by @Sameerlite in #28771
- fix(proxy): exclude proxy_server_request from its own body snapshot by @michelligabriele in #28618
- [Feat] Add tool calling support for gemini and vertex ai live api by @Sameerlite in #26590
- refactor(ui): remove dead App Router scaffolding in (dashboard)/* by @ryan-crabbe-berri in #28891
- fix(docker): use system Node in componentized builders + retry apk add by @yassin-berriai in #28888
- docs(agents): require consent before writing new third-party names by @yuneng-berri in #28908
- refactor(ui): extract auth state into AuthContext by @ryan-crabbe-berri in #28910
- fix(mcp): resolve team.access_group_ids → MCP servers by @ryan-crabbe-berri in #28997
- test(ui): e2e cover team model edit + admin identity in navbar by @ryan-crabbe-berri in #28652
- test(e2e): cover add-fallback flow in Router Settings by @ryan-crabbe-berri in #29069
- test(e2e): cover Team-BYOK add-model flow as proxy admin by @ryan-crabbe-berri in #29068
- fix(containers): record ownership for service-account keys + fix Prisma Json serialization by @Sameerlite in #28990
- test(e2e): cover add-MCP-server flow via discovery → custom form by @ryan-crabbe-berri in #29070
- test(e2e): cover AI Hub make-public flow and public model_hub_table by @ryan-crabbe-berri in #29071
- [internal copy of #28877] feat: add support for claude code goal mode for bedrock opus output config by @mateo-berri in #28898
- feat(guardrails): wire apply_guardrail into proxy logging callbacks by @Sameerlite in #28970
- chore(ci): merge dev brach by @yuneng-berri in #29192
- perf(streaming): cut per-chunk overhead ~30% on Anthropic + Bedrock hot path by @yassin-berriai in #28720
- fix(proxy): enforce tag budgets for key-level tags by @Sameerlite in #29108
- fix(vertex-ai): use DB credentials in video handlers + implement Veo video edit by @Sameerlite in #29098
- fix(datadog): drain cost-management queue + opt-in FinOps tag allowlist by @michelligabriele in #28487
- feat(helm): split per-component ServiceAccounts for gateway, backend, and UI by @yassin-berriai in #28712
- chore(ci): bump deps (#29208) by @yuneng-berri in #29226
- fix(tests/vcr): mint Google OAuth tokens live to prevent stale-token replay by @yuneng-berri in #29229
- chore(cookbook): bump Go directive to 1.26.3 in gollem example by @yuneng-berri in #29234
- chore(ci): bump version by @yuneng-berri in #29242
- feat(anthropic): add Claude Opus 4.8 and prune reasoning-effort flags by @mateo-berri in #29238
- chore(ci): promote internal staging to main by @yuneng-berri in #29243
- fix(ci): restore real Bedrock batch S3 bucket/role in oai_misc_config by @mateo-berri in #29245
- fix(guardrails): persist disable_global_guardrails on keys by @ryan-crabbe-berri in #29233
- test(e2e): cover Team Admin view + member + key flows by @ryan-crabbe-berri in #29072
- docs: hand-written CLAUDE.md; remove AGENTS.md, point GEMINI.md at it by @mateo-berri in #29252
- fix(teams): expose keys_count on /v2/team/list and wire UI Resources badge by @michelligabriele in #28502
- fix(anthropic): stop injecting unsupported output_config.effort=xhigh for Claude Code on Sonnet/Opus 4.6 by @mateo-berri in #29304
- test(e2e): cover Internal Viewer nav, key, and team-info gating by @ryan-crabbe-berri in #29075
- test(e2e): cover Internal User key modal, team info, key page by @ryan-crabbe-berri in #29074
- test(e2e): cover navbar Logout flow as proxy admin by @ryan-crabbe-berri in #29076
- fix(mcp): resolve key.access_group_ids → MCP servers (ungated) by @ryan-crabbe-berri in #29195
- fix(router): enforce deployment budgets for dynamically added models by @Sameerlite in #29273
- fix(proxy): map stripped batch body.model to proxy alias for auth by @Sameerlite in #29264
- feat(mcp): support stateless and stateful clients via session-id routing by @Sameerlite in #26857
- fix(bedrock): support tool search results + chat annotations by @Sameerlite in #29120
- fix(mcp): ignore stale ids on key save by @Sameerlite in #29128
- feat(a2a): well-known agent-card discovery + LangGraph Platform mode by @Sameerlite in #28860
- fix(proxy): link passthrough success spans to the SERVER root OTEL span by @ryan-crabbe-berri in #29315
- [internal copy of #29089] fix: duplicate claude code traces by @mateo-berri in #29311
- feat(otel): typed semconv-aligned OpenTelemetry instrumentation by @yassin-berriai in #28909
- tests(proxy_server): surface current behavior in tests by @yuneng-berri in #29309
- test(e2e): cover Internal User create-key flow when in no teams by @ryan-crabbe-berri in #29083
- test(e2e): assert internal-user navbar identity is scoped to that user by @ryan-crabbe-berri in #29077
- feat(otel): add team_metadata, http.route, and model names to inference spans by @yassin-berriai in #29319
- feat(context_management): compact_20260112 polyfill for non-Anthropic providers by @Sameerlite in #28868
- feat(enterprise): add RESEND_FROM_EMAIL for self-hosted Resend sends by @shivamrawat1 in #28830
- Revert Bedrock CI back to the reactivated AWS account (888602223428) by @mateo-berri in #29326
- fix(mcp): preserve source_url in GET /v1/mcp/server list responses by @shivamrawat1 in #29249
- fix(mcp): preserve omitted fields on PUT /v1/mcp/server partial updates by @shivamrawat1 in #29253
- fix(ci): make litellm_internal_staging green (logging test + Bedrock Opus 4.7 self-heal) by @mateo-berri in #29344
- refactor(proxy/auth): normalize Bearer prefix in safe-hash helper by @yuneng-berri in #29343
- test(reasoning-effort-grid): cover Claude Opus 4.8 across provider routes by @mateo-berri in #29327
- fix(guardrails): return HTTP 400 for litellm content filter blocks by @shivamrawat1 in #28418
- fix(proxy): restrict vector store index create/delete to proxy admins by @shivamrawat1 in #29202
- feat(pass_through): extend passthrough_managed_object_ids to Azure by @Sameerlite in #29160
- fix(proxy): enforce allowed_passthrough_routes for auth=true pass-thr… by @shivamrawat1 in #29256
- feat(mcp/auth): additive key access-group grants + opt-in member assignment by @ryan-crabbe-berri in #29313
- fix(reset_budget): write only {spend, budget_reset_at} and stop pre-zeroing counter by @yuneng-berri in #29358
- test(e2e): cover PROXY_LOGOUT_URL redirect on Logout by @ryan-crabbe-berri in #29080
- fix(ui): break logout redirect loop across dev and proxy origins by @yuneng-berri in #29360
- fix(openai-moderation): wire streaming flags through to unified dispatcher by @michelligabriele in #27324
- chore(ci): build ui by @yuneng-berri in #29366
- fix(v3 limiter): cap no-max_tokens TPM floor at smallest configured limit by @michelligabriele in #28805
- fix(e2e): tolerate trailing slash in SERVER_ROOT_PATH login redirect by @yuneng-berri in #29369
- chore(deps): bump deps by @yuneng-berri in #29373
- chore(ci): promote internal staging to main by @yuneng-berri in #29372
- test(responses): bump deprecated gemini-3-pro-preview to gemini-3.1-pro-preview by @mateo-berri in #29433
- fix: map mistral/ministral-8b-latest in model price map by @mateo-berri in #29453
- fix(datadog): split oversized batches on 413 instead of re-queueing forever by @yassin-berriai in #29444
- feat(otel): allowlist team_metadata sub-keys promoted to baggage by @yassin-berriai in #29442
- fix: stop use_chat_completions_api flag from leaking into provider request body by @mateo-berri in #29447
- fix(anthropic, fireworks): inline legacy $ref defs in tool schemas by @milan-berri in #28646
- fix(proxy): omit OpenAI [DONE] on google-genai streamGenerateContent by @Sameerlite in #29426
- ci(release): create stable/X.Y.x line branch on X.Y.0 tags by @yuneng-berri in #29457
- fix(vector-stores): support engines URL for Vertex AI Search by @ryan-crabbe-berri in #27885
- fix(ui): render caller-supplied filter options in caller order by @ryan-crabbe-berri in #29462
- fix(batches): skip unnecessary batch input file reads by @Sameerlite in #29114
- docs(agents): clarify when to create new test files by @Sameerlite in #29472
- Litellm OSS Staging by @Sameerlite in #29161
- fix(mcp): clear allowed_tools and tool overrides on MCP server edit by @Sameerlite in #29411
- Litellm OSS Staging 010626 by @Sameerlite in #29422
- fix(ci): make CircleCI rerun-failed-tests collect tests when 2+ test files fail by @mateo-berri in #29475
- feat(a2a): watsonx Orchestrate agent provider by @Sameerlite in #29410
- fix(azure_ai): strip tool-level extra fields on 400 and retry by @Sameerlite in #29479
- fix(docs): remove fixed dimensions from README hero image by @mateo-berri in #29496
- Litellm oss staging by @Sameerlite in #29492
- fix: small CLAUDE.md nits by @mateo-berri in #29504
- Add MCP semantic conventions to otelv2 by @yassin-berriai in #29468
- fix(passthrough): emit otel guardrail span when a guardrail blocks by @yassin-berriai in #29470
- fix(proxy): strip NUL bytes from spend log payloads to prevent PostgreSQL 22P05 by @milan-berri in #29515
- [internal copy of #28008] Support MCP OAuth passthrough and issuer-scoped JWT auth by @mateo-berri in #28356
- feat(vector-stores): forward per-request params to Vertex AI Search by @ryan-crabbe-berri in #29459
- feat(proxy): add per-MCP-server RPM rate limiting for keys and teams by @Sameerlite in #29482
- fix(tests): drop module-level test calls that break local_testing collection by @mateo-berri in #29520
- feat(agents): add LangFlow agent provider with A2A session bridging by @Sameerlite in #28963
- fix(ui/agents): make A2A skill tags enterable and validated by @ryan-crabbe-berri in #29512
- [internal copy of #29232] feat: route future Claude models to Anthropic provider via pattern matching by @mateo-berri in #29239
- fix(tests): drop import-time completion call in test_register_model by @mateo-berri in #29521
- test: stabilize batch VCR coverage and stop live upload/network leaks by @mateo-berri in #29477
- [internal copy of #29003] fix(vertex_ai): use user-supplied api_base as is for Model Garden OpenAI-compat path by @mateo-berri in #29530
- feat(proxy): native /health/drain preStop hook for graceful shutdown by @yassin-berriai in #29439
- fix(auth): preserve 401 status for expired JWTs in OTel traces by @ryan-crabbe-berri in #29510
- fix(otel): capture 401 error details in management endpoint spans by @ryan-crabbe-berri in #29535
- test(proxy/utils): pin bottom-of-file helper behavior by @yuneng-berri in #29509
- test(proxy/utils): pin PrismaClient and spend-update behavior by @yuneng-berri in #29488
- test(proxy/utils): pin ProxyLogging behavior by @yuneng-berri in #29485
- fix: missing span for guardrail passthrough by @yassin-berriai in #29552
- fix(auth): let internal users view search tools by @ryan-crabbe-berri in #29542
- fix: missing mcp otel attributes by @yassin-berriai in #29554
- fix(proxy): resolve managed video model ids for auth by @shivamrawat1 in #29545
- fix(key_generate): allow team members to create keys on org-scoped teams by @milan-berri in #29310
- test(pass-through): move Gemini pass-through tests to gemini-3.1-flash-lite by @mateo-berri in #29595
- Litellm oss staging 030626 by @Sameerlite in #29578
- Fix : a2a bugs 030626 by @Sameerlite in #29566
- [internal copy of #29533] fix(anthropic/adapter): emit thinking block for reasoning_content-only streaming chunks by @mateo-berri in #29600
- ci: reproduce default-Windows wheel install to guard MAX_PATH by @yuneng-berri in #29597
- fix(vertex): strip output_config.effort for Vertex Claude models that reject it (Haiku 4.5) by @mateo-berri in #29585
- Litellm websocket improvements by @Sameerlite in #29563
- feat(arize/phoenix): OpenInference rendering parity — tool_calls, cost, passthrough I/O, session/user, multimodal, cache tokens by @milan-berri in #28800
- [internal copy of #29550] fix: passthrough endpoints duplicate logs by @mateo-berri in #29598
- fix(ci): keep coverage rename green when a parallel node runs no tests by @mateo-berri in #29608
- test(vcr): close out the remaining VCR live-call leaks by @mateo-berri in #29603
- fix(key_generate): exempt UI/CLI session tokens from the budget ceiling for team keys by @yuneng-berri in #29612
- fix(realtime): allow null transcripts in stream logging payloads by @milan-berri in #29625
- build(ui): migrate eslint to flat config + bump eslint-config-next to 16 by @ryan-crabbe-berri in #29626
- fix(key_generate): scope session-token team-key budget exemption to caller-supplied team_id by @yuneng-berri in #29641
- fix(proxy): disable proxy buffering on streaming SSE responses by @mateo-berri in #29557
- fix(mcp): gate /public/mcp_hub strictly on litellm.public_mcp_servers by @michelligabriele in #27764
- ci(ui): frontend-lint job enforcing prettier + eslint on changed files by @ryan-crabbe-berri in #29633
- fix(gemini): googleSearch + server-side tools and googleMaps JSON schema by @Sameerlite in #29582
- fix(proxy): passthrough 404 when SERVER_ROOT_PATH is set by @Sameerlite in #29658
- fix(gemini-realtime): use GA event names for Pipecat 1.3.x compatibility by @Sameerlite in #29662
- Litellm oss staging 040626 by @Sameerlite in #29671
- style(ui): prettier formatting pass over the dashboard by @ryan-crabbe-berri in #29622
- chore: ignore prettier dashboard reformat in git blame by @ryan-crabbe-berri in #29695
- fix(helm): Enable Backend Deployment to mount Gateway config.yaml by @tin-berri in #29605
- [internal copy of #29277] fix(proxy): add default=None to LiteLLM_TeamMembership.litellm_budget_table by @mateo-berri in #29684
- test: make custom_tokenizer proxy tests hermetic by @yuneng-berri in #29643
- test(proxy): stop running real-DB tests in GitHub Actions unit jobs by @ryan-crabbe-berri in #29700
- chore(ui): remove the bare-fetch lint rule by @ryan-crabbe-berri in #29712
- Litellm jwt mapping virtualkeys by @shivamrawat1 in #28510
- refactor(ui): shared HTTP client + location-pinned fetch() lint rule by @ryan-crabbe-berri in #29723
- fix(proxy): stop team BYOK model name corruption on model edit by @yuneng-berri in #29731
- [internal copy of #29511] feat(guardrails): add sensitive data routing to on-premise models by @mateo-berri in #29531
- fix(proxy/hooks): populate llm_provider on internal rate-limit errors by @mateo-berri in #27707
- fix(vertex/anthropic): handle namespace tools and strip client_metadata for codex compatibility by @Sameerlite in #29489
- Support OAuth M2M for Databricks Apps A2A agents by @mateo-berri in #29586
- fix: small CLAUDE.md nit by @mateo-berri in #29749
- fix(anthropic): route Claude Opus 4.8 through adaptive thinking by @mateo-berri in #29702
- fix(proxy): persist oauth2_flow on MCP server registration by @michelligabriele in #29690
- [internal copy of #27491] fix(realtime): Fix Realtime Audio Token Cost Tracking by @mateo-berri in #29722
- fix(galileo): use ingest traces API and standard logging payload by @Sameerlite in #29651
- fix(auth): expand all-team-models sentinel in can_key_call_model for batch validation by @Sameerlite in #29746
- test(vcr): stop refreshing cassette TTL on read so cassettes lapse after 24h by @mateo-berri in #29784
- test(ci): record/replay OpenAI image gen so the spend E2E isn't outage-bound by @mateo-berri in #29787
- fix(ui): route MCP playground auth by oauth2 mode instead of token_url by @tin-berri in #29714
- refactor(ui): centralize proxy base URL resolution into tested resolver by @ryan-crabbe-berri in #29793
- Litellm oss staging 050626 by @Sameerlite in #29774
- test(google): add google-genai SDK proxy integration tests by @Sameerlite in #29781
- fix(jwt): use resolved DB user_id for spend on legacy email match by @milan-berri in #29217
- feat(ui): generate dashboard API types from the proxy OpenAPI spec by @ryan-crabbe-berri in #29816
- fix(proxy): drop deleted team BYOK model name from team.models by @yuneng-berri in #29820
- feat(mcp): per-server env vars with global + per-user scopes by @mateo-berri in #28917
- refactor(ui): route behavior-preserving networking calls through apiClient by @ryan-crabbe-berri in #29806
- fix(mcp): persist Tools-tab MCP OAuth token to DB by @tin-berri in #29809
- fix(ui): require new expiration when regenerating an expired key by @milan-berri in #29838
- refactor(ui): route query-building networking calls through apiClient by @ryan-crabbe-berri in #29815
- Make the image-gen record/replay proxy report cache mode and per-request HIT/MISS by @mateo-berri in #29802
- feat(proxy): hot-reload .env in dev when running with --reload by @mateo-berri in #29783
- fix(ui): stop MCP playground tool calls from sending twice by @tin-berri in #29821
- feat(fal_ai): add Nano Banana / Gemini 2.5 Flash Image generation support by @mateo-berri in #29798
- Title: Fix managed batch cancel credential resolution by @shivamrawat1 in #29734
- Title: fix(proxy): resolve vector store file list credentials from team deployments by @shivamrawat1 in #29739
- refactor: convert AWS and GCP Terraform stacks into reusable modules … by @yassin-berriai in #28103
- chore(ui): build ui for release by @yuneng-berri in #29853
- fix(terraform/gcp): prompt for image_registry in DeployStack one-click by @yassin-berriai in #29852
- fix(terraform/gcp): abandon SQL user on destroy by @yassin-berriai in #29855
- Extend the record/replay proxy to chat, embeddings, moderations, rerank, and Anthropic by @mateo-berri in #29847
- chore(deps): bump deps by @yuneng-berri in #29860
- chore(ci): promote internal staging to main by @yuneng-berri in #29861
- fix: 400 on Anthropic context overflow; seed identity on failed auth by @yassin-berriai in #29848
- chore(ci): promote internal staging to main by @yuneng-berri in #29862
- fix(responses-bridge): map system-only chat request to system input item by @milan-berri in #29817
- feat(bedrock): forward strict and additionalProperties to Converse toolSpec by @mateo-berri in #29814
- fix(mcp): highlight MCP cards red when the logged-in user is missing per-user env vars by @mateo-berri in #29856
- feat(ui): add budget duration to edit team member form by @ryan-crabbe-berri in #29717
- fix(ui): make workflow runs page fill full width by @yuneng-berri in #29868
- feat: standardize rate limit errors with category, rate_limit_type, model, and llm_provider fields by @mateo-berri in #27687
- fix(ui): default guardrails page to the Guardrails tab by @yuneng-berri in #29872
- docs(readme): add Deploy on AWS/GCP Terraform section and fix deploy button rendering by @mateo-berri in #29879
- refactor(bedrock): build Converse toolSpec via a BedrockToolSpec dict subclass by @mateo-berri in #29869
- feat(litellm): add models and repository layers by @yassin-berriai in #29686
- feat(ui): include internal routes in the dashboard's generated OpenAPI types by @ryan-crabbe-berri in #29885
- feat(proxy): publish /v2/model/info in Swagger OpenAPI spec by @Sameerlite in #29900
- refactor(ui): single source of truth for migrated-page routing by @ryan-crabbe-berri in #29949
- fix(ui/model-hub): render provider icons on the public model hub by @yuneng-berri in #29958
- fix(ui): keep create guardrail modal open on outside click by @yuneng-berri in #29871
- fix(ui): label default key type as "Full Access" on key edit page by @yuneng-berri in #29870
- fix(ui): unify migrated-route URLs and migrate the API Reference page by @ryan-crabbe-berri in #29953
- fix(mcp): let non-creator users OAuth into OBO-mode MCP servers from the Tools page by @tin-berri in #29867
- Litellm oss staging 080626 by @Sameerlite in #29932
- feat(galileo): add health check support for UI callback test by @Sameerlite in #29908
- fix(model-management): allow deleting a BYOK model after its team is deleted by @yuneng-berri in #29875
- feat(jwt-auth): opt-in fallback to DB team on unresolved JWT claim by @milan-berri in #28913
- fix(team_endpoints): don't block /team/update on unchanged team budget by @milan-berri in #29525
- fix(fireworks): enable tool calling for glm-5p1 in model cost map by @milan-berri in #29697
- fix(vertex): propagate Vertex AI metadata in streaming success callbacks by @Sameerlite in #29899
- fix(ui): show team projects to internal users on key creation by @milan-berri in #28855
- build(deps): bump pyjwt to 2.13.0 and ws override to 8.20.1 by @yuneng-berri in #29982
- fix(team-management): delete a team's BYOK models when the team is deleted by @yuneng-berri in #29977
- feat(vantage): include organization metadata in FOCUS Tags export by @milan-berri in #28184
- fix(guardrails): read CrowdStrike AIDR identity from both metadata bags by @yuneng-berri in #29991
- fix(mcp): mirror upstream token lifetime instead of forcing a 1h OBO expiry by @tin-berri in #29951
- feat(azure_ai): add MAI-Image-2.5 image generation support by @Sameerlite in #29688
- fix(mcp): load MCP tool configuration tools via the OBO/passthrough-aware GET path by @tin-berri in #29960
- fix(team): reserve team budget raises for proxy admins on /team/update by @milan-berri in #30030
- test(ui): data-driven App Router migration E2E smoke (default + server-root-path) by @ryan-crabbe-berri in #29974
- fix(proxy): extend response headers hook to streaming, TTS, image gen, and pass-through by @michelligabriele in #24232
- chore(ui): remove dead App Router route stubs under (dashboard) by @ryan-crabbe-berri in #30045
- fix(ui/mcp): reset OAuth state on create-server modal close so a prior server's token no longer leaks into the next add-server session by @tin-berri in #30000
- fix(mcp): allow team access-group grants in OAuth authorize/token access check by @tin-berri in #30041
- docs(security): require a reproduction video for vulnerability reports by @yuneng-berri in #30063
- feat(ui): add admin flag to disable in-product UI nudges for everyone by @ryan-crabbe-berri in #29796
- chore(ui): remove dead dashboard files and unused dependencies by @ryan-crabbe-berri in #30047
- fix(proxy): authorize batch files using upload target_model_names (LIT-3593) by @Sameerlite in #30009
- Add Claude Fable 5 across Anthropic, Bedrock, Vertex AI, and Azure AI by @mateo-berri in #30064
- Add Claude Fable 5 cost map entries (data-only hotfix for the hosted map) by @mateo-berri in #30076
- fix(caching): restore stored prompt_tokens on embedding cache hits instead of recomputing by @michelligabriele in #30046
- Litellm oss 090626 by @Sameerlite in #30021
- fix(proxy): self-heal startup/reload prisma reads on engine disconnect by @michelligabriele in #28803
- chore(ui): make knip recognize .mjs scripts and openapi-typescript by @ryan-crabbe-berri in #30052
- fix(register_model): preserve built-in cache pricing when registering custom overrides under unmapped keys by @yassin-berriai in #30044
- [internal copy of #28007] Fix/gcp model garden streaming by @mateo-berri in #28363
- feat(cli): per-agent
lite claude/codex/opencodecommands that wrap coding agents through the proxy by @mateo-berri in #29850 - fix(callbacks): forward callback_settings to callback initializers and guard consumers against non-dict values by @yuneng-berri in #30161
- fix(mcp): drop orphaned per-user credential rows when an MCP server is deleted by @tin-berri in #30141
- fix(proxy): recover from cached-plan errors by reconnecting the Prisma client by @yassin-berriai in #29983
- feat(proxy): add option to disable server-side prepared statements for DB lookups by @yassin-berriai in #29984
- fix(release): stop backport releases from overwriting the latest badge by @yuneng-berri in #30005
- feat: add conventional commits and coding guidelines by @mateo-berri in #30159
- fix(proxy): return 5xx on DB infra errors during auth; reserve 401 for genuine auth failures by @yassin-berriai in #29986
- fix(ui): dev server 404s on migrated-page links because uiBase hardcodes /ui by @ryan-crabbe-berri in #30169
- refactor(ui): consolidate dashboard to one shell in the (dashboard) layout by @ryan-crabbe-berri in #30166
- fix(proxy): align /v1/model/info with router deployments by @Sameerlite in #30025
- fix: completion_cost AttributeError on streaming Anthropic web_search responses (#26153) by @ishaan-berri in #27346
- [internal copy of #30137] perf(realtime): eliminate redundant per-frame JSON work on OpenAI realtime relay by @mateo-berri in #30142
- feat(bedrock): aws_bedrock_project_id for bedrock-mantle project / workspace association by @mateo-berri in #30163
- chore(hooks): enforce Conventional Commits and Conventional Branches by @ryan-crabbe-berri in #30174
- feat(rate-limiter): allow opting out of v3 TPM reservation and Redis circuit breaker by @yassin-berriai in #30211
- feat(spend_logs): opt-in native Postgres partitioning for SpendLogs retention by @yassin-berriai in #29466
- feat(ui): migrate playground to path routing and colocate its files by @ryan-crabbe-berri in #30185
- feat(ui): migrate projects and access-groups to path routes by @ryan-crabbe-berri in #30226
- fix(proxy): coalesce NULL rollup metrics in aggregated daily-activity by @michelligabriele in #30151
- fix(anthropic_passthrough): resolve costing model from message_start chunk, litellm_params and model_group instead of 'unknown' by @yassin-berriai in #30160
- feat(ui): migrate budgets, workflows, and guardrails-monitor to path routes by @ryan-crabbe-berri in #30236
- feat(ui): migrate mcp-servers, search-tools, tag-management, vector-stores, and memory to path routes by @ryan-crabbe-berri in #30261
- fix(a2a): forward agent_extra_headers through completion bridge by @mateo-berri in #28277
- fix(gemini-live): forward audio buffer commit and correct Vertex PCM rate by @Sameerlite in #29946
- fix(proxy): skip double-wrapping unified batch output file ids on retrieve by @Sameerlite in #30011
- feat: litellm oss 110626 by @Sameerlite in #30202
- fix(docker): copy only runtime artifacts into the final image by @yuneng-berri in #30243
- feat(proxy): enforce key/team guardrails on bedrock passthrough routes by @Sameerlite in #30194
- feat(gemini): forward web search tools in image generation by @Sameerlite in #30119
- fix: bedrock mantle fixes by @Sameerlite in #30083
- feat(proxy): add require_managed_files setting for file uploads by @Sameerlite in #30186
- fix(mcp): honor server_id for REST tool calls with shared upstream URLs by @Sameerlite in #30184
- fix(responses): presidio PII masking for Azure WebSocket and streaming by @Sameerlite in #30003
- feat(passthrough): add configurable pass-through request timeouts by @Sameerlite in #30266
- fix(google_genai): preserve complete SSE events in Vertex/Gemini image streaming by @Sameerlite in #30270
- fix(proxy): populate access_via_team_ids on /v1/model/info by @Sameerlite in #30274
- chore(oss): litellm oss staging 120626 by @Sameerlite in #30292
- feat(ui): migrate policies, guardrails, prompts, tool-policies, and skills to path routes by @ryan-crabbe-berri in #30263
- feat(ui): migrate caching, cost-tracking, transform-request, ui-theme, and logs to path routes by @ryan-crabbe-berri in #30267
- fix(ui): gate dashboard layout on ui config load so deep links work under SERVER_ROOT_PATH by @ryan-crabbe-berri in #30312
- feat(ui): migrate admin-panel, logging-and-alerts, model-hub-table, and usage to path routes by @ryan-crabbe-berri in #30268
- fix(otel): cap metric attribute cardinality with include/exclude lists by @yassin-berriai in #30257
- fix(proxy): grace-period key rotation 401s; return deprecated-key lookup result directly by @yuneng-berri in #30327
- chore(deps): bump vitest, brace-expansion, pypdf and tornado by @yuneng-berri in #30220
- refactor(ui): remove unreachable /chat page by @ryan-crabbe-berri in #30178
- feat(ui): migrate agents and router-settings to path routes by @ryan-crabbe-berri in #30323
- feat: strengthen coding conventions in CLAUDE.md by @mateo-berri in #30333
- feat(ui): cut the users page over to the /ui/users path route by @ryan-crabbe-berri in #30334
- feat: ruff strict-rule suppressions baseline gate by @ryan-crabbe-berri in #30303
- feat(guardrails): add Cisco AI Defense integration (#28249) by @yassin-berriai in #30338
- chore(ui): remove dead UI components unreferenced by any page by @ryan-crabbe-berri in #30340
- ci: add osv-scanner lockfile scan workflow by @yuneng-berri in #30222
- fix(otel): record full error message on standard exception event in otel v2 by @yassin-berriai in #30380
- test(fireworks): mock whisper transcription tests instead of live calls by @yuneng-berri in #30391
- build(ui): pin esbuild to 0.28.1 via overrides by @yuneng-berri in #30390
- feat(ui): cut the organizations page over to the /ui/organizations path route by @ryan-crabbe-berri in #30336
- fix(proxy): support SMTP implicit SSL (port 465) by @yuneng-berri in #30395
- fix(mcp): default Linear MCP registry entry to streamable HTTP by @ryan-crabbe-berri in #30396
- fix(ui): stop Virtual Keys page from infinite render loop by @ryan-crabbe-berri in #30397
- fix(streaming): guard raise_on_model_repetition against empty choices by @shivamrawat1 in #30485
- feat(otel-v2): emit the 6 gen_ai.client.* metrics at parity with v1 by @yassin-berriai in #30326
- fix(mcp): drop phantom 401 span on delegated OAuth2 tool calls by @ryan-crabbe-berri in #30494
- feat(ui): cut the teams page over to the /ui/teams path route by @ryan-crabbe-berri in #30343
- fix(integrations): cap Anthropic cache_control injection at 4 blocks by @shivamrawat1 in #30480
- chore(codecov): add Batches, Videos, and Realtime components by @Sameerlite in #30517
- test(batches): move orphan tests into tests/test_litellm for CI coverage by @Sameerlite in #30510
- fix(guardrails): run pre_call hook once for model-level guardrails by @yassin-berriai in #30543
- fix(guardrails): stop re-initializing DB guardrails on every poll by @yassin-berriai in #30542
- chore(oss): litellm oss staging 150626 by @Sameerlite in #30463
- ci(lint): add blanket-noqa, dataclass-default, and unused-noqa Ruff rules by @mateo-berri in #30516
- ci: ratchet lint and type-check gates (ruff preview, ANN, mypy, basedpyright) by @mateo-berri in #30379
- fix(proxy): allow internal roles to access vector store CRUD routes by @shivamrawat1 in #30503
- fix(otel): stamp gen_ai.input/output.messages on v2 spans by @yassin-berriai in #30548
- fix(otel): export v2 gen_ai client metrics to the configured meter provider by @yassin-berriai in #30549
- fix(bedrock): preserve cache_control for ARN models in /v1/messages adapter by @mateo-berri in #29823
- fix: greatly increase basedpyright slack by @mateo-berri in #30563
- fix(budget): recompute budget_reset_at when budget_duration changes on /budget/update by @yassin-berriai in #30555
- fix(otel): accept UPPER_SNAKE_CASE OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT in v2 by @yassin-berriai in #30562
- chore(lint): remove PLR0915 too-many-statements ruff rule by @ryan-crabbe-berri in #30574
- ci(lint): ratcheted type-discipline gate (mutable collections, casts, guards, kwargs, suppressions) by @mateo-berri in #30500
- feat(proxy): add verification_uri_complete to CLI SSO device flow by @yassin-berriai in #30571
- chore: litellm oss staging160626 by @Sameerlite in #30527
- fix(guardrails): return 400 not 500 when AIM blocks a request by @ryan-crabbe-berri in #30573
- ci(lint): grandfather any-discipline with a per-file ratchet budget (50% headroom) by @mateo-berri in #30582
- fix(audio): don't override explicit response_format with verbose_json by @mateo-berri in #30599
- fix(anthropic): price and surface response service_tier in cost tracking by @mateo-berri in #30558
- feat: add dev and wildcard proxy configs for local testing by @mateo-berri in #30556
- fix(proxy): list public team model name in /v1/models by @ishaan-berri in #30588
- ci: drop mypy entirely, standardize type checking on basedpyright by @mateo-berri in #30648
- feat(guardrails): surface OpenAI moderation violation_categories on guardrail traces by @yassin-berriai in #30659
- fix(proxy): resolve list files credentials from team BYOK deployments by @shivamrawat1 in #30495
- feat(proxy): add --max_requests_before_restart_jitter to stagger worker restarts by @yassin-berriai in #30601
- fix(health): correct bedrock embedding health checks by @mateo-berri in #30583
- test: harden remaining pass-through CI flakes (image-gen spend poll, ruby assistants timeout) by @mateo-berri in #30685
- test(pass_through): harden vertex spendlog poll against transient empty reads by @mateo-berri in #30683
- fix(cost): stop non-string service_tier from silently dropping cost tracking by @mateo-berri in #30690
- feat(proxy): warn at startup when custom_auth skips common_checks enforcement by @tin-berri in #30665
- fix(pod_lock): release cron lock by matching async_set_cache JSON encoding by @yassin-berriai in #30600
- ci: run a local fake OpenAI endpoint instead of the shared Railway mock by @mateo-berri in #30695
- ci(windows): pin uv to Python 3.11 so it ignores the preinstalled 3.14 by @mateo-berri in #30704
- feat(ui): migrate models page to App Router path route by @ryan-crabbe-berri in #30677
- refactor(ui): remove orphaned pass-through-settings route by @ryan-crabbe-berri in #30692
- fix(cost): stop non-string response service_tier from dropping cost tracking by @yuneng-berri in #30706
- feat(agent-shin): automated PR/issue triage, low-quality auto-close, and review-gate label lifecycle by @mateo-berri in #30433
- chore: litellm oss 170626 by @Sameerlite in #30637
- fix(bedrock_mantle): add SigV4 fallback to chat completions auth by @mateo-berri in #30714
- feat(search): add TinyFish as search provider by @simantak-dabhade in #30634
- feat(ui): migrate old usage report to App Router path route by @ryan-crabbe-berri in #30694
- fix(proxy): enforce budgets against authoritative DB spend when the cross-pod counter is stale by @yassin-berriai in #30684
- chore(ci): remove Agent Shin pull_request_target workflows by @yuneng-berri in #30784
- chore: litellm oss staging by @Sameerlite in #30745
- ci(zizmor): also run on litellm_internal_staging by @yuneng-berri in #30789
- fix(test): drop references to removed Agent Shin workflows by @ryan-crabbe-berri in #30791
- chore: remove in-product survey and Claude Code feedback nudges by @ryan-crabbe-berri in #30773
- feat(ui): migrate api-keys landing to App Router path route by @ryan-crabbe-berri in #30699
- feat(proxy): configurable response headers and login-page hint by @yucheng-berri in #30792
- ci(zizmor): gate PRs on medium+ findings and clear existing ones by @yuneng-berri in #30797
- fix(proxy): use e.request_data for logging_obj in ModifyResponseException streaming passthrough by @mateo-berri in #30800
- chore: make pr template linear portion clearer by @mateo-berri in #30766
- chore(typing): add boto3/botocore stubs so basedpyright resolves the AWS SDK by @mateo-berri in #30815
- fix(otel): one v2 logger owns the global provider; scope tenant OTLP creds per exporter by @yucheng-berri in #30590
- fix(passthrough): recover output tokens for interrupted anthropic streams by @yassin-berriai in #30787
- fix(proxy): record partial spend on the failure row for interrupted streams by @yassin-berriai in #30788
- fix(ui): repoint dead usage guide link to cost tracking docs by @yuneng-berri in #30859
- fix(ui): warn that team models are deleted in the delete-team modal by @yuneng-berri in #29990
- feat(caching): add valkey-semantic cache backend and fix semantic cache scope keys by @yassin-berriai in #30675
- test(ui): isolate OldTeams delete-warning tests from leaked mock by @mateo-berri in #30871
- feat: add lint-gate target and truncation-proof summary to the strict ruff gate by @mateo-berri in #30877
- chore(ui): rebuild ui for release by @yuneng-berri in #30894
- chore(ci): bump deps by @yuneng-berri in #30899
- fix(watsonx): wrap string embedding input in array for WatsonX API by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/30897
- test: point router/completion/triton tests at the local fake OpenAI endpoint by @mateo-berri in https://github.com/BerriAI/litellm/pull/30900
- feat(sandbox): e2b code execution primitive by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/30898
- fix(ui): source api-keys identity from useAuthorized to stop "User ID is not set" by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30903
- chore(ui): rebuild ui by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30906
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30907
- fix(redis): prevent forcing SSLConnection when ssl=False in connection pool by @Jacopos311 in https://github.com/BerriAI/litellm/pull/30770
- fix(proxy): log UI setup failures instead of silently swallowing by @sarvesh1327 in https://github.com/BerriAI/litellm/pull/30819
- feat(auth): resolve caller identity once into a Principal at the auth seam by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30887
- feat(fireworks_ai): sync chat completions endpoint with full API surface by @mateo-berri in https://github.com/BerriAI/litellm/pull/30885
- feat: litellm plugin architecture v2 by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/30688
- feat(sandbox): code interpreter interceptor on the Responses API by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/30905
- refactor(exceptions): extract exception_type provider dispatch so basedpyright can analyze it by @mateo-berri in https://github.com/BerriAI/litellm/pull/30802
- refactor(streaming): extract chunk_creator dispatch so basedpyright can analyze it by @mateo-berri in https://github.com/BerriAI/litellm/pull/30793
- test(interactions): drop role from Interaction output fields to match Google spec by @tin-berri in https://github.com/BerriAI/litellm/pull/30986
- fix(mcp): stop exposing MCP server URLs on the AI Hub and public hub API by @tin-berri in https://github.com/BerriAI/litellm/pull/30902
- perf(otel): resolve LITELLM_OTEL_V2 flag once instead of rebuilding settings per call by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30989
- fix(ui): stop per-model usage export from duplicating user spend across models by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30980
- fix: reject model_list in proxy body and gate advisor client credentials by @yucheng-berri in https://github.com/BerriAI/litellm/pull/30585
- feat(scim): drive global proxy role from a SCIM admin group by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30895
- feat(scim): ingest enterprise extension attributes into user metadata by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30893
- fix(ui): resolve user_id to email in Spend Per User usage chart by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30992
- fix: prevent key-level metadata.tags from leaking into Bedrock passthrough body by @mateo-berri in https://github.com/BerriAI/litellm/pull/30985
- fix(proxy): scope team BYOK models by key team_id in /model/info by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31009
- fix(bedrock): only expand config-sourced AWS credential references by @yucheng-berri in https://github.com/BerriAI/litellm/pull/30867
- feat(mcp): scope a key to zero MCP servers with no-mcp-servers sentinel by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31029
- feat(ui): add Amazon Bedrock Mantle to the Add Model provider dropdown by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31034
- feat(proxy): allow llm_api_routes virtual keys to list MCP tools via /v1/mcp/tools by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31031
- fix(ui): label request logs column "Key Alias" to match filter by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31037
- test(ui): scrub stale return-url cookie from e2e storageState by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30317
- docs: add MCP server change guidelines by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31038
- fix(passthrough,streaming): recover cost on interrupted and agentic Anthropic streams by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31035
- fix(ui): clarify OpenAI-compatible provider dropdown labels (chat vs legacy completions) by @mateo-berri in https://github.com/BerriAI/litellm/pull/31046
- fix(proxy): serialize team budget_limits to JSON in jsonify_team_object by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31045
- fix(realtime): stop revalidating realtime events at the logging boundary by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31054
- feat(mcp): scaffold outbound_credentials package with typed Result by @tin-berri in https://github.com/BerriAI/litellm/pull/31047
- fix(router): isolate all per-deployment pricing overrides from sibling deployments by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31021
- fix(mcp): stop auth failures on the /mcp path surfacing as cancelled tool calls by @tin-berri in https://github.com/BerriAI/litellm/pull/31011
- refactor(completion): extract provider dispatch into typed helpers so basedpyright can analyze it by @mateo-berri in https://github.com/BerriAI/litellm/pull/30813
- chore: litellm oss staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/30968
- fix(typing): bring reportReturnType back under the basedpyright budget by @mateo-berri in https://github.com/BerriAI/litellm/pull/31103
- fix(realtime): post-tool-call function_response id omission by @Sameerlite in https://github.com/BerriAI/litellm/pull/30446
- feat: add opensandbox sandbox provider by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31024
- feat(mcp): add resolve_credentials dispatch skeleton by @tin-berri in https://github.com/BerriAI/litellm/pull/31056
- fix(router): guard num_retries=None in async_function_with_retries by @milan-berri in https://github.com/BerriAI/litellm/pull/30036
- fix(ui): keep team Organization optional for proxy admins in single-org setups by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30861
- feat(cloudflare): add current Workers AI text-generation models to the cost map by @mateo-berri in https://github.com/BerriAI/litellm/pull/31051
- ci: make the basedpyright budget gate delta-vs-base by @mateo-berri in https://github.com/BerriAI/litellm/pull/31106
- fix(cloudflare): route native Workers AI provider through OpenAI-compatible endpoint by @mateo-berri in https://github.com/BerriAI/litellm/pull/31053
- feat: add chat completions code interpreter loop by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31027
- fix(search): block server credential leak to caller-supplied api_base by @tin-berri in https://github.com/BerriAI/litellm/pull/30682
- feat: add LiteLLM Rust workspace with Mistral OCR bridge by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31033
- fix(router): honor litellm_settings.request_timeout as an independent per-attempt timeout by @mateo-berri in https://github.com/BerriAI/litellm/pull/31119
- fix: tighten role-based visibility of config and MCP fields by @yucheng-berri in https://github.com/BerriAI/litellm/pull/30587
- feat: add openai realtime translation layer to litellm-rust (1/2) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31129
- fix(deps): bump osv-flagged dependencies to clear known CVEs by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31122
- fix(model_prices): correct regional processing uplift to gpt-5.4/5.5 series only by @mateo-berri in https://github.com/BerriAI/litellm/pull/31136
- chore(ci): bump litellm version by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31139
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31140
- fix(bedrock-mantle): honor api_base for VPC endpoint routing on bedro… by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/31141
- fix(docker): bump wolfi-base digest to patch openssl CVE-2026-34182 by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31133
- feat: add minimal rust router + axum ai-gateway calling router.realtime (2/2) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31135
- build: add Dockerfile + render blueprint for rust ai-gateway by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31154
- fix(mcp): resolve config-defined servers in per-user credential and env-var endpoints by @tin-berri in https://github.com/BerriAI/litellm/pull/31171
- perf: pre-warm upstream realtime connection pool to cut session-establishment latency by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31163
- chore: clarify rule about trailing periods by @mateo-berri in https://github.com/BerriAI/litellm/pull/31175
- fix(anthropic): drop unsupported speed param with drop_params by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31152
- fix(proxy): expand all-proxy-models sentinel in direct access lookup by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31153
- fix(anthropic): sanitize tool_use ids on native /v1/messages path by @Sameerlite in https://github.com/BerriAI/litellm/pull/31094
- fix(ui): persist budget window deletion on virtual keys by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31107
- feat(ui): track frontend lint counts in a committed snapshot by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31157
- refactor(litellm-rust): dissolve providers into core + ai-gateway (strict 3-crate layers) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31218
- fix(vertex/files): stream OpenAI->Vertex batch JSONL uploads by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31036
- fix(mcp): let proxy admins assign MCP servers to teamless keys by @tin-berri in https://github.com/BerriAI/litellm/pull/31126
- feat(mcp): graft v2 resolver onto _create_mcp_client (none + api_key static family) by @tin-berri in https://github.com/BerriAI/litellm/pull/31058
- test: add e2e tests for spend, budgets and llms by @mateo-berri in https://github.com/BerriAI/litellm/pull/30869
- feat(proxy): add POST /v1/callbacks/logs to replay logging payloads through callbacks by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31134
- fix(ui): render logos under a custom server_root_path by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31156
- feat: make rust OCR async-first by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31253
- test(e2e): drop xfail markers for now-fixed team-budget-JSON and custom-pricing-leak bugs by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31249
- fix(proxy): stop double-decrypting email/slack alerting env vars in get_config by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31117
- fix(mcp): correct misleading no-trusted-proxy warning for XFF access control by @mateo-berri in https://github.com/BerriAI/litellm/pull/31264
- fix(mcp): warn loudly when X-Forwarded-For is present but use_x_forwarded_for is off by @mateo-berri in https://github.com/BerriAI/litellm/pull/31266
- fix(mcp): resolve toolset tools by the server's known prefix by @tin-berri in https://github.com/BerriAI/litellm/pull/31254
- fix(mcp): challenge delegate-auth OAuth servers with upstream resource_metadata by @tin-berri in https://github.com/BerriAI/litellm/pull/31255
- fix(ci): point OSS contributor workflows to litellm_oss_staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/31270
- fix(streaming): word-sliced cache replay for stream=true cache hits by @michelligabriele in https://github.com/BerriAI/litellm/pull/30216
- feat(mcp): add mcp_xff_num_trusted_hops to harden X-Forwarded-For client IP resolution by @mateo-berri in https://github.com/BerriAI/litellm/pull/31257
- chore: migrate Python formatter from black to ruff format by @mateo-berri in https://github.com/BerriAI/litellm/pull/31317
- fix(otel): hashable scope for _emit_once when guardrail_mode is list by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31262
- feat: package Rust OCR bridge in LiteLLM wheel by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31267
- chore: gitignore rust bridge build artifacts by @mateo-berri in https://github.com/BerriAI/litellm/pull/31349
- ci: harden cargo fetches during maturin builds by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31348
- chore(lint): widen ANN slack to 10% of baseline and drop PLR0913 from the strict gate by @mateo-berri in https://github.com/BerriAI/litellm/pull/31335
- feat: add Rust OCR providers by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31272
- fix(cache): apply Redis namespace to all key operations by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31288
- feat(pricing): add gemini-3-pro-image and gemini-3.1-flash-image GA model pricing by @milan-berri in https://github.com/BerriAI/litellm/pull/30022
- fix: clarify further that customer names shouldn't be made public by @mateo-berri in https://github.com/BerriAI/litellm/pull/31365
- ci(image-scan): add Grype image scan for OS + library CVEs by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31151
- feat(aiml): add openai/gpt-image-2 image model by @mateo-berri in https://github.com/BerriAI/litellm/pull/31323
- feat(mistral): support Mistral OCR 4 (mistral-ocr-4-0) by @mateo-berri in https://github.com/BerriAI/litellm/pull/31353
- fix: inverted rule in CLAUDE.md by @mateo-berri in https://github.com/BerriAI/litellm/pull/31370
- fix(proxy/client): redact api key from key/info client error messages by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31342
- feat(spend): store litellm_call_id on spend logs for DB-to-trace correlation by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31344
- chore(deps): bump deps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31377
- fix(cost-map): retarget mistral-medium-latest to Medium 3.5 and add date-pinned aliases by @mateo-berri in https://github.com/BerriAI/litellm/pull/31373
- feat(ocr): thin Rust OCR Python bridge by @ishaan-berri in https://github.com/BerriAI/litellm/pull/31368
- feat(mcp): opt-in least-privilege default for team key MCP access by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31380
- chore(ci): main into internal_staging (reconcile OCR hotfix history; unblocks #31384) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31390
- fix(vertex): preserve Gemini Embedding 2 usageMetadata for cost tracking by @mateo-berri in https://github.com/BerriAI/litellm/pull/31354
- chore: remove CI section from PR template by @mateo-berri in https://github.com/BerriAI/litellm/pull/31376
- test(logging): regression coverage for streaming /v1/messages OpenAI Responses spend logs by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31388
- chore: litellm oss staging 250626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/31305
- fix(vertex_ai): prevent stale Vertex bearer token causing /v1/messages 401 after token expiry by @Sameerlite in https://github.com/BerriAI/litellm/pull/31276
- fix(proxy): skip model override when response has no model field by @Sameerlite in https://github.com/BerriAI/litellm/pull/31183
- fix(vertex): stop O(n^2) re-parse of accumulated Gemini stream JSON by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31297
- fix(router): surface clean RateLimitError on mid-stream 429 with no fallbacks by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31298
- build(docker): build the Admin UI from source in a build-platform-pinned stage by @tin-berri in https://github.com/BerriAI/litellm/pull/31130
- fix(bedrock_guardrails): select latest user message by original role in apply_guardrail by @michelligabriele in https://github.com/BerriAI/litellm/pull/30482
- fix(proxy): restore wildcard expansion in /v1/model/info by @Sameerlite in https://github.com/BerriAI/litellm/pull/31444
- fix(cli): mint per-session agent credential on lite login by @Sameerlite in https://github.com/BerriAI/litellm/pull/31072
- chore: litellm oss staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/31185
- fix(cost): restore per-query Gemini 3.x web search billing by @mateo-berri in https://github.com/BerriAI/litellm/pull/31363
- chore(ci): reconcile main into internal_staging to unblock promotion (#31384) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31392
- test: add realtime proxy e2e suite across providers by @Sameerlite in https://github.com/BerriAI/litellm/pull/30960
- perf(spend-logs): only strip NUL bytes in safe_dumps when present by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31424
- perf(cost-calc): precompute service-tier cost-key suffixes by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31431
- perf(caching): memoize _get_all_llm_api_params, rebuilt per request by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31430
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31384
- feat(mistral): add mistral/mistral-ocr-2512 (OCR 3) to cost map by @mateo-berri in https://github.com/BerriAI/litellm/pull/31463
- feat(guardrails): make the Generic Guardrail resilient to built-in tools and errors (adopted from #31286) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31461
- test(pass-through): fix langfuse auth=true test broken by allowed_passthrough_routes gate by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31420
- fix(team): persist budget_duration on /team/member_add member budgets by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31443
- fix(spend): fold logs-tab total into the page query to avoid a separate COUNT(*) by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31423
- fix(bedrock): surface web identity token aud/iss on InvalidIdentityToken by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31412
- fix(guardrails): instrument during-call and post-call guardrail latency by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31414
- fix(auth): cache auth-path team object under canonical team_id key by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31418
- fix(build): restore pure-Python uv_build backend to unblock PyPI publish by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31470
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31477
- fix(guardrails): match policy-pipeline block response to direct guardrail attachment by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31421
- feat(prometheus): add requested_model label to spend and requests metrics by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31410
- fix(ui): stop listing bedrock_mantle models under the Bedrock provider by @mateo-berri in https://github.com/BerriAI/litellm/pull/31478
- fix(mcp): stop logging tool-call input in MCP client by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31393
- feat(mcp): shared OAuth token foundation - challenge, store seam, expiry-aware cache, single-flight refresh by @tin-berri in https://github.com/BerriAI/litellm/pull/31275
- fix(passthrough): schedule spend logging via durable logging worker by @mateo-berri in https://github.com/BerriAI/litellm/pull/31485
- fix(websearch): wrap agentic loop response in fake stream for streaming requests by @mateo-berri in https://github.com/BerriAI/litellm/pull/31484
- feat(guardrails): add headroom guardrail for message compression by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31407
- fix(websearch): sync tool_choice when converting web_search tools by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/31375
- fix(passthrough): forward all multipart files with repeated field names by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/31391
- fix(cost): preserve Anthropic server_tool_use web search usage in cost tracking by @mateo-berri in https://github.com/BerriAI/litellm/pull/31355
- fix(otel): point AgentOps OTLP exporter at otlp.agentops.ai by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31490
- feat(mcp): migrate authorization_code MCP to the v2 resolver (single-replica) [1/2] by @tin-berri in https://github.com/BerriAI/litellm/pull/31473
- fix(pass-through): stop pass-through route registry growing every reload (PERF-13) by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31314
- fix(bedrock): normalize Messages system role and adaptive-thinking for Claude Invoke by @mateo-berri in https://github.com/BerriAI/litellm/pull/31364
- perf(proxy): bound event-loop blocking from oversized requests by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31497
- fix(proxy): cancel upstream LLM stream when client disconnects during time-to-first-token by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31499
- fix(pass_through): log pre-call guardrail blocks at WARNING, not ERROR with a traceback by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31500
- fix(proxy/auth): honor user_api_key_cache_ttl for management-object cache writes by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31504
- feat(prometheus): add per-team litellm_team_members_metric gauge by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31506
- fix(redis): loop-scope async Lua script registration by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31501
- style: unify ruff format width on 120 by @mateo-berri in https://github.com/BerriAI/litellm/pull/31518
- chore: ignore ruff-format reformat commits in git blame by @mateo-berri in https://github.com/BerriAI/litellm/pull/31520
- fix(vertex_ai): append rawPredict suffix for custom api_base on /v1/m… by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/31529
- feat(mcp): cross-replica single-flight refresh for the v2 per-user OAuth store [2/2] by @tin-berri in https://github.com/BerriAI/litellm/pull/31493
- chore: remove unused keys from model cost map by @mateo-berri in https://github.com/BerriAI/litellm/pull/31528
- fix(agents): show an agent's attached virtual key in the UI by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29619
- fix(router): persist global retry_policy via /config/update by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29540
- chore: update Next.js build artifacts (2026-06-28 00:38 UTC, node v20… by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/31539
- chore(ci): promote internal staging to main by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/31542
- chore(release): backport #31912/#31920/#31921 (+#31923/#31929 parity, #31635 prereq) onto patch-1.91.0rc1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32091
- chore(ui): rebuild Next.js bundle for #31921/#31920 on patch-1.91.0rc1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32094
- revert(auth): backport the teamless all-team-models denial revert (#32032) to 1.91.0rc1 by @mateo-berri in https://github.com/BerriAI/litellm/pull/32100
New Contributors
- @simantak-dabhade made their first contribution in #30634
- @Jacopos311 made their first contribution in https://github.com/BerriAI/litellm/pull/30770
- @sarvesh1327 made their first contribution in https://github.com/BerriAI/litellm/pull/30819
Full Changelog: v1.86.0...v1.91.0