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.92.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.92.0/cosign.pub \
ghcr.io/berriai/litellm:v1.92.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
- fix(realtime): stop second Gemini Live setup, retry hung handshake, close guardrail bypass by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31519
- feat: declarative fallback generalizations for unknown models by @mateo-berri in https://github.com/BerriAI/litellm/pull/29718
- test(e2e): move rust OCR e2e into llm_translation on the shared harness by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31488
- test(videos): add 1:1 test file scaffold for videos component paths by @Sameerlite in https://github.com/BerriAI/litellm/pull/30631
- test(batches): add 1:1 test file scaffold for batches component paths by @Sameerlite in https://github.com/BerriAI/litellm/pull/30529
- feat(a2a): support a2a-sdk 1.x proxy routing for 0.3 and 1.0 agents by @Sameerlite in https://github.com/BerriAI/litellm/pull/30950
- feat(proxy): add AES-256-GCM at-rest credential encryption with versioned format and re-encryption migration by @michelligabriele in https://github.com/BerriAI/litellm/pull/31215
- chore(router): simplify unknown-model error message construction by @stuxf in https://github.com/BerriAI/litellm/pull/31566
- chore(ci): re-issue 31566 for full CI run by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31629
- fix(ui): keep virtual-keys filters across delete and refresh (LIT-4080) by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31533
- perf(ui): load virtual-keys team filter from the fast v2 endpoint by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31638
- fix(databricks): split parallel tool calls so each tool message follows tool_calls by @mateo-berri in https://github.com/BerriAI/litellm/pull/31633
- fix(proxy): gate non-admin /key/generate budget_limits and permissions (VERIA-392) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31469
- perf(auth): gather independent pre-call budget-enforcement reads in common_checks by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31604
- fix(proxy): reject non-finite budget_limits windows on /key/generate (LIT-4094) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31630
- fix(proxy): hard-reject CLI session token personal-key budget_limits (LIT-4095) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31631
- fix(vertex_ai/files): single media upload for batch files to fix 499s on large uploads by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31653
- fix(proxy): count only active users toward license seat limit by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31227
- fix(mcp): resolve per-user OAuth identity authoritatively at the token endpoint by @tin-berri in https://github.com/BerriAI/litellm/pull/31657
- fix(proxy): reject team-scoped object_permission on personal keys for non-admins by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31471
- refactor(ui): colocate search-tools into route-level _components by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31658
- fix(passthrough): drop top-level additional_drop_params on /v1/messages by @mateo-berri in https://github.com/BerriAI/litellm/pull/31645
- fix(guardrails): scan file and document attachments with Model Armor by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31655
- fix: skip health check for semantic auto_router deployments by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31668
- fix(bedrock): drop unmappable Responses tools instead of failing the request (LIT-3858) by @mateo-berri in https://github.com/BerriAI/litellm/pull/31663
- ci(linting): generate prisma client before basedpyright typecheck by @mateo-berri in https://github.com/BerriAI/litellm/pull/31673
- fix(proxy): emit x-litellm-response-cost header on /messages and /generateContent (LIT-4076) by @mateo-berri in https://github.com/BerriAI/litellm/pull/31675
- fix(mcp): support client_secret_basic for upstream OAuth token endpoints by @tin-berri in https://github.com/BerriAI/litellm/pull/31635
- feat(cost_calculator): log per-token-type reasoning and cache cost br… by @Sameerlite in https://github.com/BerriAI/litellm/pull/31686
- fix(anthropic): drop unsignable thinking blocks and allow null signature in logging (LIT-4007) by @mateo-berri in https://github.com/BerriAI/litellm/pull/31654
- chore(docs): remove docs accidentally committed to litellm repo by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31691
- chore: remove _experimental/out by @mateo-berri in https://github.com/BerriAI/litellm/pull/31546
- feat(prometheus): add litellm_overhead_with_guardrails_latency_metric by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31593
- chore: shift CI lint left with an opt-in
make pre-commitand CLAUDE.md rule by @mateo-berri in https://github.com/BerriAI/litellm/pull/31544 - feat(proxy): type Customer Management response_model for OpenAPI coverage by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31043
- fix(ui): stop Request Logs page from overflowing horizontally and size its columns by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31426
- perf(otel): memoize per-request lazy import of otel runtime hooks by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31707
- feat(otel): emit a tools/list CLIENT span for MCP discovery under otel_v2 by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31525
- test(benchmarks): add CodSpeed benchmarks for inference, MCP and A2A hot paths by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31716
- fix(ui): allow any git host on the skills add form (LIT-4053) by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31652
- perf(spend): move cost-callback payload deepcopy off the request event loop by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31579
- chore: prevent CLAUDE.md comment bloat by @mateo-berri in https://github.com/BerriAI/litellm/pull/31729
- feat(guardrails): expose streaming knobs on generic_guardrail_api by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31730
- feat(router): tag routing denylist support via ! prefix by @mateo-berri in https://github.com/BerriAI/litellm/pull/31728
- fix(mcp): stop one unauthenticated server from emptying the aggregate tools/list by @tin-berri in https://github.com/BerriAI/litellm/pull/31684
- perf(spend): gather independent per-scope spend-counter increments by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31578
- fix(email): apply EMAIL_SIGNATURE to budget alert emails by @michelligabriele in https://github.com/BerriAI/litellm/pull/31712
- feat(messages): passthrough /v1/messages to native endpoints via supported_endpoints by @mateo-berri in https://github.com/BerriAI/litellm/pull/31685
- fix(proxy): isolate poison spend-log rows so one bad record can't drop the whole batch by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31705
- fix(redis): re-establish async cluster connections after a node restart by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31577
- fix(logging): route realtime success logging through the bounded worker by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31733
- fix(presidio): stream SSE output incrementally instead of buffering the whole response by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31503
- feat(anthropic): add Claude Sonnet 5 by @mateo-berri in https://github.com/BerriAI/litellm/pull/31740
- chore: bump litellm to 1.92.0 and litellm-enterprise to 0.1.45 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31757
- fix(token_counter): count legacy function_call.arguments (VERIA-492) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31741
- fix(presidio): revert stream SSE output incrementally instead of buffering by @tin-berri in https://github.com/BerriAI/litellm/pull/31764
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31765
- ci(codspeed): pin benchmark runner to ubuntu-24.04 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31746
- test(pass-through): de-flake vertex spend-log test by routing through the proxy by @mateo-berri in https://github.com/BerriAI/litellm/pull/31689
- fix(proxy): extend banned-params + admin-clear lists (VERIA-493) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31742
- fix(ui): fix Router Settings Loadbalancing tab save (LIT-4057) by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31735
- fix(ui): rotate model credentials in a dedicated modal so a normal save can't overwrite secrets by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28089
- feat(proxy): audit default user settings updates by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31753
- fix(websearch): websearch_interception agentic loop fixes for chat completions and anthropic messages by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31669
- feat(sandbox): reuse e2b container across requests when metadata.session_id is set by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31688
- feat(proxy): support object_permission in default_key_generate_params by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31776
- feat(guardrails/headroom): add CCR (compress-cache-retrieve) via agentic loop by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31681
- feat: add cache control injection support for v1/messages endpoint by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31778
- feat(proxy): audit remaining system-wide settings updates by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31754
- fix(prometheus): expose project_alias in custom metadata labels (LIT-3741) by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31784
- feat(mcp): add mcp_tool_search virtual tools for large tool catalogs by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31777
- fix(proxy): hydrate MCP server registry from DB on startup when store_model_in_db is false by @tin-berri in https://github.com/BerriAI/litellm/pull/31775
- refactor(lint): collapse type/lint budgets to a single per-rule limit by @mateo-berri in https://github.com/BerriAI/litellm/pull/31883
- feat(ui): disclaim that the Update API Key modal only rotates api_key by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31805
- revert: "chore: remove _experimental/out" (#31546) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31904
- fix(scripts): resolve worktree root before relative_to in type_check_gate by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31906
- feat(bedrock_mantle): add xai.grok-4.3 to model cost map for SigV4 auth by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31916
- chore: make CLAUDE.md rules more concise by @mateo-berri in https://github.com/BerriAI/litellm/pull/31892
- fix(proxy): authorize /health/test_connection against loaded deployment's team_id (VERIA-441) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31767
- fix(proxy): admin-gate
permissionson /key/update and /key/regenerate (LIT-4092) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31810 - feat(github_copilot): route /v1/messages to Copilot native Anthropic endpoint by @mateo-berri in https://github.com/BerriAI/litellm/pull/31802
- feat(gdc): implement Google Distributed Cloud (GDC) Gemini provider by @mateo-berri in https://github.com/BerriAI/litellm/pull/31895
- fix(model_prices): apply claude-sonnet-5 introductory pricing through 2026-08-31 by @mateo-berri in https://github.com/BerriAI/litellm/pull/31917
- fix(proxy): tighten role gating on /get/config/callbacks response by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31745
- chore(lint): remove dead E501 config, fix stale blame-ignore SHAs, note 120 line width by @mateo-berri in https://github.com/BerriAI/litellm/pull/31927
- fix(bedrock/converse): drop toolSpec.strict for Opus 4.7/4.8 (#31582) by @mateo-berri in https://github.com/BerriAI/litellm/pull/31923
- fix(bedrock): trigger Nova Sonic generation on response.create so realtime sessions stop hanging by @mateo-berri in https://github.com/BerriAI/litellm/pull/31924
- chore(ui): remove unused dep, delete dead file, and unblock knip by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31933
- refactor(ui): colocate users page into route-level _components by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31897
- test(bedrock): switch image gen live test off EOL Titan to Nova Canvas by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31937
- feat(vertex_ai): pass full imageConfig dict for Gemini image generation by @Sameerlite in https://github.com/BerriAI/litellm/pull/31811
- fix(bedrock): drop strict/additionalProperties from toolSpec for Claude Sonnet 4 by @Sameerlite in https://github.com/BerriAI/litellm/pull/31943
- feat(prometheus): expose MCP tool metadata in Prometheus metrics by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31899
- fix(mcp): byom visibility, preview UX, and admin settings gating by @Sameerlite in https://github.com/BerriAI/litellm/pull/31809
- test(e2e): add live batches suite across providers and routing scenarios by @Sameerlite in https://github.com/BerriAI/litellm/pull/30958
- fix(logging): resolve model_map_value for proxy custom pricing by @Sameerlite in https://github.com/BerriAI/litellm/pull/31940
- fix(mcp): roll up MCP tool spend to user counters and usage UI by @Sameerlite in https://github.com/BerriAI/litellm/pull/31576
- feat(proxy): track cost for unmanaged Vertex AI batch jobs by @Sameerlite in https://github.com/BerriAI/litellm/pull/31442
- fix(mcp): tighten role-based visibility on /v1/mcp/server/submissions by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31932
- fix(mcp): gate OAuth authorize/token/register/discovery on auth_type=oauth2 by @tin-berri in https://github.com/BerriAI/litellm/pull/31736
- refactor(ui): drive cache settings form from a typed frontend schema by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31939
- fix: merge metadata.tags into litellm_metadata on /v1/responses route by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31793
- fix(proxy): restore admin key/team callback_vars.turn_off_message_logging override (LIT-3587) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31905
- feat(mcp): bound outbound tool-call concurrency per MCP server by @tin-berri in https://github.com/BerriAI/litellm/pull/31641
- fix(release): make Create Release reliable for stable maintenance cuts by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31986
- feat(s3_v2): send Content-MD5 on PUT and optional server-side encryption by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31928
- fix(bedrock): honor ttl for tool_config cache injection points by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/31929
- test(e2e): add vertex_ai passthrough spend-log coverage by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31781
- fix(mcp): surface tools/list auth failures as a 401 challenge on single-server routes by @tin-berri in https://github.com/BerriAI/litellm/pull/31921
- feat(tencent): add Tencent TokenHub as a provider by @mateo-berri in https://github.com/BerriAI/litellm/pull/31903
- fix(bedrock): map guardrailConfig to InvokeModel guardrail headers by @mateo-berri in https://github.com/BerriAI/litellm/pull/31985
- feat(ui): shadcn migration foundation: Tailwind v4, shadcn init, antd cascade fix by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/31995
- chore(e2e): untrack gateway config and document e2e test location by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/31914
- perf(lint): skip and cache base gate passes, parallelize make lint, skip redundant prisma generate by @mateo-berri in https://github.com/BerriAI/litellm/pull/32000
- fix(ui): include cache token columns in usage export by @mateo-berri in https://github.com/BerriAI/litellm/pull/32015
- fix(a2a): record agent cost_per_query and input tokens on native send path by @michelligabriele in https://github.com/BerriAI/litellm/pull/31979
- feat: litellm oss staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/31935
- fix(a2a): populate response usage in a2a chat transformation by @michelligabriele in https://github.com/BerriAI/litellm/pull/31980
- fix(auth): deny model access for teamless keys with all-team-models by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32022
- fix(proxy): admin-gate
permissionson /user/new and /user/update (LIT-4138) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31998 - fix(proxy): admin-gate
allowed_routespresence on /key/update and /key/regenerate (LIT-4139) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31987 - fix(proxy): admin-gate
permissionson _process_single_key_update (LIT-4137) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32002 - fix(azure_ai): preserve content, tables, and keyValuePairs in doc-intelligence /v1/ocr by @mateo-berri in https://github.com/BerriAI/litellm/pull/32018
- bump: litellm-proxy-extras 0.4.75, litellm-enterprise 0.1.46 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32029
- feat(tinyfish): make search provider permissive, attribute errors by @tin-berri in https://github.com/BerriAI/litellm/pull/31997
- feat(ui): add token endpoint auth method selector to MCP OAuth forms by @tin-berri in https://github.com/BerriAI/litellm/pull/31739
- fix(mcp): persist DCR client_id so interactive OAuth token refresh works by @tin-berri in https://github.com/BerriAI/litellm/pull/31912
- fix(azure_sentinel): resolve audit stream from AZURE_SENTINEL_AUDIT_STREAM_NAME by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32010
- fix(mcp): persist DCR client_id from on-create MCP OAuth Authorize & Fetch by @tin-berri in https://github.com/BerriAI/litellm/pull/31920
- fix(e2e): define SpendTagsResponse/TagSpend so spend suite collects by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/32069
- feat(proxy): add key-level budget_fallbacks to reroute requests when a per-model budget is exceeded by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31783
- feat(ui): re-add chat UI, allow simple UI for MCP OBO auth by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/31893
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32027
- feat(mcp): add all-proxy-mcpservers sentinel to grant teams every MCP server by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32012
- fix(anthropic): keep context_management working when drop_params is enabled by @mateo-berri in https://github.com/BerriAI/litellm/pull/32020
- fix(ci): stop ui_unit_tests vitest onTaskUpdate RPC timeout flake by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32078
- chore: clarify the linear ticket instruction in pr template by @mateo-berri in https://github.com/BerriAI/litellm/pull/32076
- test(ui): quiet vitest CI logs by silencing passing-test console output by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32079
- fix: prevent duplicate budget alert emails on concurrent threshold crossings by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32011
- chore(ui): add no-console lint ratchet and strip console from prod builds by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32082
- feat(guardrails): add unreachable_fallback fail-open option to headroom guardrail by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/32026
- feat(ui): add budget fallbacks configuration to key create/edit forms by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32072
- feat(mcp): migrate the token_exchange (OBO) arm to the v2 resolver by @tin-berri in https://github.com/BerriAI/litellm/pull/31526
- feat(mcp): make token_exchange (OBO) production-ready - discovery threading + audit hardening + RFC 9728 challenge by @tin-berri in https://github.com/BerriAI/litellm/pull/31622
- fix(anthropic): bill streaming 1h prompt-cache writes at the 1h rate by @mateo-berri in https://github.com/BerriAI/litellm/pull/32073
- chore(ui): remove debug console.log statements from dashboard by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32087
- fix(router): mask provider credentials embedded in fallback error messages by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32083
- revert: undo teamless all-team-models denial from #32022 and #29746 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32032
- feat(mcp): discover the OBO token endpoint via RFC 9728 -> RFC 8414 (no IdP guessing) by @tin-berri in https://github.com/BerriAI/litellm/pull/31762
- fix(proxy): route realtime HTTP endpoints through router for credenti… by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/32077
- feat(ui): migrate chat UI from antd to shadcn/ui + add key management and usage panels by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32074
- fix(ci): exclude deleted files from ruff format check by @yuneng-berri in https://github.com/BerriAI/litellm/pull/31462
- fix(proxy): stop leaking master_key and database_url in startup DEBUG logs by @yucheng-berri in https://github.com/BerriAI/litellm/pull/31944
- fix(policies): reject non-existent team/key/model scope entries on attachment create by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32131
- fix(anthropic): require caller api_key and SSRF-validate api_base in advisor tool by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32093
- fix(proxy): keep serving reads from the read replica when the primary DB is down at startup by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31951
- build: restore maturin backend to bundle the Rust bridge in the wheel by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32097
- fix(cost): store cost breakdown for /v1/realtime sessions by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/30069
- fix(proxy): return upstream error bodies unchanged in passthrough by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/32133
- ci: run proxy containers without debug logging by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32128
- bump: litellm-enterprise 0.1.46 -> 0.1.47 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32150
- chore(ci): build ui for release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32151
- feat(prometheus): add api_provider label to token, latency, request and cache metrics by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32126
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32156
- chore(release): backport #32256, #32277, #32236, #32416, #32405, #32524 onto patch-1.92.0rc1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32553
- chore(ui): rebuild dashboard bundle for patch-1.92.0rc1 (#32416) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32554
- chore(release): backport 11 staging PRs onto patch-1.92.0rc2 for the 1.92.0 stable cut by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32959
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.92.0