Verify Docker Image Signature
All LiteLLM Docker images are signed with cosign. This release is signed with the key introduced in commit e82a3c6.
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 published signing key:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/e82a3c646908ba0a6ee0beddc4310d7a6cac4065/cosign.pub \
ghcr.io/berriai/litellm:v1.108.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.108.0/cosign.pub \
ghcr.io/berriai/litellm:v1.108.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(a2a): normalize agent card protocolBinding casing before transport match by @devin-ai-integration[bot] in #37917
- fix(interactions): track cost and spend for Google Interactions API requests by @mateo-berri in #33310
- fix(bedrock): stop emitting an empty assistant delta after the finish_reason chunk by @devin-ai-integration[bot] in #36806
- fix(anthropic): reconcile enum with declared type in output_format schema by @dkindlund in #37882
- feat(azure_ai): support entra id / oauth auth on every azure ai foundry route by @devin-ai-integration[bot] in #35415
- fix(ui): boot the UI image as an arbitrary uid by anchoring nginx writes under /tmp by @devin-ai-integration[bot] in #37982
- fix(proxy): parse form-encoded video edit/extension bodies after auth by @Souravrajvi0 in #36513
- fix(anthropic): keep legacy thinking budget_tokens on Claude 4.6 models on /v1/messages by @mateo-berri in #38108
- fix(utils): make prompt_token_calculator count claude models again by @ryan-crabbe-berri in #38130
- fix(proxy): keep every value of a repeated form key, and gate the tests that hid it by @ryan-crabbe-berri in #37908
- fix(health): apply model_info.health_check_params to health check probes by @mateo-berri in #38101
- fix(runwayml): route every generation endpoint and fix video cost tracking by @mateo-berri in #38115
- fix(passthrough): attribute spend and release budget reservation on router-model /vllm and /azure routes by @mateo-berri in #38111
- fix: match OpenAI SDK wire format on image/video routes by @mateo-berri in #38104
- fix(ci): give three unit shards a job deadline that outlasts their pytest budget by @tin-berri in #38139
- feat(ui): add Gemini Family auto-router preset by @tin-berri in #38138
- fix(logging_worker): carry queued tasks across event-loop change instead of dropping them by @mateo-berri in #38144
- feat(proxy): enforce vector-store upload security controls on /v1/rag/ingest by @mateo-berri in #38135
- test(e2e): pin require_managed_files enforcement behind a marker-gated stack phase by @mateo-berri in #38117
- refactor(ui): move the dashboard onto class-variance-authority by @yuneng-berri in #38125
- refactor(utils)!: delete prompt_token_calculator by @ryan-crabbe-berri in #38132
- fix(auto-router): list configured auto-routers in the usage picker before they have traffic by @tin-berri in #38129
- refactor(ui): install the shadcn field primitive by @yuneng-berri in #38126
- fix(complexity_router): keep both ends of a clipped classifier context turn by @tin-berri in #38141
- fix(ci): ignore-list recursive form-field flatteners in recursive_detector by @mateo-berri in #38149
- fix(passthrough): stop leaking the caller's virtual key on credential-less Vertex passthrough by @mateo-berri in #38114
- fix(router): stop copying forwarded credentials into retry breadcrumbs by @mateo-berri in #38133
- feat(e2e): record and replay streamed provider responses chunk-for-chunk by @mateo-berri in #38136
- fix: tolerate stream chunks without a choices key in stream_chunk_builder by @AkshaySasi in #34382
- fix(files): decode x-litellm-model encoded file_id in chat + responses by @hclsys in #29832
- fix(videos): forward uploaded source file on /v1/videos/edits to the provider by @mateo-berri in #38155
- fix(s3_v2): percent-encode object keys once so signed and sent URLs match by @devin-ai-integration[bot] in #38005
- feat(ui): add error-code drilldown for failed requests on caching page by @ryan-crabbe-berri in #38156
- feat(search): add Grounding with Bing Search (bing_grounding) as a search provider by @mateo-berri in #38119
- ci: ban row-rewriting DML from prisma migrations by @yucheng-berri in #37899
- fix(langsmith): keep root-run ids self-consistent so batch ingest stops rejecting header-tagged requests by @yucheng-berri in #38116
- ci(e2e): record the e2e suite weekly and replay it on weekdays with zero egress by @mateo-berri in #38163
- chore(codeowners): unown ui container plumbing and generated files by @ryan-crabbe-berri in #38124
- fix(logging): skip parsing redacted tool call arguments by @devin-ai-integration[bot] in #38169
- feat(complexity_router): bound the classifier context block, not each turn in it by @tin-berri in #38145
- fix(http_handler): dispose aiohttp session when AsyncHTTPHandler is finalized without a running loop by @anmolg1997 in #36670
- fix(proxy): reset a stuck team member's budget by @yassin-berriai in #37971
- fix(anthropic/bedrock): request summarized adaptive thinking for reasoning_effort and use provider thinking token counts by @devin-ai-integration[bot] in #37979
- fix(completion_extras): forward reasoning_effort=max through the Responses API bridge by @mateo-berri in #38222
- feat(vertex_ai): add native Vertex AI Interactions API support by @mateo-berri in #38229
- test(mcp): drain the logging worker after each test so queued callbacks cannot leak into the next test by @ryan-crabbe-berri in #38228
- fix(ui): forward OAuth issuer/authorization/token/registration URLs from the MCP server edit form by @yassin-berriai in #38154
- fix(together_ai): default endpoints to api.together.ai instead of api.together.xyz by @mateo-berri in #38233
- fix(bedrock_mantle): register a Bedrock runtime passthrough config so /bedrock/model//invoke works by @mateo-berri in #38231
- fix(router): resolve provider from api_base in deployment validation and acompletion by @mateo-berri in #38235
- fix(model_prices): raise bedrock_mantle gpt-5.6 max_input_tokens to Mantle's enforced 1050000 by @mateo-berri in #38225
- fix(bedrock_mantle): normalize Codex input item types Mantle rejects by @mateo-berri in #38227
- fix(proxy): store the actual selected model in spend logs for Azure Model Router by @devin-ai-integration[bot] in #37770
- feat(router): per-group supported reasoning efforts with the max level by @tin-berri in #37897
- fix(proxy): stop expected 4xx responses from saturating worker CPU on failure logging by @devin-ai-integration[bot] in #38102
- fix(caching): use upstream RedisCluster on redis-py with per-connection recovery by @devin-ai-integration[bot] in #38171
- perf(auth): drop guaranteed-miss internal-cache Redis read from team object lookup by @devin-ai-integration[bot] in #38073
- fix(together_ai): route chat completions through a dedicated TogetherAIChatConfig by @mateo-berri in #38248
- fix(ui): read reasoning tokens from Responses API output_tokens_details by @yassin-berriai in #37952
- fix(dashboard): don't show a stale provider prompt-cache chip on a response-cache hit by @yassin-berriai in #37951
- fix(ui): render tag-based guardrail mode instead of crashing the guardrails page by @devin-ai-integration[bot] in #37493
- fix(scim): return user_id as Group members[].value on transformed group responses by @devin-ai-integration[bot] in #38161
- fix(scim): preserve existing team memberships when POST /Users adoption carries no groups by @devin-ai-integration[bot] in #38166
- fix(router): support mid-stream fallback for anthropic_messages route type by @yassin-berriai in #38153
- fix(auth): support wildcard prefixes in jwt team_allowed_routes by @devin-ai-integration[bot] in #37756
- feat(models): add missing Together AI serverless models to the cost map by @mateo-berri in #38230
- fix(cerebras)!: add max_retries and extra_headers to get_supported_openai_params by @deepanshululla in #36601
- fix(anthropic): translate tool_result document blocks in the /v1/messages bridge by @mateo-berri in #38251
- fix(team): serialize member_add, member_delete, and delete under the team's advisory lock by @yassin-berriai in #37969
- docs(pr-template): split Caveats bullets into severity tiers and call for plain engineering language by @mateo-berri in #38252
- fix(anthropic): carry tool_result document blocks through the /v1/messages responses bridge by @mateo-berri in #38261
- fix(together_ai): pass tools through for models missing from the registry by @mateo-berri in #38265
- fix(anthropic): carry user-content document blocks through the /v1/messages responses bridge by @mateo-berri in #38267
- fix(rerank): emit latency and cost headers on /rerank by @devin-ai-integration[bot] in #35419
- perf(streaming): add shared JSONFragmentAccumulator for Vertex and Anthropic by @deepanshululla in #36610
- fix(together_ai): strip internal thinking fields from outbound messages, keep reasoning_content by @mateo-berri in #38275
- fix(router): persist attempted_fallbacks and original_model_group into spend logs metadata by @yucheng-berri in #38107
- fix(logging): redact tool call arguments to valid JSON and preserve null content by @yucheng-berri in #38182
- fix(ui): stack policy flow builder below the popup layer so guardrail options render by @devin-ai-integration[bot] in #38273
- test: gate the test tree on B003 so a test cannot swap os.environ for a plain dict by @ryan-crabbe-berri in #38274
- refactor(repositories): type prisma table access with one generic protocol by @mateo-berri in #38205
- fix(anthropic): buffer streamed responses carrying server-fulfilled tools so retrieval tool calls never reach the client by @mateo-berri in #36245
- test(together_ai): regression suite across chat, responses, and messages surfaces by @mateo-berri in #38283
- feat(logging): add async_post_call_failure_deployment_hook by @deepanshululla in #36657
- chore: bump litellm-enterprise 0.1.59 -> 0.1.60, litellm 1.99.0 -> 1.100.0 by @yuneng-berri in #38243
- test(e2e): cover Together AI reasoning, tool calls, template kwargs, and cost through a live proxy by @mateo-berri in #38286
- fix(logging): keep tracebacks for provider-originated 4xx errors by @mateo-berri in #38296
- chore(ci): promote internal staging to main by @yuneng-berri in #38293
- refactor(ui): install the shadcn alert primitive by @yuneng-berri in #38300
- refactor(ui): re-pull label, textarea, separator and skeleton from the registry by @yuneng-berri in #38302
- feat(prometheus): configure deployment caller identity by @mphilippnv in #38221
- test(e2e): let the Together replayed-reasoning case survive a single provider miss by @mateo-berri in #38314
- fix(otel): map /v1/messages provider errors before failure logging by @mateo-berri in #38310
- fix(exceptions): map upstream status codes for providers with no exception_type branch by @mateo-berri in #38318
- fix(passthrough): record ownership of streamed responses under managed ids by @mateo-berri in #38320
- fix(proxy): encrypt streamed responses ids on /openai/v1/responses and /responses aliases by @mateo-berri in #38325
- test(cost-calc): pin the rate fallbacks inside a tiered-pricing tier by @yuneng-berri in #38327
- test(e2e): cover the Bedrock provider-feature cells customers run by @mateo-berri in #38232
- fix(together_ai): fail open on response_format instead of dropping it for unregistered models by @mateo-berri in #38269
- fix(proxy): honor DATABASE_DISABLE_PREPARED_STATEMENTS in componentized entrypoints by @devin-ai-integration[bot] in #38363
- fix(anthropic-responses): preserve structured output strictness by @eugene-yao-zocdoc in #38211
- chore(typing): roll up the daily tech debt cleanups from Aug 20 to Aug 26 by @devin-ai-integration[bot] in #37922
- fix(router): resolve hidden aliases for explicit lookup by @daniel-meismer-zocdoc in #38272
- fix(ui): keep focus in the add model public name input while typing by @devin-ai-integration[bot] in #38366
- fix(model_prices): price 1-hour cache writes on claude-3-haiku and claude-3-opus at 2x input by @mateo-berri in #38371
- fix(proxy): keep the caller's Google token on credential-less Vertex passthrough under custom auth by @mateo-berri in #38299
- fix(mcp): preserve provider access token lifetime by @daniel-meismer-zocdoc in #38271
- chore(ui): remove stale "New" badges from the dashboard by @yuneng-berri in #38374
- test(cost-estimate): pin the prices and period totals /cost/estimate returns by @yuneng-berri in #38315
- fix(ci): let the mutation workflow find covered lines so it generates mutants by @yuneng-berri in #38305
- fix(model_prices): raise bedrock_mantle gpt-5.5 and gpt-5.4 max_input_tokens to Mantle's enforced 1050000 by @mateo-berri in #38368
- fix(azure/realtime): authenticate realtime websocket with Azure AD token when no api-key by @devin-ai-integration[bot] in #34658
- fix(bedrock): map reasoning_effort to reasoning.effort for OpenAI GPT-5.x on Converse by @6matt in #38279
- test(prometheus): cover caller-identity config failure cases by @yucheng-berri in #38380
- fix(redis): support credential providers across clients by @eugene-yao-zocdoc in #38094
- fix(health): support
mode: image_editin health checks by @devin-ai-integration[bot] in #38291 - fix(cost-map): add US data residency uplift to claude-sonnet-4-6 and mythos entries by @mateo-berri in #38369
- fix(anthropic): raise missing-credential error on /v1/messages passthrough by @devin-ai-integration[bot] in #38240
- fix(mcp): complete DCR bridge OAuth challenges by @daniel-meismer-zocdoc in #37384
- test(proxy): pin the request-validation contracts in proxy/_types.py by @yuneng-berri in #38307
- docs(CLAUDE.md): add pull-before-work rule by @mateo-berri in #38386
- fix(anthropic): scale cache costs by fast mode and trust served speed by @mateo-berri in #38378
- fix(pricing): add azure gpt-5.6 cache write rates and correct data zone priority by @mateo-berri in #38370
- docs: tighten the pull-before-work rule in CLAUDE.md by @devin-ai-integration[bot] in #38389
- fix(health): strip credential fields from GET /health output by @Siraj637909 in #37090
- fix(minimax): attach MINIMAX_API_KEY on anthropic messages requests by @mateo-berri in #38393
- refactor(ui): replace hand-picked z-index values with one named scale and lint it by @ryan-crabbe-berri in #38282
- fix(health): probe Azure GA realtime path for transcription-only models by @mateo-berri in #38390
- fix(bedrock): parse cacheDetails for Converse 1h/5m cache write cost split by @danielva-monday in #36762
- fix(caching): flush async cache writes cancelled at event loop shutdown by @mateo-berri in #38385
- fix(router): resolve model_group_alias before pre-routing strategy dispatch by @tin-berri in #38382
- feat(proxy): enforce rpm/tpm on model add + fix validation error title in UI by @kunal2002 in #36518
- refactor(ui): move every page header onto the shared PageHeader by @yuneng-berri in #38306
- fix(proxy): stop cache eviction errors from failing /key/update by @yuneng-berri in #38308
- fix(aiohttp): honor global ssl_verify on the aiohttp_openai handler path by @mateo-berri in #38400
- fix(logging_worker): rescue dequeued logging tasks lost at event loop close by @mateo-berri in #38394
- fix(caching): require the namespace delimiter when checking already-namespaced redis keys by @mateo-berri in #38403
- fix(prompts): reject keyed prompt_data with prompt_id and populate prompt version by @mateo-berri in #38404
- fix(cost_calculator): resolve real cost key when model_name alias contains '/' by @ksk2023 in #38344
- fix(cost-map): correct prompt_cache_min_tokens for Claude Fable 5 and backfill Anthropic re-export entries by @mateo-berri in #38405
- test(azure-ai): pin the 422 retry that drops the field the provider rejected by @yuneng-berri in #38309
- refactor(ui): read the auto-router tier set through one row list by @tin-berri in #38408
- fix(proxy): stop empty DB router_settings lists from clobbering yaml fallbacks by @mateo-berri in #38406
- fix(team): allow no-reset default budgets for team members by @devin-ai-integration[bot] in #37708
- fix: forward image content lists to DeepSeek vision models by @yucheng-berri in #38397
- fix(fireworks_ai): stop using the trace id as the session affinity key by @Hamjaster in #35754
- fix(gemini-realtime): keep the client's voice on Vertex AI native-audio Live by @yucheng-berri in #38395
- fix(vertex_ai): bill Gemini grounding per unique web search query by @ousamabenyounes in #36397
- fix(health): make the image_edit health probe moderation-safe by @mateo-berri in #38417
- test: gate the test tree on fifteen assertion and handler rules it already satisfies by @ryan-crabbe-berri in #38361
- fix(proxy): key lazy openapi stubs off registered features, not sys.modules by @mateo-berri in #38416
- fix(proxy): derive auto-router health from its underlying models by @tin-berri in #38174
- fix(responses): let cache-control injection reach the system prompt from instructions by @tin-berri in #38120
- fix(gemini): bill Google Maps grounding as its own SKU by @mateo-berri in #38418
- fix(speech): keep proxy metadata and completion cost through the TTS completion bridge by @mateo-berri in #38414
- fix: map Gemini ON_DEMAND_FLEX traffic type to flex service tier by @bisma-nawaz in #37724
- feat(langfuse): support langfuse_environment as a per-key dynamic callback param by @devin-ai-integration[bot] in #38264
- feat(proxy): hide unhealthy models from model listings, opt-in by @yuneng-berri in #38313
- fix(mcp): honor admin-entered OAuth URLs on authorize after issuer yield by @mateo-berri in #38379
- fix(model_prices): correct gemini-3.5-flash-lite flex cache-read pricing by @mateo-berri in #38422
- fix(cost): price gemini-live-2.5-flash-native-audio realtime sessions by @mateo-berri in #38419
- fix(cost-map): correct Gemini TTS and native-audio rates by @mateo-berri in #38412
- fix(prompts): propagate PATCHed prompt templates to every worker and pod by @mateo-berri in #38411
- fix(model_prices): bill gemini -latest/preview alias cache reads at 10% of input by @mateo-berri in #38423
- fix(proxy): sync search tools into the router on management writes by @yuneng-berri in #38392
- feat(guardrails): track Azure Prompt Shield usage and cost with spend isolation by @yucheng-berri in #38387
- fix(prompts): apply prompt templates before routing on /v1/responses and honor ignore_prompt_manager_model by @mateo-berri in #38407
- fix(cost): make cost-breakdown headers respect service tier by @mateo-berri in #38424
- fix(mcp): add litellm[mcp] extra and actionable error when streamable_http_client is missing by @mateo-berri in #38399
- revert(proxy): remove router_model_name from auto-routed response bodies by @tin-berri in #38429
- fix(google_genai): price streamed generateContent with the provider that served it by @devin-ai-integration[bot] in #36055
- fix(logging): stop billing and logging response reads as LLM calls by @devin-ai-integration[bot] in #36890
- fix(budget): serialize model_max_budget before the /budget/update write by @yuneng-berri in #38430
- fix(ui): block the auto-router submit on a missing classifier model and an orphaned keyword rule by @tin-berri in #38427
- feat(complexity_router): heuristic-first classifier chaining by @tin-berri in #38428
- test(e2e): un-skip the per-model budget update case by @yuneng-berri in #38437
- fix(cost): stop double-billing cached tokens that overlap a modality by @Srivatsa03 in #37407
- feat(ui): add Teams list CSV export with budgets, model grants, and rate limits by @devin-ai-integration[bot] in #38436
- fix(mcp): accept raw x-litellm-api-key on streamable HTTP admission by @devin-ai-integration[bot] in #38364
- fix: bound row count on GET /spend/logs to stop unbounded LiteLLM_SpendLogs scans by @devin-ai-integration[bot] in #38420
- fix(scim): apply default_team_params (incl. models) to SCIM-created teams by @devin-ai-integration[bot] in #38433
- fix(prompts): propagate prompt deletes to every worker and pod by @mateo-berri in #38434
- fix(anthropic_adapter): carry web search cost into /v1/messages breakdown headers by @mateo-berri in #38439
- fix(ui): show custom technical keywords on every router whose scorer runs by @tin-berri in #38451
- fix(e2e): move the vertex realtime suite off the retired Live preview model by @yuneng-berri in #38454
- feat(newrelic): per-team cost and usage metrics via team callbacks by @yucheng-berri in #37610
- fix(ui): carry a preset's per-tier litellm_params through the prefill by @tin-berri in #38453
- fix(e2e): size the mid-conversation-system cache prefix above the minimum deterministically by @yuneng-berri in #38468
- fix(e2e): disable thinking on the gemini chat cost test instead of racing its budget by @yuneng-berri in #38469
- feat(ui): put the auto-router savings hero on a spend rail and a four-tile row by @tin-berri in #38470
- feat(ui): toggle internal health check visibility in request logs by @mateo-berri in #38391
- fix(mcp): canonicalize bearer scheme on bridge egress by @daniel-meismer-zocdoc in #38398
- refactor: clean up fresh tech debt from 2026-08-27 window by @devin-ai-integration[bot] in #38484
- fix(exception_mapping_utils): map unmapped exceptions when model and provider are unset by @mateo-berri in #38496
- fix(ui_sso): resolve highest privilege Entra app role, not first in claim by @imranismail in #36728
- fix(proxy): regenerate lazy OpenAPI snapshot and guard it in CI by @mateo-berri in #38410
- feat(ui): add cache hit/miss filter to Request Logs by @devin-ai-integration[bot] in #38432
- fix(bedrock): sign rerank requests with the shared header-filtered SigV4 helper (internal copy of #36462) by @mateo-berri in #38093
- fix(bedrock): sign rerank requests with the shared, header-filtered SigV4 helper by @noahnistler in #36462
- fix(ui): order the auto-routers table newest first so a new router lands on page one by @tin-berri in #38545
- feat(ui): run the Anthropic Family preset's reasoning tier on Opus 5 at high thinking by @tin-berri in #38490
- build(ui): bump nginx to 1.31-alpine by @devin-ai-integration[bot] in #38541
- feat(otel): support per-team/per-key service.name for OTel v2 destinations by @devin-ai-integration[bot] in #38532
- test(e2e): de-flake the cost-header cache read and the router fallback control by @yuneng-berri in #38435
- feat(gemini): day-0 support for gemini-3.5-transcribe and transcribe-live by @mateo-berri in #38540
- feat(health): opt-in model-group allowlist for background health checks and health-check routing by @mateo-berri in #38539
- fix(mcp): keep upstream OAuth Authorization when jwt signer hook injects one on tools/call by @devin-ai-integration[bot] in #38555
- fix: suppress misleading register_model unresolved-cost warnings for entries without custom pricing by @devin-ai-integration[bot] in #38542
- feat(proxy): opt-in budget rollover carrying overage into the next window by @devin-ai-integration[bot] in #38514
- fix(auth): skip guaranteed-miss team lookup for the litellm-dashboard sentinel by @devin-ai-integration[bot] in #38471
- fix(key_management): allow /key/update to keep or shrink MCP server grants the key already holds by @devin-ai-integration[bot] in #38463
- fix: keep schema reconciliation from fighting a partitioned LiteLLM_SpendLogs by @devin-ai-integration[bot] in #38452
- fix(ui): open select popups below the trigger instead of over it by @tin-berri in #38554
- fix(realtime): bill trailing audio when a Gemini transcribe Live session closes by @mateo-berri in #38563
- test(e2e): cover key generate and update on the Admin UI path by @yuneng-berri in #38448
- chore: bump litellm-enterprise 0.1.60 -> 0.1.61, litellm-proxy-extras 0.4.89 -> 0.4.90 by @yuneng-berri in #38566
- fix(ui): let the paginated search select keep what the user types by @yuneng-berri in #38475
- fix(otel): anchor MCP tool-call spans to the gateway's own trace, link the client's context by @yucheng-berri in #38317
- fix: roll up the open deflake fixes for the MCP logging queue, PTU rollup, license gate, and pricing test isolation by @devin-ai-integration[bot] in #37833
- fix(model_prices): rolling registry audit - verified models and rates for Novita, DeepInfra, W&B, Bedrock Sol, Gemini, Fireworks, Azure gpt-5.6, Mistral, Together by @devin-ai-integration[bot] in #38207
- test(together_ai): assert fail-open supported params for models missing from the registry by @mateo-berri in #38487
- test(e2e): let the together tool tests accept parallel calls by @yuneng-berri in #38567
- feat(mcp): let a resolved OAuth token target a custom upstream header by @tin-berri in #38456
- feat(together_ai): map reasoning_effort per model class by @mateo-berri in #38263
- feat(dashscope): support qwen-image-3.0 and qwen-image-3.0-pro image generation by @devin-ai-integration[bot] in #38449
- fix(cost): apply Together AI cache read pricing and per-model registry rates by @mateo-berri in #38280
- fix(guardrails): forward aws_external_id when the bedrock guardrail assumes a role by @devin-ai-integration[bot] in #38376
- fix(transcription): synthesize srt/vtt output for adapters without native subtitle formats by @mateo-berri in #38561
- fix(streaming): preserve provider service-tier metadata so Vertex flex streams bill at flex rates by @mateo-berri in #38458
- fix(realtime): bill Gemini Live native-audio output tokens at the audio rate by @mateo-berri in #38457
- fix(anthropic): carry tool_reference tool results through the guardrail translation round trip by @mateo-berri in #38465
- fix(anthropic-adapter): pass provider-native and OpenAI-format tools through on /v1/messages by @mateo-berri in #38431
- test(e2e): serve the vision image from our own fixture by @yuneng-berri in #38575
- feat(together_ai): add zai-org/GLM-5.3-Flash to the model registry by @mateo-berri in #38486
- fix(ui): stop server-searched comboboxes from clobbering picks and queries by @ryan-crabbe-berri in #38574
- feat(model_prices): let a map entry declare its exact reasoning_effort levels by @tin-berri in #38481
- fix(anthropic): carry the adaptive effort tier to every bridged Claude target by @tin-berri in #38533
- feat(alerting): add native Microsoft Teams alerting destination by @devin-ai-integration[bot] in #38367
- chore(proxy): resync the generated API artifacts with the current models by @tin-berri in #38587
- fix(router): reject complexity-router settings written outside complexity_router_config by @tin-berri in #38570
- feat(ui): session-level cache observability in request logs by @devin-ai-integration[bot] in #38442
- fix(ui): link Virtual Keys hint through the migrated /ui route by @devin-ai-integration[bot] in #38596
- fix(anthropic): carry the effort tier only where the target declares reasoning_effort by @tin-berri in #38592
- fix(presidio): chunk oversized text before /analyze so large content blocks do not fail by @yucheng-berri in #38483
- fix(logging): stop stream-based log collectors classifying INFO logs as errors by @yucheng-berri in #38476
- feat(ui): dry-run an auto-router config against the backend before saving it by @tin-berri in #38595
- fix(guardrails): add fail-open mode to CrowdStrike AIDR guardrail by @yucheng-berri in #38568
- fix(router): copy instead of mutating caller metadata when scrubbing fallback stamp keys by @yucheng-berri in #38586
- feat(proxy): opt-in enforce_fallback_model_access authorizes router fallbacks against the calling key by @ryan-crabbe-berri in #38572
- fix(langfuse): warn and drop invalid LANGFUSE_TRACING_ENVIRONMENT instead of failing requests by @yucheng-berri in #38582
- fix(tencent): route thinking through extra_body in chat completions by @FelipeRodriguesGare in #38100
- test-check-commits by @nickhac in #36344
- feat(proxy): dry-run a real request body on /auto_router/test_routing by @tin-berri in #38590
- fix(shadow_eval): refuse a judge model that also serves one of the arms it grades by @tin-berri in #38589
- fix(anthropic): resolve /v1/messages effort tiers through the capability owner by @tin-berri in #38492
- fix(router): fall over on raised mid-stream errors in /v1/messages streams by @mateo-berri in #38606
- feat(models): add daily Together AI model registry sync script and workflow by @mateo-berri in #38257
- feat(ui): the model and wire layer for operator-defined auto-router tier sets by @tin-berri in #38602
- fix(moonshot, together_ai): send the reasoning effort Kimi K3 accepts by @tin-berri in #38611
- fix(ui): one-click theme toggle and matching Docs/Blog styling in the top bar by @ryan-crabbe-berri in #38601
- feat(proxy): opt-in flags to require rpm/tpm on model and project create by @ansh-agrawal in #36514
- fix(exceptions): keep a refused connection an APIConnectionError by @yuneng-berri in #38624
- chore(ci): promote internal staging to main by @yuneng-berri in #38616
- fix(anthropic): drop and self-heal empty thinking blocks on /v1/messages by @tin-berri in #38625
- fix(anthropic): handle per-level reasoning_effort flags without supports_reasoning by @tin-berri in #38618
- fix(complexity_router): route client housekeeping calls to the cheapest tier by @tin-berri in #38598
- test: fix staging CI regressions from #38182, #38144, #38265, #37962, and #37969 by @mateo-berri in #38304
- feat(spend): report prompt caching savings as total and gateway-attributed by @tin-berri in #38134
- fix(proxy): let llm_api virtual keys read /model_group/info by @devin-ai-integration[bot] in #38662
- feat(ui): edit the auto-router tier set with custom classifier-defined tiers by @tin-berri in #38603
- fix(proxy): count tools, system, and Anthropic image and document blocks in the count_tokens fallback (internal copy of #36671) by @mateo-berri in #38657
- test: refresh the suites that drifted from langfuse and OpenAI's retired Assistants API by @yuneng-berri in #38637
- test(e2e): unskip four tests whose blockers no longer hold by @yuneng-berri in #38640
- feat(proxy): add paginated GET /public/v1/model_hub by @yuneng-berri in #38636
- refactor(ui): type search tool params from the generated schema by @yuneng-berri in #38633
- feat(a2a): semantic search over the agent registry via GET /v1/agents?query and an agent_search MCP tool by @mateo-berri in #38609
- fix(model_prices): add bedrock_mantle gpt-5.5/5.4 272K tiers, align sol with AWS invoice by @mateo-berri in #38615
- fix(ui): keep the usage filter visible when the caller's scope is empty by @yuneng-berri in #38581
- fix(registry): add Gemini Omni 1.1 Flash, xAI grok-imagine image models, Mistral cache-read pricing, GLM 5.3 Flash + Kimi K2.7 Code entries by @devin-ai-integration[bot] in #38560
- fix(logging): preserve null end user in callbacks by @yucheng-berri in #38642
- test: close mutation-testing gaps in container, skills and openai-like config factories by @yuneng-berri in #38677
- fix: enforce MCP toolsets attached to a team, org, or internal user by @yucheng-berri in #38488
- fix(tests): drain the global logging worker in RAG aquery billing tests by @devin-ai-integration[bot] in #38653
- chore(techdebt): type new signatures and drop slop comments from the last 24h by @devin-ai-integration[bot] in #38644
- feat(auto_router): write and preview the classifier prompt an edited tier set sends by @tin-berri in #38605
- fix(proxy): price the /v1/messages cost header by the deployment model, not the client alias by @mateo-berri in #38691
- fix(streaming): preserve provider model for cost calculation by @aaaaaandrew in #38656
- feat(models): sync together_ai model registry by @github-actions[bot] in #38694
- test(e2e): cover Together reasoning_effort=none, json_schema, and cache-read pricing by @mateo-berri in #38697
- fix(model_info): map supports_parallel_function_calling into ModelInfo by @mateo-berri in #38692
- test(litellm_utils_tests): give the aiohttp transport tests teeth by @devin-ai-integration[bot] in #38066
- fix(proxy): use default_factory for _BudgetCascade.rollover_caps by @yassin-berriai in #38687
- feat(guardrails): add Lakera v2 skip-message honoring and advisory (inject_system_message) mode by @deepanshululla in #34940
- fix(router): drop a tier param the routed target cannot take by @tin-berri in #38622
- fix(router): scrub fallback stamp keys in place and strip them at the proxy boundary by @yucheng-berri in #38690
- fix(shadow-eval): validate Anthropic SDK judge credentials by @tin-berri in #38701
- feat(ui): run the Lite preset's medium and complex tiers at their documented efforts by @tin-berri in #38482
- chore: drop stray learnings.md workflow note from CLAUDE.md by @yucheng-berri in #38704
- fix(spend): remove the proxy-wide autorouter savings baseline override by @tin-berri in #38700
- fix(router): tier-pinned reasoning_effort supersedes client effort carriers by @tin-berri in #38698
- fix(proxy): reset a key's budget-window counters on spend reset by @yassin-berriai in #38686
- feat(shadow_eval): measure both arms' cost so a job reports what the router would have saved by @tin-berri in #38631
- fix(gpt-5): stop forwarding temperature and top_p to reasoning models that reject them by @tin-berri in #38593
- fix(streaming): report response_cost and Anthropic citations from stream_chunk_builder by @mateo-berri in #38696
- feat(ui): make provider logos readable in dark mode by @yuneng-berri in #38588
- feat(terraform): resource and data source parity with the community provider by @shivamrawat1 in #38158
- test(shadow_eval): configure the anthropic sdk judge in the funnel-seed test by @yucheng-berri in #38717
- fix(ci): fall back to github.token when the GH_TOKEN secret is unset in the Together sync workflow by @mateo-berri in #38695
- feat(terraform): add litellm_jwt_key_mapping resource by @devin-ai-integration[bot] in #38714
- feat(terraform): coverage-enforcing CI gate against the latest OpenAPI spec by @devin-ai-integration[bot] in #38710
- fix(terraform): refresh jwt key mapping allowlist entries now that the resource is merged by @devin-ai-integration[bot] in #38720
- fix(guardrails): record post_call scans on native /v1/messages streams by @mateo-berri in #38713
- chore(deps): raise RestrictedPython floor to 8.5 by @yuneng-berri in #38715
- fix(proxy): trigger async_pre_call_hook on POST /v1/files uploads by @devin-ai-integration[bot] in #38607
- test(responses): adapt temperature tests to the gpt-5 reasoning validation by @mateo-berri in #38748
- fix(router): pin batch, file, and fine-tuning job ids to their owning model group on fallback by @mateo-berri in #38742
- fix(bedrock): map real batch record counts and guard zero-count retire by @mateo-berri in #38744
- fix(aws): forward aws_external_id in Bedrock embeddings and SageMaker credential loading by @mateo-berri in #38727
- fix(aws): build every AWS endpoint and ARN from the region's partition (aws-cn, aws-us-gov) by @mateo-berri in #38747
- refactor(types): replace Any with real types across 178 backend files by @mateo-berri in #38501
- feat(hosted_vllm): add vLLM-Omni videos API by @mubashir1osmani in #38148
- fix(databricks): derive OAuth token URL from workspace origin by @ump45nose in #35940
- test(e2e): add logging e2e coverage (s3_v2, gcs_bucket, team langfuse callback, datadog failure) by @yucheng-berri in #38552
- fix(batches): fill a managed batch page past rows that will not parse by @mateo-berri in #38738
- fix(proxy): tag routing misses proxy-merged tags when chat requests carry litellm_metadata by @mateo-berri in #38739
- fix(health): honor allow_requests_on_db_unavailable in readiness probe by @devin-ai-integration[bot] in #37640
- feat(mcp): support asymmetric (RS256) signing for MCP gateway session tokens by @devin-ai-integration[bot] in #38728
- fix(ui): make code blocks follow the theme in dark mode by @yuneng-berri in #38771
- perf(rust): use pythonize for bridge serialization by @yujonglee-berri in #38764
- fix(policy): let the AI policy suggester drop sampling params its model refuses by @tin-berri in #38594
- feat(ui): link team and key model chips to the models page filtered to that group by @ryan-crabbe-berri in #38626
- fix(ui): make the logs JSON viewer follow the theme in dark mode by @yuneng-berri in #38778
- chore: bump litellm-enterprise 0.1.61 -> 0.1.62, litellm-proxy-extras 0.4.90 -> 0.4.91 by @yuneng-berri in #38779
- refactor: clean up tech debt that landed on 2026-08-29 by @devin-ai-integration[bot] in #38743
- fix(managed resources): let keys with no user_id or team_id read their own batches and files by @devin-ai-integration[bot] in #34849
- fix(proxy): pin model reconcile read to the writer DB so /model/new does not 500 under read replica lag by @devin-ai-integration[bot] in #38580
- fix(ui): restore the reopen control for the log drawer's trace sidebar by @yuneng-berri in #38782
- fix(azure): use /openai/v1 image routes for v1, preview and latest api versions by @devin-ai-integration[bot] in #38285
- fix(soniox): align synthesized SRT/VTT cues to real speech timing by @dan2k3k4 in #34440
- fix(bedrock): route all cohere.embed models to the cohere embedding config by @devin-ai-integration[bot] in #38670
- feat(mcp_gateway): add RFC 7662 introspection for gateway session tokens by @devin-ai-integration[bot] in #38726
- fix(headroom): resolve CCR retrieval on streaming /chat/completions by @devin-ai-integration[bot] in #35017
- fix: bound Hugging Face config fetch and keep embedding tests off the network by @devin-ai-integration[bot] in #38752
- feat(vertex-ai): add veo 3.1 lite model metadata by @emerzon in #30782
- feat(proxy): cyberark conjur secret manager configuration via Admin UI by @devin-ai-integration[bot] in #38445
- ci: build the benchmark environment outside the CodSpeed runner by @devin-ai-integration[bot] in #38426
- fix(proxy): give every
requestscall a timeout so a silent server cannot hang the caller by @ryan-crabbe-berri in #38234 - fix(batches): aggregate reasoning tokens and per-line pass/fail counts by @mubashir1osmani in #37208
- fix(ui): allow in-place editing of classifier numeric inputs by @tin-berri in #38803
- fix(anthropic): emit signature-only thinking blocks on the /v1/messages bridge by @tin-berri in #38809
- fix(ui): keep a deleted-from search query instead of blanking the box by @yuneng-berri in #38830
- fix(proxy): run SMTP send_email off the event loop with a connection timeout by @devin-ai-integration[bot] in #38473
- feat(budgets): enforce shared budgets on model access groups by @ryan-crabbe-berri in #38784
- feat(vertex_ai): support gemini-3.5-transcribe on /v1/audio/transcriptions by @mateo-berri in #38740
- fix(anthropic_endpoints): serialize dict-detail HTTPExceptions on /v1/messages like sibling surfaces by @mateo-berri in #38741
- fix(proxy): count auto-router classifier cost in savings and benchmarks by @tin-berri in #38835
- feat(proxy): add LiteLLM_BudgetWindowSpend table for per-window budget spend by @ryan-crabbe-berri in #35854
- feat(policy_engine): execute post_call guardrail pipelines on streaming responses by @mateo-berri in #38788
- fix(models): registry audit: new Together/Fireworks/Gemini/Mistral/xAI models, xai retirement repricing, bedrock grok-4.6 caching, deprecation dates by @mateo-berri in #38804
- feat(proxy): maintain per-window budget spend rows in the spend writer by @ryan-crabbe-berri in #35886
- perf(proxy): read budget-window spend from the maintained window table by @ryan-crabbe-berri in #35887
- fix(together_ai): stop writing context_length as max_output_tokens in the serverless sync by @mateo-berri in #38820
- fix(openai): flatten top-level anyOf/oneOf/allOf in Responses API tool schemas by @mateo-berri in #38792
- fix(anthropic): cap reasoning_effort thinking budget below max_tokens on /v1/messages by @mateo-berri in #38836
- fix(azure): flatten top-level tool schema combinators for Azure Responses GPT-4-family deployments by @mateo-berri in #38837
- chore: rebuild Admin UI bundle for the next release by @yuneng-berri in #38846
- fix(proxy): list all non-team models for users with an empty model list by @devin-ai-integration[bot] in #38249
- fix(guardrails): stop Lakera monitor mode forwarding unmasked PII on Responses-API bodies by @yucheng-berri in #38841
- feat(mcp): bulk-import Anthropic MCP connectors via API and admin UI by @devin-ai-integration[bot] in #38444
- feat(ui): set a model access group's shared budget from the dashboard by @ryan-crabbe-berri in #38843
- fix(ui): drop stray text next to Close in the model connection test dialog by @yuneng-berri in #38852
- feat(helm): make extra ingress paths configurable in the componentized chart by @yassin-berriai in #35700
- fix(otel/v2): detach credential-routed tenant spans into their own trace by @yucheng-berri in #38847
- test(e2e): stop the reliability fallback tests flaking on gpt-5.5's reasoning budget by @yuneng-berri in #38833
- test(e2e): retry upstream-saturation failures in the claude CLI driver by @yuneng-berri in #38850
- chore(ci): promote internal staging to main by @yuneng-berri in #38805
- fix(proxy): emit timing headers and overhead for /v1/messages and /v1/responses by @yucheng-berri in #38840
- fix(tests): derive the no-cache-read-rate savings baseline from the model map by @tin-berri in #38863
- chore(typing): clear Any seams across 47 files, ratchet basedpyright ceilings -3,302 by @mateo-berri in #37778
- chore(typing): clear 1.2k basedpyright Any errors across 16 hotspot files by @mateo-berri in #36722
- feat(bedrock): honor streaming buffer/sampling config for unbuffered post_call scans by @mateo-berri in #38722
- feat(cli): set ENABLE_TOOL_SEARCH=true for lite claude by @mateo-berri in #38942
- fix(proxy): deliver budget alerts on webhook-only alerting and accept ALERTING_WEBHOOK_URL by @devin-ai-integration[bot] in #38441
- docs(claude.md): require tests to check behavior, not code structure by @ryan-crabbe-berri in #38772
- chore(newrelic): cover static default_team_settings per-team routing by @yucheng-berri in #38857
- fix: update stale source URLs and deprecation dates in model cost map by @devin-ai-integration[bot] in #38801
- feat(ci): close duplicate issues after a 3-day grace period by @mubashir1osmani in #38381
- docs(proxy): clarify spend semantics on /v2/user/info and /user/daily/activity by @devin-ai-integration[bot] in #38883
- fix(guardrails): configure Prompt Security file timeout policy by @davida-ps in #38083
- fix(bedrock): stop duplicating Converse config blocks inside inferenceConfig by @mateo-berri in #38993
- fix(guardrails): exclude images from HiddenLayer v1 scans by @Ashton-Sidhu in #29210
- feat(spend_tracking): persist router metadata in spend logs for internal router models by @mateo-berri in #39001
- fix(vertex_ai): graft default vertex path when api_base has a version-only path by @devin-ai-integration[bot] in #38986
- fix(proxy): allow unblocking customers via /customer/update by @cat0825 in #34696
- feat(openai): support workload identity federation (OIDC token exchange) by @mateo-berri in #38995
- fix(otel): emit cache token counts on OTel v2 LLM spans by @devin-ai-integration[bot] in #38716
- feat(proxy): add /v1/responses/input_tokens token counting endpoint by @mateo-berri in #38997
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 by @mateo-berri in #38917
- fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 in migrations image by @mateo-berri in #38973
- feat(friendli): add zai-org/GLM-5.3-Flash model pricing by @Lee-Si-Yoon in #38880
- chore(techdebt): clear fresh debt from the 2026-08-29 and 2026-08-30 windows by @devin-ai-integration[bot] in #38884
- fix(bedrock): surface Nova Sonic user transcripts, speech events, and usage in realtime API by @devin-ai-integration[bot] in #38597
- fix(guardrails): carry Anthropic url image sources through to guardrails by @samtsai15 in #38940
- feat(friendli): add zai-org/GLM-5.3 model pricing by @Lee-Si-Yoon in #38881
- fix(router): apply model renames to the in-memory deployment list by @yatishgoel in #38479
- test(e2e): cover SCIM token creation and SCIM API auth in the Admin UI suite by @yuneng-berri in #39027
- feat(gigachat): add native API passthrough routes with spend logging by @mateo-berri in #38913
- feat(gigachat): add passthrough gigachat route by @KnyazSh in #25886
- feat(complexity-router): add classification_mode to skip classifier on continuation turns by @tin-berri in #38861
- fix(proxy): preserve model table columns on master key rotation by @mateo-berri in #38878
- fix(speech): stop forwarding response_format as a chat param for Gemini TTS by @mateo-berri in #38819
- fix(proxy): return 200 from /model/block and /model/unblock instead of 500 by @mateo-berri in #38873
- feat(complexity_router): escalate oversized prompts to a tier that fits before dispatch by @tin-berri in #38844
- feat(shadow_eval): target teams and users so JWT-auth traffic can be evaluated by @tin-berri in #39015
- fix(anthropic_messages): drain upstream in a detached pump so client … by @nuernber in #36008
- refactor(proxy): bound the budget window seed by time instead of request ids by @ryan-crabbe-berri in #38851
- fix(proxy): ship psycopg so partitioned SpendLogs detection actually runs by @yassin-berriai in #38994
- test(e2e): assert user-observable behavior instead of DOM structure by @yuneng-berri in #39016
- build(rust): configure native extension profiles by @yujonglee-berri in #39020
- fix(ui): keep litellm_credential_name from LiteLLM Params JSON when no credential is selected by @devin-ai-integration[bot] in #39005
- Revert "fix(ui): keep litellm_credential_name from LiteLLM Params JSON when no credential is selected" by @yassin-berriai in #39046
- fix(auth): quiet malformed virtual key rejections to stdout by @yucheng-berri in #38838
- fix(proxy): wire team-level logging callbacks into passthrough endpoints by @yucheng-berri in #38979
- feat(complexity_router): opt-in modality-based capability routing for image requests by @tin-berri in #39032
- fix(ui): let the auto-router scoring tier list follow the theme by @tin-berri in #39040
- feat(ui): auto-router controls for context-window escalation by @tin-berri in #39054
- fix(redis): coerce env var string types and fix param discovery through decorator wrappers by @koladefaj in #30644
- feat(key management): show budget window usage on /key/info by @Thijmen in #37044
- fix(websearch): reject invalid explicit search tool selections by @georgeatparallel in #38113
- feat(shadow_eval): compare several auto-routers on one job's sampled traffic by @tin-berri in #39028
- fix(speech): honor pcm/wav response_format for Gemini TTS and reject unsupported containers by @mateo-berri in #38868
- fix(proxy): match /v1/audio/speech content-type to the returned audio format by @mateo-berri in #38798
- test(e2e): drop the two mgmt registry cells no shared-proxy test can cover by @ryan-crabbe-berri in #39055
- feat(ui): one classification frequency picker for complexity auto-routers by @tin-berri in #39042
- test(e2e/ui): automate 8 manual QA checklist flows by @yuneng-berri in #39025
- fix(key_management): allow non-admin key_type preset transitions on /key/update by @yuneng-berri in #39051
- chore(typing): clear 1.1k basedpyright Any errors across 53 backend files by @mateo-berri in #38796
- fix(openai): forward reasoning_effort for unknown model aliases instead of failing closed by @mateo-berri in #39065
- test(e2e-ui): poll credential availability before Test Connect to deflake multi-instance runs by @yuneng-berri in #39073
- feat(ui): modality routing toggle on the auto-router create and edit forms by @tin-berri in #39059
- fix(proxy): include litellm_model_table in GET /v2/team/list by @yassin-berriai in #39045
- fix(bedrock): mask signed request headers in guardrail debug log by @mateo-berri in #39044
- fix(bedrock): forward aws_external_id in files and batches credential loading by @mateo-berri in #39066
- fix(mcp): persist alias MCP grants verbatim instead of rewriting to local server ids by @ryan-crabbe-berri in #39119
- fix(responses): json-encode object tool call arguments in the chat completions bridge by @devin-ai-integration[bot] in #35417
- fix(cost): bill OCR annotation pages via annotation_cost_per_page by @mateo-berri in #38985
- fix(policy_engine): restore request guardrails list after pipeline allow by @mateo-berri in #39038
- fix(embeddings): omit encoding_format when the client omits it on OpenAI-compatible calls by @mateo-berri in #38774
- test: deflake MCP registry state, savings cost map, and MCP identity env reload tests by @devin-ai-integration[bot] in #38891
- feat(helm): add Argo CD PreSync hook and rollout strategy knobs to the componentized chart by @devin-ai-integration[bot] in #39112
- fix(registry): veo 3.1 pricing tiers + roll up open registry PRs (glm-5.2, Qwen3.8-Flash, gemma-4-31b, scribe_v2, fireworks/databricks deepseek v4) + deprecation dates by @devin-ai-integration[bot] in #38990
- test(ui): budget DOM-structure assertions in dashboard tests by @yuneng-berri in #39082
- test(ui): assert DataTable behavior instead of DOM structure by @yuneng-berri in #39084
- test(ui): query the screen instead of the render result by @yuneng-berri in #39085
- fix(ui): stop checkboxes stretching to the full width of a form field by @yatishgoel in #39108
- chore: bump litellm-enterprise 0.1.62 -> 0.1.63, litellm-proxy-extras 0.4.91 -> 0.4.92, litellm 1.100.0 -> 1.101.0 by @yuneng-berri in #39140
- revert: restore search tool fallback when no router is configured by @yuneng-berri in #39146
- test(websearch): register configured search tool in pre-request hook test by @mateo-berri in #39074
- feat(proxy): default to the v2 migration resolver, keep v1 as an opt-out by @yuneng-berri in #31125
- build(deps): bump browserslist to 4.28.8 to clear osv-scan by @devin-ai-integration[bot] in #39142
- fix(ui): render the skill detail page with theme tokens by @yuneng-berri in #39130
- feat: add Azure AI DeepSeek V4 Flash 0731 pricing by @yujonglee-berri in #39023
- fix(streaming): keep response id stable across streamed chunks by @Timik232 in #38106
- test(e2e/ui): cover the Budgets page create, edit and delete flows by @yuneng-berri in #39052
- feat(dashscope): add QwenCloud and Qwen AI Platform provider aliases by @mateo-berri in #39149
- fix(bedrock): forward native structured outputs on Invoke instead of silently inlining the schema by @tin-berri in #39070
- test(e2e/ui): cover creating, testing and deleting a guardrail by @yuneng-berri in #39053
- refactor(types): replace Any with precise types across 73 modules by @mateo-berri in #39104
- feat(models): add Claude Fable 5.1 across Anthropic, Bedrock, Vertex AI, and Azure AI by @devin-ai-integration[bot] in #39148
- feat(guardrails): add Alice guardrail by @seanyasno-af in #38898
- test(e2e/ui): cover the Logs page filter drawer by @yuneng-berri in #39056
- test(e2e/ui): stop the suite failing on things that are not regressions by @yuneng-berri in #39063
- test(e2e/ui): cover the team Settings tab by @yuneng-berri in #39058
- test(e2e/ui): cover the Usage page activity tabs by @yuneng-berri in #39061
- fix(ui): render the guardrail garden detail page with theme tokens by @yuneng-berri in #39131
- fix(responses): tool call id shape breaks gpt-5 -> claude fallback conversations by @mateo-berri in #39144
- fix(openai): drop tool_choice when request has no tools on chat completions by @mateo-berri in #39147
- chore(ci): promote internal staging to main by @yuneng-berri in #39141
- test(ui): pick select options by role instead of by text by @yuneng-berri in #39175
- feat(cost): support time-based off-peak pricing in cost calculation by @Srivatsa03 in #31725
- fix(openai): flatten top-level tool schema combinators on chat completions by @mateo-berri in #38839
- fix(s3): bound s3 object keys and download filenames for long Responses API ids by @yucheng-berri in #39164
- revert: default the proxy back to the v1 migration resolver by @yuneng-berri in #39178
- fix(prometheus): bound requested_model label cardinality on client failure paths by @mateo-berri in #39136
- feat(ui): add search to the Agent Hub tab and admin agents table by @ryan-crabbe-berri in #39155
- fix(anthropic): fix response_format for claude-fable-5-1 on Vertex AI and Bedrock by @devin-ai-integration[bot] in #39184
- fix: keep litellm_credential_name from LiteLLM Params JSON and gate stored credential attach to proxy admins by @yassin-berriai in #39047
- chore(ci): promote internal staging to main by @yuneng-berri in #39186
- test: exempt MockTransport request-shape embedding tests from VCR replay by @mateo-berri in #39185
- fix(ui): render the logs Tools panel with theme tokens by @yuneng-berri in #39129
- fix(proxy): default max_idle_connection_lifetime to 60s on DB URLs by @devin-ai-integration[bot] in #39134
- fix(mcp): follow tools/list pagination from upstream servers by @yucheng-berri in #39172
- fix(proxy): resolve router model aliases in /utils/supported_openai_params by @mateo-berri in #39000
- fix(azure): flatten top-level tool schema combinators on Azure chat completions by @mateo-berri in https://github.com/BerriAI/litellm/pull/38870
- fix(bedrock): route streamed responses-API output through the unified guardrail by @mateo-berri in https://github.com/BerriAI/litellm/pull/38734
- fix(ui): hide model write affordances from view-only admin sessions by @mateo-berri in https://github.com/BerriAI/litellm/pull/38872
- fix(cli): quote the Claude Code apiKeyHelper for cmd.exe on Windows by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39174
- fix(logging): guarantee max_parallel_requests slot release when streaming logging fails by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39093
- feat(alerting): slack alerts for per-user daily/monthly spend thresholds and spend anomaly detection by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/38438
- fix(docker): add public Wolfi apk repo to runtime image by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39033
- fix(router): keep order fallback on the requested order level by @emerzon in https://github.com/BerriAI/litellm/pull/38969
- test(e2e): cover retry-on-timeout and the context-window fallback by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39197
- fix(budget): reject known estimates over remaining budget under fail_closed_budget_enforcement by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39214
- fix: stop a cleared Team field from blocking personal key creation by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39206
- test: record each e2e test's source location in the JUnit report by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39209
- feat(router): fall back on anthropic safeguard refusals on /v1/messages by @tin-berri in https://github.com/BerriAI/litellm/pull/39157
- fix(proxy): report requested model on Anthropic streaming message_start by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35816
- fix(helm): reuse the generated master key Secret on helm upgrade by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39219
- fix(mcp): report per-server outcomes in aggregate REST tools/list by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39232
- fix(cost-map): retry transient boot fetch failures and recover config deployments dropped by a stale cost map by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39230
- perf(scim): resolve group members with one user table read per member by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39228
- fix(docker): install bedrock-realtime extra in monolith proxy images by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39223
- fix(aiohttp_transport): map transport-internal CancelledError to a retryable ConnectError by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39240
- fix(bedrock): gate Converse cachePoint emission on model prompt caching support by @tin-berri in https://github.com/BerriAI/litellm/pull/39210
- fix(datadog_llm_obs): send tool calls, tool results and cache tokens in DD's own fields by @tin-berri in https://github.com/BerriAI/litellm/pull/39222
- feat(prometheus): expose per-key and per-team rate limit allowed and used gauges by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39236
- feat(scim): add placeholder listing and merge so a shadowed account can be healed by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39231
- fix: normalize provider-specific cache token fields in OTel v2 usage by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39202
- fix: stop deployment default API key limits leaking into provider requests by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39211
- fix(proxy): keep passthrough logging metadata and model_info dicts when team callbacks are wired by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39216
- fix(guardrails): deliver modify_response block as valid SSE on streaming chat and Responses by @mateo-berri in https://github.com/BerriAI/litellm/pull/39036
- fix(search): forward search-tool params through the router, complete Parallel AI v1 param mapping by @jliounis in https://github.com/BerriAI/litellm/pull/37883
- fix(bedrock): stop Converse crashing on bearer-token auth without SigV4 credentials by @mateo-berri in https://github.com/BerriAI/litellm/pull/39166
- fix(policy_engine): apply post_call pipeline text rewrites on streams by @mateo-berri in https://github.com/BerriAI/litellm/pull/39233
- fix(docker): install saml extra in litellm-backend image by @ojensen-berri in https://github.com/BerriAI/litellm/pull/39291
- fix(guardrails): run apply_guardrail-only providers in logging_only mode by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39297
- feat(gemini): day-0 pricing for gemini-3.8-flash by @mateo-berri in https://github.com/BerriAI/litellm/pull/39340
- fix(vertex): avoid duplicate DeepSeek OCR model namespace by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39194
- feat(streaming): carry final response cost on streamed usage by default by @mateo-berri in https://github.com/BerriAI/litellm/pull/39069
- fix(rerank): map provider errors with the resolved provider on sync and async paths by @mateo-berri in https://github.com/BerriAI/litellm/pull/39176
- test(e2e): read JUnit properties off the real collected pytest Item by @mateo-berri in https://github.com/BerriAI/litellm/pull/39246
- feat(proxy): configurable display_name for the Anthropic-shaped /v1/models listing by @mateo-berri in https://github.com/BerriAI/litellm/pull/39238
- fix(helm): scale the classic chart's HPA out at the documented 60 percent CPU by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35975
- fix(gemini): return enabled thinking content by default by @mateo-berri in https://github.com/BerriAI/litellm/pull/39160
- fix: run access group key sync UPDATEs on the writer, not the read replica by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39128
- fix(models): registry audit 2026-09-01: openai realtime and long-context tiers, mistral aliases, voyage, xai, fireworks, together, scaleway, azure ai, govcloud, azure gov, cloudflare whisper, deprecation dates by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39170
- fix: apply optional_pre_call_checks and reject unsupported router settings on /config/update by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39249
- fix(vector_stores): s3 vectors search router bypass + rag query config drop + ui error swallow by @michelligabriele in https://github.com/BerriAI/litellm/pull/34788
- fix(models): key Azure DeepSeek V4 Flash 0731 by its Foundry catalog id by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39341
- fix(deps): raise the tornado and pypdf floors for six new advisories by @mateo-berri in https://github.com/BerriAI/litellm/pull/39188
- fix(headroom): stop re-compressing retrieved CCR content in client tool loops by @QuantumBreakz in https://github.com/BerriAI/litellm/pull/38591
- feat(agentcore-a2a): derive runtime session id from A2A message.contextId by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39371
- fix(proxy): share per-model budget counters across replicas through the spend counter cache by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39375
- fix(proxy-extras): give prisma migrate deploy its own timeout budget by @mateo-berri in https://github.com/BerriAI/litellm/pull/39365
- fix(proxy): route container create and list through model_list deployments by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39220
- test(build): validate release wheel contracts by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39021
- refactor(rust): extract domain-neutral Python interop by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39026
- refactor(rust): standardize the core Error type by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39331
- fix(ui): preserve full AgentCore runtime ARN in agent edit form by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39382
- feat(ui): update OpenAI preset model tiers by @tin-berri in https://github.com/BerriAI/litellm/pull/39396
- fix(router): resolve realtime session model to routed deployment by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36811
- fix(security): restrict and validate file uploads at /v1/files and /upload/logo by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39379
- feat(auth): enforce configurable password policy and SSO-only login by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39381
- fix(agents): redact secret litellm_params fields from all /v1/agents responses by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39389
- fix(otel): stamp Langfuse root observation input and output from the request task by @mateo-berri in https://github.com/BerriAI/litellm/pull/39369
- fix(guardrails): track and tear down presidio sibling callbacks on delete and update by @mateo-berri in https://github.com/BerriAI/litellm/pull/39271
- fix(spend): keep every-deployment scope on gateway cache-injection marks by @mateo-berri in https://github.com/BerriAI/litellm/pull/39241
- fix(proxy/db): keep prisma predicates from raising TypeError under a mocked prisma module by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39253
- fix(proxy): word database 503s by whether the fault is transient by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39256
- refactor(utils): remove the dead get_api_key provider-key resolver by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39260
- feat(mcp): semantic tool search for the native MCP Gateway by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39404
- fix(logging): redact credential query params from the uvicorn access log by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39293
- feat(model_prices): add meta/muse-spark-1.3 and its contributor tier by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39417
- refactor(core): move audio transcription into core by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39126
- fix(proxy): build coordination Redis from REDIS_* env vars unconditionally by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39410
- test: add interactive Rust Python parity harness in https://github.com/BerriAI/litellm/pull/39419
- test(proxy): verify NO_DOCS/NO_REDOC/NO_OPENAPI restrict every doc surface by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39378
- test(bedrock): accept the router kwarg in the knowledge base search fake by @mateo-berri in https://github.com/BerriAI/litellm/pull/39420
- refactor(python-bridge): split routes and add shared function tracing by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39031
- fix(python-bridge): harden sync and async execution boundaries by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39332
- refactor(python-bridge): declare sync and async routes once by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39333
- feat(python): unify Rust opt-in and bridge policy by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39334
- feat(router): add heuristic v2 complexity routing by @tin-berri in https://github.com/BerriAI/litellm/pull/39276
- fix(anthropic): upgrade legacy thinking to adaptive on adaptive-only Claude models for chat, Bedrock Converse, Invoke, Vertex AI, and Databricks by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39159
- fix(proxy): mark session/SSO/SAML cookies Secure behind a TLS-terminating reverse proxy by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39391
- fix(bedrock): honor BEDROCK_MANTLE_API_BASE on bedrock/mantle messages and chat URLs by @mateo-berri in https://github.com/BerriAI/litellm/pull/39364
- fix(bedrock): strip client_metadata from converse additionalModelRequestFields by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35967
- chore(techdebt): clear fresh debt from the 2026-08-31 and 2026-09-01 windows by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39091
- fix(mcp): cap tools preview and test-connection at the listing timeout and name the unreachable upstream by @mateo-berri in https://github.com/BerriAI/litellm/pull/38791
- fix(hosted_vllm): forward truncate_prompt_tokens on rerank requests by @mateo-berri in https://github.com/BerriAI/litellm/pull/39363
- fix(messages): drop cache_control ttl on non-Anthropic /v1/messages passthrough by @mateo-berri in https://github.com/BerriAI/litellm/pull/39355
- fix(bedrock_mantle): carry per-request AWS credentials into chat completions SigV4 signing by @mateo-berri in https://github.com/BerriAI/litellm/pull/39362
- feat(router): add a hybrid classifier that defers near tier boundaries by @tin-berri in https://github.com/BerriAI/litellm/pull/39403
- fix: recover the v2 migration resolver from concurrent migrate deploy deadlocks by @mateo-berri in https://github.com/BerriAI/litellm/pull/39187
- fix(ollama_chat): stamp finish_reason tool_calls when tool calls streamed before the done chunk by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39010
- fix(router): route Claude Code subagents through session router by @moe-berri in https://github.com/BerriAI/litellm/pull/39239
- fix(responses): keep namespace tools intact when a guardrail returns them unchanged by @mateo-berri in https://github.com/BerriAI/litellm/pull/39366
- fix(vector-store): resolve embedding credentials per request by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/38936
- test(e2e/ui): give the seeded users passwords that pass the default password policy by @mateo-berri in https://github.com/BerriAI/litellm/pull/39442
- fix(http_handler): honor HTTP(S)_PROXY / NO_PROXY when force_ipv4 uses the httpx transport by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39443
- fix(proxy): stop leaking internal exception details to clients by @yassin-berriai in https://github.com/BerriAI/litellm/pull/39380
- fix(guardrails): forward mode and streaming params to crowdstrike_aidr handler by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39317
- fix(mcp): gate the connect-time OBO pre-flight on the key's allowed servers by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39447
- fix(responses): keep provider response headers in streaming logging callbacks by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/38131
- fix(mcp): fence an outbound-token write against an overlapping invalidation by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35398
- feat(cli): pre-fill the SSO verification code in the browser when the proxy allows it by @mateo-berri in https://github.com/BerriAI/litellm/pull/39428
- fix(ui): paginate request logs by session groups server-side by @tin-berri in https://github.com/BerriAI/litellm/pull/39257
- feat(proxy): serve the auto-router preset catalog at runtime by @tin-berri in https://github.com/BerriAI/litellm/pull/39412
- docs: define Rust Python harness structure by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39456
- fix(guardrails): apply PUT /guardrails/{id} to the serving worker immediately and reject invalid configs with 422 by @mateo-berri in https://github.com/BerriAI/litellm/pull/38877
- test(responses): expect the 404 OpenAI now returns for an unknown model by @mateo-berri in https://github.com/BerriAI/litellm/pull/39457
- fix(guardrails): skip streaming guardrail rounds that re-scan cleared output by @mateo-berri in https://github.com/BerriAI/litellm/pull/39386
- fix: keep litellm importable on Python 3.10 and guard 3.11-only typing imports in CI by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39448
- fix(proxy): keep SpendLogs and callback session ids in sync when the request has none by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39450
- feat(router): arm safeguard-refusal fallback on generic chains when no content-policy list exists by @tin-berri in https://github.com/BerriAI/litellm/pull/39274
- feat(azure): support credential chain for storage by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39229
- chore(crowdstrike): expect the deduped end-of-stream scan in crowdstrike cadence test by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39467
- fix(model_armor): handle Anthropic Messages and Responses streams in post_call by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39181
- test: add OCR python-to-rust test parity ledger (WIP) in https://github.com/BerriAI/litellm/pull/39434
- feat(complexity_router): opt-in modality override of a kept session-affinity pin by @tin-berri in https://github.com/BerriAI/litellm/pull/39454
- feat(datadog_llm_obs): cost tag dimensions, router decision fields, reasoning token metric, redaction gating by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39402
- test(rust-python-harness): wire existing e2e SDK tests into the matrix in https://github.com/BerriAI/litellm/pull/39463
- fix(mcp): never exchange the LiteLLM virtual key as the upstream subject token by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39446
- test: add mistral ocr transformation parity coverage in https://github.com/BerriAI/litellm/pull/39482
- test(vector-store): accept embedding_executor in the Bedrock KB hook fake handler by @mateo-berri in https://github.com/BerriAI/litellm/pull/39472
- refactor(s3_vectors): embed search queries through the shared vector store executor by @mateo-berri in https://github.com/BerriAI/litellm/pull/39474
- fix(xai): bill from the cost xAI reports instead of recomputing it (internal copy of #36281) by @mateo-berri in https://github.com/BerriAI/litellm/pull/39441
- feat(ui): add 1M context auto-router preset by @tin-berri in https://github.com/BerriAI/litellm/pull/39490
- fix(ui): stop the create team form resetting organization and models by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39476
- fix(ui): read the preset catalog at runtime in the dashboard tests by @tin-berri in https://github.com/BerriAI/litellm/pull/39478
- fix(sso): resolve multi-valued role claims to the highest privilege role by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39480
- fix(guardrail): hide-secrets playground redaction and guardrail telemetry by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39398
- fix(test): drop the duplicate embedding_executor arg in the Bedrock KB fake handler by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39502
- fix(ui): keep Virtual Keys list state in the URL so it survives leaving the page by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39481
- fix(proxy): 404 a credential delete that matched nothing, and raise instead of return by @eeshsaxena in https://github.com/BerriAI/litellm/pull/36260
- fix(proxy-extras): only spend a migrate-deploy attempt when a pass made no progress by @mateo-berri in https://github.com/BerriAI/litellm/pull/39506
- feat(cli): enable Claude Code gateway model discovery by default in lite claude by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39445
- fix(docker): bump nginx runtime to 1.31.5-alpine3.24 and pin digest by @rakeshrepository in https://github.com/BerriAI/litellm/pull/39561
- fix: 1.99.0-rc2 UI bug batch (empty org on key create, session pagination, access group rename/delete) by @mateo-berri in https://github.com/BerriAI/litellm/pull/39436
- feat(auto-router): support classifier reasoning effort by @moe-berri in https://github.com/BerriAI/litellm/pull/39372
- fix(ui): replace the key detail URL entry when a virtual key is rotated by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39471
- test(timeout): time out against the local fake endpoint instead of api.openai.com by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39583
- test(harness): add OCR parity with migration strategy runners by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/38765
- fix(databricks): strip thinking_blocks and reasoning_content from outbound messages by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39409
- test(ocr): record provider fixtures in the migration harness by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39425
- feat(ui): keyset-paginate request logs by session trace by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/38794
- fix(proxy/db): translate libpq sslrootcert and verify-* into Prisma's strict TLS params by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39563
- fix(agents): keep the published agent in public_agent_groups by @mateo-berri in https://github.com/BerriAI/litellm/pull/39554
- fix(mcp): scope allow-all servers to virtual keys by @tin-berri in https://github.com/BerriAI/litellm/pull/39531
- fix(team): generate team IDs for blank input by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39571
- fix(bedrock_mantle): stop dropping the web_search tool on /v1/responses by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35987
- chore: bump litellm-enterprise 0.1.63 -> 0.1.64, litellm-proxy-extras 0.4.92 -> 0.4.93 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39595
- fix(images): forward gpt-image supported params like background to OpenAI and Azure by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39525
- fix(proxy): return persisted team memberships from /user/new so first CLI login gets the default team by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39545
- fix(spend_tracking): add missing_session_id: omit to leave SpendLogs.session_id null without a client session by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39458
- fix: stop a cleared Organization field from failing key creation by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39316
- fix(ui): show MCP servers and agents inherited from access groups on team overview by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39215
- fix(proxy): expose configured mode for auto-router models by @moe-berri in https://github.com/BerriAI/litellm/pull/39619
- fix(ui): aggregate session token usage in the logs table by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39598
- fix(cost): apply off_peak_pricing in the dashscope cost calculator by @mateo-berri in https://github.com/BerriAI/litellm/pull/39592
- test(bedrock): drop EOL cohere.command-r-plus-v1:0 from local_testing by @mateo-berri in https://github.com/BerriAI/litellm/pull/39608
- fix(openai): default stream usage on PrivateLink and regional api.openai.com hosts by @mateo-berri in https://github.com/BerriAI/litellm/pull/39614
- fix(proxy): drop anthropic-beta on the Vertex passthrough count-tokens route by @mateo-berri in https://github.com/BerriAI/litellm/pull/39597
- fix(headroom): resolve CCR retrieval on streaming /v1/responses by @mateo-berri in https://github.com/BerriAI/litellm/pull/38808
- fix(openai): bridge gpt-5.4+ tool calls to /v1/responses on every api.openai.com host by @mateo-berri in https://github.com/BerriAI/litellm/pull/39587
- fix(router): pin JWT-authenticated callers by user id in deployment_affinity by @mateo-berri in https://github.com/BerriAI/litellm/pull/39594
- fix(cost): bill bedrock_mantle web search at $12 per 1k queries using Bedrock's reported count by @mateo-berri in https://github.com/BerriAI/litellm/pull/39610
- fix(azure_ai): don't reclassify Foundry deployments as azure provider by @mateo-berri in https://github.com/BerriAI/litellm/pull/38975
- fix(vector_stores): only list vector stores the caller was granted by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39612
- feat(models): add gpt-6-astra pricing and metadata by @mateo-berri in https://github.com/BerriAI/litellm/pull/39622
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39593
- feat(router): limit heuristic_v2 auto-routers to one without the auto_router license feature by @tin-berri in https://github.com/BerriAI/litellm/pull/39468
- fix(ui): clear agents when updating team permissions by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39600
- fix(auto_router): bill the routing embedding to the caller's key and team by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39532
- test(router): cover get_configured_mode so router_code_coverage passes by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/39630
- fix: treat gpt-6 names as the gpt-5 request family in OpenAI and Azure configs by @mateo-berri in https://github.com/BerriAI/litellm/pull/39631
- fix(prompts): key the in-memory prompt registry by environment by @mateo-berri in https://github.com/BerriAI/litellm/pull/38440
- fix(ui): let the Internal Users search box match user_id as well as email by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39604
- test(responses): bound the background stream cancel e2e so an upstream stall skips fast by @mateo-berri in https://github.com/BerriAI/litellm/pull/39617
- fix(vertex): add the API version to versionless project routes on the Vertex passthrough by @mateo-berri in https://github.com/BerriAI/litellm/pull/39625
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39648
- fix(spend_tracking): key /v1/messages spend rows on the msg_ id the client received by @mateo-berri in https://github.com/BerriAI/litellm/pull/39511
- ci(rust): build and test the ai-gateway server feature by @mateo-berri in https://github.com/BerriAI/litellm/pull/39493
- ci(ui): run the UI build check through the image's ui-builder stage by @mateo-berri in https://github.com/BerriAI/litellm/pull/39496
- fix(proxy): parse numeric multipart fields on /v1/images/edits back into numbers by @mateo-berri in https://github.com/BerriAI/litellm/pull/39510
- fix(guardrails): remove the module-global translation mapping that leaked between tests by @mateo-berri in https://github.com/BerriAI/litellm/pull/39543
- feat(azure_ai): add grok-4.6 to the model cost map by @mateo-berri in https://github.com/BerriAI/litellm/pull/39426
- fix: attach vector store search_results when a guardrail is registered by @mateo-berri in https://github.com/BerriAI/litellm/pull/38984
- fix(proxy): stop putting the literal string "None" in error payloads by @mateo-berri in https://github.com/BerriAI/litellm/pull/39521
- fix(router): keep retry breadcrumbs per request and out of the request snapshot by @mateo-berri in https://github.com/BerriAI/litellm/pull/39491
- fix(vector-stores): survive a failing vector store search in the chat completions hook by @mateo-berri in https://github.com/BerriAI/litellm/pull/39495
- fix(utils): redact credential kwargs from the set_verbose request line by @mateo-berri in https://github.com/BerriAI/litellm/pull/39526
- fix(bedrock): skip the SigV4 credential chain when a bearer token is configured by @mateo-berri in https://github.com/BerriAI/litellm/pull/39411
- fix(proxy-extras): kill the whole Prisma process group when a command times out by @mateo-berri in https://github.com/BerriAI/litellm/pull/39466
- fix(rag): forward the managed vector store's params to the search call by @mateo-berri in https://github.com/BerriAI/litellm/pull/39452
- fix(utils): redact credentials nested in extra_body on the verbose optional-params line by @mateo-berri in https://github.com/BerriAI/litellm/pull/39538
- fix(containers): pass upstream error status through and forward list pagination params by @mateo-berri in https://github.com/BerriAI/litellm/pull/39464
- fix(anthropic_messages): key bridged streaming spend rows on the streamed msg_ id by @mateo-berri in https://github.com/BerriAI/litellm/pull/39541
- fix(helm): render ingress-nginx compatible path types via ingress.controller by @mateo-berri in https://github.com/BerriAI/litellm/pull/39465
- fix(cache): use sync Redis batch reads by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39358
- fix(guardrails): rebuild the serving worker guardrail on PUT instead of patching it in place by @mateo-berri in https://github.com/BerriAI/litellm/pull/39243
- test(team-race): wait on pg_locks instead of a fixed sleep by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39611
- fix(agents): hide agents from non-admins who were never granted them by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39636
- fix(team_endpoints): stop partial /team/update from wiping team metadata by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36328
- test(router): cover configured mode lookup by @moe-berri in https://github.com/BerriAI/litellm/pull/39634
- fix(responses): encrypt the response id on every streamed event by @mateo-berri in https://github.com/BerriAI/litellm/pull/39534
- fix(mcp): resolve OAuth broker endpoints by server_id with IP access checks by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39432
- feat(proxy): enforce team isolation for provider-format batch ids and output files by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33536
- fix(mcp): strip inbound auth scheme case-insensitively before token exchange by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39346
- fix(mcp): normalize a schemed authentication_token on the v2 and OpenAPI static paths by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39345
- fix(docker): match USE_DDTRACE case-insensitively and route build_from_pip through prod_entrypoint.sh by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39344
- perf(auth): skip object permission DB lookup when no vector stores requested by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39347
- fix(caching): don't trip redis circuit breaker on short timeout bursts by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/38999
- fix(access_groups): derive attached teams from the team table and reject unknown team ids by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39218
- test(router): drop duplicate get_configured_mode test failing ruff F811 by @mateo-berri in https://github.com/BerriAI/litellm/pull/39659
- feat(cost): honor off_peak_pricing reasoning and cache-creation rates by @mateo-berri in https://github.com/BerriAI/litellm/pull/39635
- fix(openai): mint workload identity tokens for PrivateLink and regional api.openai.com hosts by @mateo-berri in https://github.com/BerriAI/litellm/pull/39652
- feat(ui): find rows by a pasted ID on keys, agents, memory, audit, and request logs by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39661
- test(proxy-extras): fake run_prisma instead of subprocess.run in the migrate deploy harness by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39669
- fix(scim): default-team fallback on create and keep memberships when PUT /Users has no groups by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39623
- fix(router): count tools and Anthropic system prompt in context-window pre-call check by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39663
- test(proxy-extras): repoint the migrate-deploy harness at the run_prisma seam by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/39673
- perf(spend): group /spend/logs summary by day in Postgres instead of per-row Prisma group_by by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39351
- fix(proxy): apply default_vertex_config location before building the Vertex passthrough base URL by @mateo-berri in https://github.com/BerriAI/litellm/pull/39662
- fix(anthropic_endpoints): return Anthropic type:error envelope for /v1/messages errors by @mateo-berri in https://github.com/BerriAI/litellm/pull/39037
- feat(ui): configure auto-router session affinity TTL by @tin-berri in https://github.com/BerriAI/litellm/pull/39679
- perf(mcp): cache SSO identity assertion reads on the ID-JAG path by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39348
- test(e2e): match the Internal Users search placeholder shipped by #39604 by @mateo-berri in https://github.com/BerriAI/litellm/pull/39678
- fix(ui): scroll admin table rows inside the table instead of the page by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39684
- fix(router): evict stale global pattern_router entries on upsert/delete by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39664
- fix(caching): keep a node timeout from forcing a cluster-wide topology reinit on redis-py 8.x by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39349
- fix(logging): blocked requests no longer report guardrail_status=success in multi-guardrail configs by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39596
- fix(snowflake): normalize Cortex Claude request shapes by @tin-berri in https://github.com/BerriAI/litellm/pull/39453
- feat(proxy): per-worker admission control that rejects excess requests with 503 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39352
- fix(proxy): emit SSE keepalives on queue, rag, azure passthrough, usage chat and policy enrich streams by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39273
- fix(azure): restrict the storage credential chain to deployment identities by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39637
- fix(model_checks): drop wildcard routes like bedrock/* from /v1/models by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/31731
- fix(mcp): pre-flight the ID-JAG credential at the transport edge by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35392
- feat(caching): add semantic_cache_scope to isolate semantic cache hits per end user by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39590
- feat(ui): add one-click Auto Router setup by @moe-berri in https://github.com/BerriAI/litellm/pull/39693
- fix(ci): pin setup-uv to v10.0.1 by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39111
- refactor(tests): restructure rust python harness around strategy definitions by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39628
- test(ocr): complete Rust unit test parity by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39689
- feat: page the public model hub table off /public/v1/model_hub, keeping every filter by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39691
- refactor(rust): extract config crate by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39706
- feat(python): rename Rust rollout API by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39704
- fix: restore Python compatibility and test 3.10 through 3.14 by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/39399
- fix(spend-tracking): keep batch spend keys joinable after v1.99 provenance gate by @mateo-berri in https://github.com/BerriAI/litellm/pull/39568
- test: repair four chronically failing CI tests by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39770
- feat(team): report per-user spend within a team for JWT traffic by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39771
- feat(router): add classifier circuit breaker by @moe-berri in https://github.com/BerriAI/litellm/pull/39701
- ci: report every failing test in a job instead of stopping at the first by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39772
- test(caching): drive the redis stall burst off the clock, not asyncio.wait_for by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39773
- fix(ui): clamp server-paginated DataTable page index when rowCount shrinks by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39776
- feat(mcp): use x-mcp-<access_group>-* headers as default upstream credentials for group members by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39717
- fix(ui): paginate per-user usage with the shared server-side DataTable footer by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39682
- fix(proxy): log mid-stream /v1/messages failures as failures with partial usage by @mateo-berri in https://github.com/BerriAI/litellm/pull/39589
- fix(cost): honor off_peak_pricing in the fireworks_ai and perplexity cost calculators by @mateo-berri in https://github.com/BerriAI/litellm/pull/39632
- fix(organization): clear org budget limits when PATCH /organization/update sends null by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39670
- fix(organization): reject negative limits and unparseable budget_duration on PATCH /v2/organization by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39793
- feat(organization): expose PATCH /v2/organization/{organization_id} in the OpenAPI schema by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39794
- fix(auto-router): route 1M complex tier to GPT Sol by @tin-berri in https://github.com/BerriAI/litellm/pull/39797
- fix(bedrock_mantle): anchor MANTLE_HOST_RE so custom Mantle hosts are honored by @mateo-berri in https://github.com/BerriAI/litellm/pull/39361
- fix(health): probe test_connection with the credential the request names by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39801
- fix(router): bound auto-router classifier latency by @moe-berri in https://github.com/BerriAI/litellm/pull/39696
- fix(ui): accept any routing group name the backend accepts by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39807
- fix(model_prices): verified registry audit, Databricks Sep-2026 catalog, realtime image pricing, deprecation dates by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39388
- fix(jwt): invalidate JWT key mapping cache on /key/regenerate by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39808
- fix(complexity_router): fall back to a live peer when the decided tier model is fully cooled down by @tin-berri in https://github.com/BerriAI/litellm/pull/39675
- feat(guardrails): roll up Bedrock guardrail cost per usage counter by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39196
- fix(auto_router): derive tier definitions in prompt editor by @tin-berri in https://github.com/BerriAI/litellm/pull/39688
- fix(proxy): recognize opencode's bare x-session-id header for session affinity by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39802
- feat(cli): sync OpenCode models from /v1/models in lite opencode by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39789
- fix(spend-tracking): keep internal service-account key names readable in spend logs by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39572
- fix(anthropic): never carry cache_control on translated thinking blocks by @moe-berri in https://github.com/BerriAI/litellm/pull/39815
- fix(responses/mcp): keep follow-up calls stateless when store=false by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36575
- fix(router): resolve retry_policy by exception hierarchy, add ServiceUnavailableErrorRetries and DefaultRetries by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/35853
- fix(headroom): bound the /v1/compress and /v1/retrieve calls with a timeout by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39527
- feat(vector_stores): add a MongoDB vector store provider for Atlas and self-managed deployments by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39811
- fix(fireworks_ai): resolve tool_choice and reasoning support for short model names by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39763
- fix(datadog_llm_obs): keep the guardrail audit record under message redaction by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39702
- fix(proxy): invalidate end-user spend counter and cache on budget reset (#39726) by @amasen02 in https://github.com/BerriAI/litellm/pull/39729
- fix(proxy): strip every TypedDict qualifier before numeric form-field detection by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39780
- fix(bedrock): stop sending toolConfig tool definitions to guardrails on passthrough converse by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39281
- feat(shadow_eval): judge tool-call turns instead of dropping or erroring on them by @moe-berri in https://github.com/BerriAI/litellm/pull/39818
- feat(router): auto-escalate stalled complexity-router tasks by @moe-berri in https://github.com/BerriAI/litellm/pull/39809
- fix(team_endpoints): let member_delete clear a team left on the user row by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/38703
- feat(cost-map): add azure/gpt-6-astra and azure/us/gpt-6-astra Foundry pricing by @mateo-berri in https://github.com/BerriAI/litellm/pull/39827
- feat(complexity_router): let the LLM classifier see request images by @tin-berri in https://github.com/BerriAI/litellm/pull/39825
- feat(access-groups): resolve resource names on access group responses by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39822
- fix(datadog_llm_obs): keep guardrail_cost_by_unit on redacted spans by @mateo-berri in https://github.com/BerriAI/litellm/pull/39848
- test(store_model_in_db): assert the 400 contract in the unknown-model spend log test by @mateo-berri in https://github.com/BerriAI/litellm/pull/39842
- feat(cli): add
lite debug claudesession report and /debug-lite slash command by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39435 - test: deflake JWT tamper, fuzzy picker, tag routing, liveliness, redis stall burst, and pre-commit interrupt tests by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39306
- feat(otel): stamp litellm.request.route on the LLM call span by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39698
- feat(shadow_eval): scope a job to model groups, ANDed with its key, team, and user targets by @tin-berri in https://github.com/BerriAI/litellm/pull/39828
- test(e2e/batches): assert Bedrock batch cancel and list in the lifecycle by @mateo-berri in https://github.com/BerriAI/litellm/pull/39847
- refactor: clear fresh tech debt from the last 24 hours (2026-09-03, 2026-09-04) by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39518
- refactor(typing): cut 1,397 Any errors across 183 backend files by @mateo-berri in https://github.com/BerriAI/litellm/pull/39461
- fix(responses): decode JSON-string tool schemas before sending to the provider by @tin-berri in https://github.com/BerriAI/litellm/pull/39844
- feat(helm): render nodeSelector, tolerations, and affinity on the componentized chart migrations Job by @mateo-berri in https://github.com/BerriAI/litellm/pull/39843
- fix(mcp): let config.yaml MCP servers pin server_id by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39286
- feat(dashboard): configure classifier vision input by @tin-berri in https://github.com/BerriAI/litellm/pull/39840
- fix(batches): register ownership for every batch create path by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39810
- fix(proxy): gate the OpenAI websocket passthrough behind an explicit opt-in by @mateo-berri in https://github.com/BerriAI/litellm/pull/39841
- fix(ui): bring the inline-object lint budget back under its ceiling by @mateo-berri in https://github.com/BerriAI/litellm/pull/39856
- fix(realtime): relay the upstream websocket close to the client instead of hanging by @mateo-berri in https://github.com/BerriAI/litellm/pull/39851
- feat(router): meter auto-router tier and prompt customization against the auto_router license feature by @tin-berri in https://github.com/BerriAI/litellm/pull/39674
- fix(shadow_eval): size the judge output cap for a judge that reasons by @moe-berri in https://github.com/BerriAI/litellm/pull/39817
- feat(organization): expose PATCH /v2/organization/{organization_id} in the OpenAPI spec by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39672
- fix(ui): make Admin UI table pagination honor the selected page size by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39680
- chore: bump litellm-enterprise 0.1.64 -> 0.1.65, litellm-proxy-extras 0.4.93 -> 0.4.94 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39912
- test(e2e): repair the wildcard readiness probe and the semantic auto-router spend assertion by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39804
- fix(guardrails): record guardrail information for undecorated custom apply_guardrail overrides by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39727
- feat(responses): honor supported_endpoints /v1/responses opt-in for OpenAI-compatible deployments by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39725
- fix(router): hold max_parallel_requests slot until streaming response is exhausted or closed by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39859
- fix(proxy): retry deadlocks and requeue spend logs on any DB write error by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39883
- fix(mcp): reject URL credentials for none auth by @tin-berri in https://github.com/BerriAI/litellm/pull/39926
- fix(hide-secrets): stop redacting benign identifiers by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39879
- perf(logging): scan large base64 payloads for log truncation off the event loop by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39890
- fix(proxy): make the invalid-model 403 path cheap under a burst of rejections by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39892
- test(e2e): cover Anthropic /chat/completions streaming and tool calls by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39916
- fix(router): coordinate async and sync failure handlers at remaining router call sites by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39887
- fix(cloudzero): infer daily batch schema from every row by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39871
- fix(cloudzero): preserve late resource tags by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39873
- feat(ui): deep link guardrail detail with ?guardrail= on guardrails pages by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39930
- test: repair two CI tests broken by intentional changes by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39932
- feat(terraform/gcp): dependencies-only mode and bring-your-own-network for GKE by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39695
- test(e2e): cover Anthropic and OpenAI prompt caching, Cohere embeddings, and costed /openai chat passthrough by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39920
- test(e2e): cover key spend reset, regenerate grace period, and the llm_api_routes grant by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39917
- test(e2e/ui): select 50 rows per page before asserting the Tags and Model Hub tables overflow by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39934
- feat(auto-router): decouple compression between the routing decision and the model call by @moe-berri in https://github.com/BerriAI/litellm/pull/39823
- feat(mcp): renew the stored SSO identity assertion behind ID-JAG by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35401
- feat(mcp): warn when an oauth2_id_jag server outruns the SSO provider's assertion capture by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35394
- perf: lazy-load SDK symbols so import litellm stays under 60 MB RSS by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39121
- test(e2e): cover presidio post_call, tool_permission, and weave logging cells by @yucheng-berri in https://github.com/BerriAI/litellm/pull/39279
- fix(ci): grant pull_requests write for release wheel reporter by @cursor[bot] in https://github.com/BerriAI/litellm/pull/39922
- feat(guardrails): add non-blocking flag() verdict to custom code guardrails by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39728
- feat(proxy): serve Prometheus /metrics from a separate process via --prometheus_metrics_port by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39889
- fix(mcp): scan and mask MCP tool call arguments in unified guardrails by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35142
- fix(proxy): reject ambiguous name or alias keys in mcp_tool_permissions on write by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39947
- test(e2e): stream a longer /v1/messages reply so the delta-count pin has margin by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39946
- feat(ui): show guardrail usage units and cost on the Guardrails Monitor by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39853
- fix(ui): show indirectly granted and name-keyed MCP servers in the tool matrix by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35154
- test(e2e): prove Vertex context caching on the first cold call and on the spend row by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39938
- feat(ocr): add Cohere Parse support for cohere and azure_ai by @mateo-berri in https://github.com/BerriAI/litellm/pull/39862
- fix(proxy): keep guardrail cost in spend on cache hits by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39960
- test(e2e): judge /v1/messages streaming on the clock, not on the provider's delta count by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39953
- fix(ui): remove unreachable AI Hub dialog that put the session key in a URL by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/39968
- fix(ui): read Usage Total Requests tile from gateway request counts by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/39963
- revert: perf: lazy-load SDK symbols so import litellm stays under 60 MB RSS (#39121) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39969
- chore: rebuild Admin UI bundle for the next release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39959
- chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/39849
- fix(proxy): redact provider keys from pass-through failure tracebacks by @mateo-berri in https://github.com/BerriAI/litellm/pull/39964
- fix(file_search): scope emulated file_search to the request's vector stores by @mateo-berri in https://github.com/BerriAI/litellm/pull/39972
- feat(cli): add lite pi to run the pi coding agent through the proxy by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36841
- feat(pricing): add GovCloud pricing for every live but unpriced Bedrock model by @mateo-berri in https://github.com/BerriAI/litellm/pull/39764
Full Changelog: https://github.com/BerriAI/litellm/releases/tag/v1.108.0