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.110.0-dev.1Verify using the release tag (convenience):
Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.110.0-dev.1/cosign.pub \
ghcr.io/berriai/litellm:v1.110.0-dev.1Expected output:
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
What's Changed
- build: allow filelock 4.x and sync package metadata by @tin-berri in #49137
- fix(proxy)!: stop answering with the literal string "None" as error type and param on the proxy-server, auth, spend, and key health routes by @mateo-berri in #39540
- fix(token_counter): price PDF pages for OpenAI and Azure models the way they bill by @mateo-berri in #47554
- fix(ci): measure PR gates from the target branch's current tip by @tavren27 in #49078
- fix(wandb): set GLM-5.2 max_input_tokens from the CoreWeave Forge page by @devin-ai-integration[bot] in #49148
- fix(streaming): rebuild each choice of an n>1 chat stream on its own by @simonp9 in #49002
- fix(batches): return real batch token counts next to OpenAI's batch usage fields by @mateo-berri in #47740
- chore(cost-map): add fireworks ultramarine 1 flash us and date deepseek v4 flash by @devin-ai-integration[bot] in #49146
- chore(databricks): retirement dates for DeepSeek V4 Flash (0731), V4 Pro (0813) and Inkling by @devin-ai-integration[bot] in #49124
- fix(cost-map): set together_ai Qwen3.7-Max back to the published price by @devin-ai-integration[bot] in #49125
- refactor(types): replace Any with proven types in 21 files by @norkelbyte in #48921
- fix: enforce LiteAdmin MCP route permissions by @tin-berri in #48080
- feat(providers): add CLF AI Gateway as an OpenAI-compatible provider with ten models by @bap1106 in #39324
- fix(vertex_ai): batch Claude models in Anthropic's native row shape by @Gopal3746 in #45715
- fix(cost): bill the requested model's rates when the response names an unpriced model by @norkelbyte in #48900
- refactor(helm)!: connect both charts to a separately deployed Lens by @yuneng-berri in #49169
- fix(bedrock): backfill published regional service tier prices by @kerry-berri in #49113
- feat(cost-map): add baseten joey-1 decision model by @devin-ai-integration[bot] in #49123
- fix(cost): bill a provider reported usage.cost on every path unless the deployment is priced by @kerry-berri in #48953
- feat(zai): support response_format and max_completion_tokens, add glm-5v-turbo pricing by @DewellNaa in #48335
- fix(router): cap the default OTPM reservation and reconcile token counters after each call by @paveln83 in #49054
- fix(azure): add batch prices to the unversioned o3, o4-mini, o3-mini, gpt-4o and gpt-4o-mini rows by @devin-ai-integration[bot] in #49182
- fix(openai): keep the upstream error body on e.response for OpenAI and Azure errors by @mika-lt in #49079
- fix(health): probe only models a partial wildcard serves by @zoveki in #49060
- fix(azure_ai)!: keep OpenAI prompt cache breakpoints on the Foundry chat completions path by @devin-ai-integration[bot] in #45299
- fix(websearch-interception)!: stream native server-tool blocks to clients by @dkrisman in #40967
- fix(count_tokens): count a history that carries a compaction block by @devin-ai-integration[bot] in #44784
- fix(proxy): list only routable models for a wildcard alias over a provider org by @mika-lt in #49152
- fix(proxy)!: log and bill Responses-style bodies sent to /cursor/chat/completions by @discobot in #30277
- fix(mistral): forward prompt_cache_key to the Mistral API by @mateo-berri in #47432
- fix(realtime)!: send the Gemini Live setup at the first content so session.update settings apply by @mateo-berri in #39864
- fix(anthropic): send PDF image_url content to Claude as document blocks by @mateo-berri in #46984
- fix(router)!: keep a deployment's own model_id over the request body's by @simonp9 in #49045
- fix(proxy): apply new model rows on every worker as soon as they are written by @tessellark in #49034
- fix(responses)!: send a dict reasoning_effort the same way on every Responses bridge by @mika-lt in #49082
- feat(usage): show subscription-covered providers and account fees separately by @devin-ai-integration[bot] in #44772
- fix(router)!: apply content_policy_fallbacks when router settings update at runtime by @devin-ai-integration[bot] in #45428
- fix(streaming): convert upstream logprobs so streams with logprobs end with their finish chunk by @devin-ai-integration[bot] in #33549
- fix(sso): keep CLI SSO and Claude Code gateway team lists in the user record's order by @zoveki in #49033
- fix(cache_control): pick the chat-path dialect from the deployment's provider prefix by @devin-ai-integration[bot] in #45295
- fix(bedrock): route a Bedrock model id with no Invoke provider to Converse by @sidhunt in #43290
- fix(proxy)!: label shared-handler errors the way the route catch-alls do by @mateo-berri in #39555
- fix(mcp): bill both calls of a streamed chat completions MCP auto-execute by @simonp9 in #48899
- fix(proxy)!: scope /health by wildcard keys and team model allowlists the way auth does by @zoveki in #49155
- fix(router)!: check and count deployment itpm and otpm on every Responses WebSocket turn by @tavren27 in #49069
- fix(spend): keep a NaN or infinite cost from wedging daily spend writes by @quietjules in #48829
- fix(logging): warn when drop_params drops a requested reasoning level on the remaining paths by @tessellark in #48933
- fix(vllm): send the pass-through key as a bearer on both /vllm routes by @alvcol in #46861
- fix(vertex_ai,azure_ai)!: auto-add the compaction, thinking display, and tool change betas on Claude routes by @devin-ai-integration[bot] in #44747
- fix(passthrough): log the URL model and declared provider on Gemini and Vertex failures by @tessellark in #49075
- fix(model_prices): rolling registry audit, add Gemini batch and Azure Astra flex tiers by @devin-ai-integration[bot] in #49114
- perf(streaming): stop raising caught AttributeErrors inside pydantic on every streamed chunk by @tavren27 in #49166
- fix(gemini): flag computer use support on the four models the Gemini computer use docs list by @devin-ai-integration[bot] in #49252
- fix(proxy): evict a deleted key from every worker's auth cache by @etiennechabert in #47609
- fix(ui): preserve team model grants on unrelated settings saves by @tin-berri in #49258
- fix(aiand)!: show ai&'s name and logo, and sync ai&'s model list by @islomjon-aiand in #49158
- docs(daily-activity): describe guardrail spend fields and reporting key IDs in OpenAPI by @mrinal-berri in #49236
- fix(responses): normalize empty function_call_output to an empty tool result by @selimfedakar in #48845
- test: bedrock claude prompt caching on /v1/messages reports and charges cache tokens by @kerry-berri in #49265
- fix(cost): bill the margin once on rebuilt streams and streamed Responses through the chat bridge by @kerry-berri in #49254
- refactor(rust): extract SecretValue and use it for Redis credentials by @yujonglee-berri in #49186
- chore(cost-map): add openai gpt-6-rosalind from the pricing page and changelog by @devin-ai-integration[bot] in #49268
- refactor(ui): remove the deprecated Old Usage page by @kerry-berri in #49284
- feat(keys): allow assigning a project to an unassigned key on /key/update by @devin-ai-integration[bot] in #41700
- fix(proxy)!: persist sent model_info fields on POST /model/update by @MaximeBOUDIER in #46902
- ci: cache Rust compilation with sccache by @narmstrong-berri in #49117
- fix(openrouter)!: list OpenRouter's live catalog for openrouter/* when check_provider_endpoint is on by @norkelbyte in #48820
- fix(ollama): forward assistant tool call ids in ollama_chat requests by @moe-berri in #49278
- chore(cost-map): flag Vertex Gemini computer use and add Cohere Rerank 5 by @devin-ai-integration[bot] in #49297
- fix(headroom): forward tenant-scoped session affinity by @tin-berri in #49255
- fix(proxy): don't send llm_exceptions alert for BudgetExceededError by @tin-berri in #49290
- fix(proxy): apply key and team router_settings to /v1/images/generations by @moe-berri in #49286
- feat(openrouter): record upstream provider in logging payload and spend logs by @moe-berri in #49287
- fix(proxy): raise live budget counters for failure spend rows by @yucheng-berri in #47741
- fix(router): recover streamed context window errors before output by @tin-berri in #49293
- test: fix integration tests that fail on test order, races and intended changes by @yuneng-berri in #49310
- fix(ui): add Meta Model API to the Add Model provider dropdown by @moe-berri in #49314
- fix(rerank): preserve token usage in spend logs by @tin-berri in #49308
- fix(exceptions): classify SGLang context window overflow by @neubig in #48837
- fix(ui): restore Z.AI credential fields in provider catalog by @moe-berri in #49325
- fix(responses): run the guardrails a Responses WebSocket frame selects by @tavren27 in #48725
- fix(proxy): preserve access windows when editing models by @tin-berri in #49316
- fix(router): budget classifier input by provider limits by @tin-berri in #49306
- feat(sso): create the team_id_jwt_field team on UI SSO login when team_id_upsert is set by @jesus-berri in #49256
- chore(cost-map): add Deepgram Aura-1 and Aura-2 text-to-speech rates by @shrey-berri in #49280
- fix(cost): preserve zero prices across batch, speech and search by @tin-berri in #49294
- fix(batches): cost an unmanaged gs:// batch through the deployment that created it by @kerry-berri in #49301
- refactor(ui): move policies, tool policies and guardrails monitor text onto i18n by @yuneng-berri in #49343
- feat(proxy)!: use Bedrock request metadata as the session id on pass-through routes by @shrey-berri in #49193
- fix(gemini): add the batch image output price to gemini-nano-banana-2.1 and gemini-3.1-flash-lite-image by @devin-ai-integration[bot] in #49317
- fix(bedrock): align gpt-5.6-cyber Mantle limits and endpoints with its model card by @devin-ai-integration[bot] in #49350
- refactor(proxy): give database shutdown one lifespan owner by @yujonglee-berri in #48506
- refactor(proxy): inject database repositories through per-repository dependencies by @yujonglee-berri in #48507
- refactor(proxy): inject deployment warning ignores through repositories by @yujonglee-berri in #48592
- fix(guardrails): name only the request pipeline steps that ran in x-litellm-applied-guardrails by @yucheng-berri in #49262
- refactor(proxy): inject gateway activity through a typed repository by @yujonglee-berri in #49116
- fix(guardrails): drop the response pipeline steps that never ran from x-litellm-applied-guardrails by @yucheng-berri in #49264
- fix(search): forward Perplexity search filters by @tin-berri in #49344
- fix(gemini): add the batch, flex and priority text output prices to gemini-2.5-flash-image by @devin-ai-integration[bot] in #49358
- fix(proxy): log router-refused image generation requests by @tin-berri in #49349
- test(budgets): age the monthly window past any calendar month so the reset test passes on the 31st by @ryan-crabbe-berri in #49372
- refactor(router): route the router family through RoutingContext and close the outside surface by @narmstrong-berri in #49118
- fix(a2a)!: bill completion-bridge agents at their own prices on /a2a send and stream by @zoveki in #49150
- fix(mcp): log SDK request rejections by @mrinal-berri in #49184
- test(integration): match Databricks classifier budget telemetry by @mateo-berri in #49382
- fix(bedrock): restore the eu.anthropic.claude-haiku-4-5-20251001-v1:0 model map row by @ryan-crabbe-berri in #49375
- feat(accounting): add bounded transactional usage persistence by @joshua-berri in #49190
- fix(aiohttp): bill the usage a stream sent before its connection dropped, and deflake the CyberArk override test by @mateo-berri in #47838
- fix(responses): preserve text verbosity when bridging to chat completions by @ryan-crabbe-berri in #49049
- fix(proxy)!: bind admin-owned team keys to their team's MCP servers by @quietjules in #49161
- fix(ui): resolve auto router templates through ids a * catch-all lists over a partial wildcard by @tessellark in #49331
- feat(passthrough): let a WebSocket relay bill a session from its client text by @shrey-berri in #49281
- fix(hosted_vllm): accept the vLLM production-stack router's file and batch objects by @mika-lt in #49068
- fix(vertex_ai): bill Claude web search per request on deployments priced in model_info by @simonp9 in #49160
- build(deps): bump pyasn1, pypdf and minimatch to clear osv-scan by @dependabot[bot] in #49362
- fix(proxy): forward a valid metadata.user_id to Anthropic Messages on pass-through routes by @mika-lt in #49333
- fix(openai): stop stripping cache_control from the caller's own messages and tools by @vineethsaivs in #35602
- feat!: add Hostinger Router as an OpenAI-compatible provider by @algirdasci in #44863
- perf(logging): skip the base64 regex on plain text and copy a few large strings inline by @zoveki in #49228
- fix(decisions)!: honor a deployment's own supports_audio_input and supports_video_input flags by @mika-lt in #49207
- fix(proxy): trace model list requests with the caller's traceparent by @wileykestner in #49141
- fix(proxy): count native Responses WebSocket turn tokens toward key and tag TPM limits by @quietjules in #49257
- ci(circleci): clone the public repo over HTTPS so main jobs stop failing at checkout by @zoveki in #49394
- fix(anthropic): map pause_turn and return refusal explanations on chat and responses by @paveln83 in #49192
- fix(guardrails)!: keep the upstream error when a /v1/messages stream ends in one by @paveln83 in #49088
- fix(gemini): add thought_signature_in_tool_call_id to keep tool call ids short for clients that cap them by @mateo-berri in #47692
- feat(accounting): capture request usage through the durable meter by @joshua-berri in #49133
- fix(proxy): price OpenAI pass-through /v1/decisions calls like native Decisions by @ryan-crabbe-berri in #49392
- chore(cost-map): add openai gpt-6-astra-law from the pricing page by @devin-ai-integration[bot] in #49444
- fix(cost): split a provider-reported total between input and output by the cost map rate ratio by @kerry-berri in #49357
- docs(model-catalog): explain meter, band, channel and When by @yujonglee-berri in #49447
- fix(cost): keep upstream_usage_cost on the Responses stream logging copy so bridged /v1/messages rows price their tokens by @kerry-berri in #49365
- fix(messages): price a native /v1/messages body as served unless its provider reports its own cost by @kerry-berri in #49356
- test(integration): size restart-mid-burst timeouts from the proxy boot budget by @yucheng-berri in #49376
- fix(streaming): normalize stop after OpenAI-compatible tool calls by @tin-berri in #49388
- fix(router): inspect image content without translating routed requests by @joshua-berri in #49371
- fix(oci): preserve Gemini system messages (#48813) by @ishaan-j-berri in #49458
- test(cost): expect cohere rerank-v4 prompt_tokens from billed_units.total_tokens by @kerry-berri in #49455
- fix(streaming)!: fail a stream that ends without a finish reason by @yucheng-berri in #47665
- fix(scheduler): read shared queue from Redis so expired dead-replica entries stop blocking waiters by @mateo-berri in #49387
- fix(watsonx): read pass-through credentials from use_in_pass_through deployments by @kerry-berri in #49462
- fix(a2a): drop wrong 10 minutes comment on DEFAULT_A2A_AGENT_TIMEOUT by @moe-berri in #49465
- fix(proxy): preserve discovery after budget exhaustion (#48809) by @ishaan-j-berri in #49463
- fix(moderations): stop the router image check from 500ing on a list input by @kerry-berri in #49454
- fix(a2a): send agent litellm_params.api_key as bearer auth on the A2A hop by @moe-berri in #49474
- test(integration): wait for the stalled-tenant root span and accept a bare POST name by @yucheng-berri in #49406
- fix(caching): stop counting an unrun server tool call mark, and follow #49192 and #35602 in their integration tests by @mateo-berri in #49468
- fix(logging): drop a first-token time left over from a previous attempt by @Bytechoreographer in #47541
- docs(pr-template): add a handwritten 1-3 sentence description section by @mateo-berri in #49475
- ci: cut the weekly rc branch on Monday 3am PT instead of Friday by @yuneng-berri in #49472
- feat(passthrough): add Deepgram streaming text-to-speech WebSocket route by @shrey-berri in #49282
- fix(a2a): answer proxy refusals on /a2a POST routes as JSON-RPC errors by @moe-berri in #49476
- refactor(router): extract PythonCore behind RouterCore and pass the router its config by @narmstrong-berri in #49119
- fix(anthropic): answer 400 naming a non-string role or tool call id instead of 500 by @simonp9 in #49237
- fix(cohere): emit streamed tool calls from v2 tool-call-start and tool-call-delta chunks by @pcbeingused333 in #47794
- feat(chat): resume replies after browser disconnects by @moe-berri in #49461
- docs(pr-template): wrap the agent-drafted summary in make-me-human-readable tags by @mateo-berri in #49494
- refactor(ui): remove dead API calls from networking.tsx by @yuneng-berri in #49507
- test: deflake the json accumulator drain test and the armed routing prefetch test by @kerry-berri in #49505
- fix(proxy): treat empty agent and skill search embedding model as not configured by @moe-berri in #49485
- fix(passthrough): fit the Deepgram listen unpriced refusal in a WebSocket close frame by @shrey-berri in #49502
- fix(a2a): log authenticated pre-dispatch agent rejections by @moe-berri in #49492
- fix(router): restore four base behaviors the RoutingContext refactor changed by @narmstrong-berri in #49395
- test(translation): expect the EOF error frame when an Anthropic json_schema stream is cut by @mateo-berri in #49521
- fix(proxy): serve /a2a/{agent_id}/message/stream routes by @moe-berri in #49471
- fix(http): diagnose aiohttp connection pool saturation by @tin-berri in #49499
- fix(streaming): preserve served models in OpenRouter streams by @tin-berri in #49498
- feat(chat): add deep research with persistent citations by @moe-berri in #49508
- fix(agents): show non-admin callers the proxy URL in agent cards by @moe-berri in #49483
- feat(guardrails): return native findings on request (#49217) by @ishaan-j-berri in #49460
- feat(sdk): invoke configured guardrails (#49217) by @ishaan-j-berri in #49469
- feat(bedrock): configure full guardrail assessments (#49217) by @ishaan-j-berri in #49470
- fix(docs): replace stale docs/proxy/enterprise links with the current docs pages by @kerry-berri in #49491
- test(router): trace the deployment index lock in the file that owns it by @mateo-berri in #49520
- fix(chat): describe general chat and deep research on the chat home by @moe-berri in #49531
- test(mcp): cancel disconnected HTTP tool handlers by @mateo-berri in #49436
- feat(ovalix)!: scan files, tool calls and tool results by @yucheng-berri in #49309
- chore(e2e): remove the unused arize_phoenix callback from the stage mirror config by @yuneng-berri in #49538
- fix(cost-map): add 2026-11-04 deprecation_date to together_ai Qwen3.8-2.4T-A95B by @devin-ai-integration[bot] in #49542
- fix(bedrock): raise GovCloud West Llama 3 max output to the model card 8K by @devin-ai-integration[bot] in #49543
- fix(proxy)!: support reload with multiple workers by @devin-ai-integration[bot] in #45909
- test: move Sail, Weave and Presidio e2e tests to integration tests by @yuneng-berri in #49533
- test(a2a): replace the third-party agent e2e test with an integration test by @yuneng-berri in #49541
- fix(wandb): set DeepSeek-V3.1 and Llama-3.1-8B max_input_tokens from the CoreWeave Forge page by @devin-ai-integration[bot] in #49616
- fix(gemini)!: answer 400 for an unsupported chat audio format, drop it under drop_params by @paveln83 in #49423
- fix(router): keep encrypted reasoning when a fallback hops between same-key deployments with no api_base by @tessellark in #49396
- fix(anthropic)!: sync the beta header allowlist with what anthropic, vertex_ai, and azure_ai accept by @tavren27 in #49409
- fix(responses): serialize sequence_number on every bridged streaming event by @kaust1495 in #44944
- fix(proxy): make /update/sso_settings a true PATCH and send only changed SSO fields from the UI by @jesus-berri in #49527
- test(integration): fix four flaky integration tests by @yuneng-berri in #49554
- fix(anthropic): stream azure_ai natively on an Azure OpenAI host on /v1/messages by @mika-lt in #49216
- fix(proxy): check the model in every OpenAI websocket passthrough frame by @zoveki in #48979
- fix(proxy): keep provider fields on streamed chat completion chunks by @quietjules in #49398
- fix(providers): trim prompt_cache_breakpoint to what each API takes under drop_params by @tavren27 in #49064
- fix(bedrock): price Web Search on the GPT-5.4 and later Mantle rows and the GovCloud West Mantle rows by @devin-ai-integration[bot] in #49687
- fix(model-catalog): declare the tool and Responses token count framing keys by @tavren27 in #49683
- fix(proxy): count the context_management edits /v1/messages applies on every bridged provider by @tessellark in #49234
- fix(fireworks): keep developer items in place for models that accept a later system message by @tessellark in #49399
- fix(databricks): join plain text blocks for non-Claude json_object requests by @zoveki in #49385
- test(integration): repair stale contract fixtures by @yuneng-berri in #49700
- fix(bedrock)!: give Invoke and Mantle Claude the model's own default max_tokens by @zoveki in #49692
- fix(count_tokens): count grok-4-1, grok-4.3 and DeepSeek V4.1 tool requests the way their hosts bill them by @tavren27 in #49074
- fix(cohere): map Cohere v2 finish_reason on non-streaming chat responses by @jesus-berri in #49529
- test(integration): align remaining release qualification checks by @yuneng-berri in #49714
- fix(prometheus): retain deployment attribution on proxy failures by @yuneng-berri in #49717
- test(integration): isolate stranger batch authorization from the batch-cost poller by @mateo-berri in #49522
- fix(mcp): answer 400 for a hosted MCP tool a translated route cannot run, drop it under drop_params by @simonp9 in #48931
- feat(hosted_vllm)!: keep vLLM's stop_reason and token_ids on chat choices and stream chunks by @PrabalParihar in #48393
- feat(proxy)!: honor model_info.max_input_tokens in the Codex catalog for stock models by @tessellark in #49701
- ci: remove workflows whose secrets are dead by @mateo-berri in #49722
- test(integration): repair agent reads and bulk deletion setup by @yuneng-berri in #49719
- test(e2e): share the coding-CLI harness between suites by @ryan-crabbe-berri in #49370
- feat(model_info): add supports_continuation capability flag for Gemini long decode continuation by @jesus-berri in #49500
- fix(spend)!: save streamed /v1/responses spend rows under the encrypted resp_ id the client received by @simonp9 in #49493
- fix(cost): add deepgram/streaming/nova-3-medical and update stale Nova-3 streaming rates by @jesus-berri in #49733
- build(deps): allow huggingface-hub 2.x by @davanstrien in #49056
- fix(proxy): charge budget windows when the cached key or team expired before the request ended by @etiennechabert in #47608
- fix(proxy)!: ignore stored general_settings keys no settings API manages by @paveln83 in #48967
- fix(bedrock): reserve DeepSeek V3.2 output capacity and date GovCloud West Llama 3 by @devin-ai-integration[bot] in #49732
- test(gemini): assert vertex lists on content chunks by @mateo-berri in #49734
- fix(model-catalog): declare the thinking_on_by_default key by @tavren27 in #49720
- fix(ui): make the off state of switches visible in light theme by @shrey-berri in #49718
- fix(proxy): preserve DB settings during config reload by @mateo-berri in #49735
- refactor(ui): move MCP text onto i18n by @yuneng-berri in #49473
- refactor(ui): move guardrails text onto i18n by @yuneng-berri in #49524
- refactor(ui): move agents and knowledge text onto i18n by @yuneng-berri in #49530
- fix(proxy): log each endpoint's own call type on failed audio, moderation, image, and rerank spend rows by @paveln83 in #49684
- refactor(ui): move admin and settings text onto i18n by @yuneng-berri in #49546
- fix(mcp): answer bare OPTIONS on MCP routes without running LiteLLM auth by @jesus-berri in #49497
- fix(managed_files): keep the upload the managed id encodes when two target models share a deployment by @quietjules in #49420
- test(integration): look up streamed Responses spend rows by the client-facing id by @devin-ai-integration[bot] in #49752
- fix(gemini): resend once with the placeholder signature when the other backend rejects a replayed thought signature by @tavren27 in #49697
- fix(vertex_ai)!: map Anthropic context overflow errors by @mgeorgaklis in #36963
- test(e2e): drive the Codex CLI through LiteLLM, command round trip by @ryan-crabbe-berri in #49374
- test(e2e): add Codex file edit, long session and auto-compaction rows through LiteLLM by @ryan-crabbe-berri in #49386
- fix(anthropic_endpoints)!: return Anthropic error envelopes on /v1/messages auth failures by @albertoperdomo2 in #48466
- feat(anthropic): pick the beta allowlist row per deployment and surface input_transformations by @mika-lt in #49689
- fix(bedrock): send native structured output for json_schema on Claude models that cannot force a tool by @tavren27 in #49703
- test(integration): repair release qualification timing and labels by @yuneng-berri in #49737
- fix(tool_choice): accept OpenAI allowed_tools on chat completions and flatten it for the Responses bridge by @ryan-crabbe-berri in #49043
- fix(cost-map): give the bare gpt-4o, gpt-4o-mini, gpt-4.1 and gpt-4.1-mini aliases their 2027-01-14 shutdown date by @zoveki in #49707
- fix(responses)!: authorize and decode comparison response IDs by @ryan-crabbe-berri in #49402
- fix(spend): bill web search interception follow-ups once under the outer request by @mateo-berri in #49762
- fix(vllm): list hosted_vllm wildcard models when the server has no api key by @devin-ai-integration[bot] in #40066
- feat(decisions): add Parallel AI web-grounded decisions by @devin-gupta in #49188
- test(messages): add rust vs python messages parity characterization suite by @narmstrong-berri in #49610
- fix(messages): make rust messages copy python messages behaviour by @narmstrong-berri in #49611
- feat(videos): serve custom_provider_map BaseVideoConfig providers on /v1/videos by @kerry-berri in #49785
- test(bedrock): assert native structured output when the model rejects forced tools by @devin-ai-integration[bot] in #49799
- test(spend): expect the Anthropic budget envelope on a broken messages stream by @devin-ai-integration[bot] in #49800
- fix(router)!: scope context fallback precedence to the requested group by @mateo-berri in #49779
- docs: preserve author review when updating PR summaries by @mateo-berri in #49803
- fix(embeddings): honor the caller's timeout on Cohere sync and HuggingFace embedding requests by @ryan-crabbe-berri in #48593
- fix(cost-map): price Mistral Large 4 at its current list price by @ryan-crabbe-berri in #49814
- fix(anthropic): send an https PDF image_url to Claude as a document by @tessellark in #49708
- feat(realtime)!: support latest OpenAI audio models by @emerzon in #35600
- fix(cache_control)!: keep one deployment's prompt-cache opt-in from reaching siblings on the same model by @tessellark in #49685
- fix(bedrock)!: fail a Nova Sonic realtime session whose Bedrock stream drops instead of closing 1000 by @norkelbyte in #49170
- fix(azure_ai): keep azure_ad_token out of the request body by @tavren27 in #49769
- fix(typesafe): mark jev-latest as answering Box questions now that it points to Jev 1.14 by @devin-ai-integration[bot] in #49835
- fix(proxy): let a config license unlock enterprise settings and spell "environment" right in license errors by @paveln83 in #49745
- fix(logging): keep the caller's call_type when chat completions are bridged to the Responses API by @zoveki in #49710
- fix(anthropic)!: carry prompt_cache_breakpoint to cache_control on chat completions to Claude by @zoveki in #49783
- fix(proxy): list slash-less wildcard groups like claude-* on /v1/models and /model/info by @tessellark in #49832
- fix(gemini): lower the gemini-3.5-flash-lite batch cache price and date the gemini-2.5-pro and 2.5-flash shutdown by @devin-ai-integration[bot] in #49871
- fix(vertex-ai): drop batch prices from gemini-robotics-er-2-preview by @devin-ai-integration[bot] in #49895
- fix(spend): read only the newest rows when paging sessions by @shrey-berri in #48886
- fix(model_prices): consolidate verified provider metadata and pricing by @devin-ai-integration[bot] in #49361
- feat(model-catalog): read successor_model, the provider's recommended replacement for a deprecating row by @kerry-berri in #49791
- refactor(ui): move teams, users and orgs text onto i18n by @yuneng-berri in #49484
- fix(proxy): defer optional Prisma imports in SSO settings by @yuneng-berri in #49771
- fix(e2e): restore main qualification across providers and UI by @yuneng-berri in #49763
- fix(proxy): omit cost headers for unpriced responses by @joshua-berri in #49467
- feat(cost-map): record the provider's recommended replacement as successor_model on deprecating rows and report it from /model/deprecations by @kerry-berri in #49789
- revert(bedrock): restore STS identity checks before #49763 by @yuneng-berri in #49939
- feat(ui): show user names instead of raw ids on detail pages by @jesus-berri in #47181
- fix(proxy): cancel /team/spend/by_user in Postgres after 30s by @kerry-berri in #49922
- fix(rate-limit): estimate embedding image and audio data URIs as media in TPM pre-call checks by @norkelbyte in #49831
- feat(model-catalog): read deprecation_source, the provider page or feed a row's deprecation_date was read from by @kerry-berri in #49955
- feat(model-catalog): add fedramp_uplift_multiplier by @kerry-berri in #49950
- feat(proxy): add general_settings.fips_mode startup gate by @yucheng-berri in #48600
- feat(ui): rebuild the command palette on shadcn Command by @yuneng-berri in #49528
- test(mcp): hold the progress test's upstream notification acks until they are dispatched by @joshua-berri in #49967
- feat(cost-map): record deprecation_source on every dated row that has a known provider notice by @kerry-berri in #49968
- chore(blog): refresh the bundled blog posts backup with the latest 50 posts from the docs RSS feed by @kerry-berri in #49971
- fix(main)!: carry the full per-call price entry on the logging object instead of writing litellm.model_cost by @kerry-berri in #49532
- fix(vertex-ai): sync tier prices and retirement floors by @devin-ai-integration[bot] in #49964
- fix(proxy): cancel the Admin UI's raw spend-log reads in Postgres after 30s by @kerry-berri in #49965
- feat(proxy): configure the request header buffer size by @mrinal-berri in #49883
- fix(router): keep a deployment's token limits off the shared backend cost map key by @devin-ai-integration[bot] in #49952
- fix(credentials): preserve stored info when patching credentials by @mateo-berri in #49919
- feat: add Wally as an OpenAI-compatible provider by @adityabatra072 in #45662
- chore(cost-map): remove the 52 rows whose provider retired them before 2026 by @kerry-berri in #49974
- feat(auth): add link-only JWT mapping and remove route eligibility filtering by @mrinal-berri in #49956
- fix(bedrock): map token counting on the alias Claude Sonnet 4.5 and Haiku 4.5 rows to bedrock-runtime by @devin-ai-integration[bot] in #49981
- fix(ui): send only shown SSO fields when editing, and keep env-row SSO values behind a blank stored value by @jesus-berri in #49973
- ci: run the OSV scan on rc branches by @yuneng-berri in #49987
- fix(anthropic): answer an upstream Anthropic 529 as 529 overloaded_error on /v1/messages by @mateo-berri in #46063
- fix(agentic)!: surface a failed agentic follow-up call instead of the pre-loop tool call by @tavren27 in #49227
- feat(ui): rebuild the public AI Hub as a searchable list with a details pane by @yuneng-berri in #49496
- feat(mcp): add an opt-in per-server setting to skip MCP tool output validation by @shrey-berri in #49961
- refactor(cache): remove experimental Redis and v2 caches by @yujonglee-berri in #50005
- test(spend): give the session pages EXPLAIN double the read transaction spend log reads now use by @devin-ai-integration[bot] in #49996
- test(responses): keep the background status poller out of the cancel wire test by @devin-ai-integration[bot] in #50002
- fix(cost-map): add successor_model to seven retiring together_ai rows by @devin-ai-integration[bot] in #50026
- feat(ui): redesign the dashboard top bar and give Aria its own page by @moe-berri in #50009
- feat(skills): upload local skill ZIPs from the dashboard by @tin-berri in #50008
- refactor: clean up fresh tech debt in proxy auth reads, chatgpt credential forwarding, messages drop_params reads, router context signatures and spend log reads by @devin-ai-integration[bot] in #46643
- chore(azure): cite ada retirement schedule by @devin-ai-integration[bot] in #50044
- chore(proxy): use neutral example names for baggage tag mappings by @mateo-berri in #50011
- chore(cost-map): rolling registry sync for xAI, Fireworks, Azure and Gemini by @devin-ai-integration[bot] in #50028
- fix(gemini): point gemini-2.5-pro and gemini-2.5-flash at the models Google reroutes them to by @devin-ai-integration[bot] in #50064
- feat(cost-map): add together_ai/moonshotai/Kimi-K3.1-Pro from the Together models API by @devin-ai-integration[bot] in #50069
- feat(openai): bill gov.api.openai.com FedRAMP endpoint with 1.1x uplift by @kerry-berri in #49951
- test(e2e): retire the quiet_stack lock and batch the claude_code model registration by @yuneng-berri in #49984
- fix(logging): don't leak redacted reasoning via provider_specific_fields by @alchemicjon in #47398
- refactor: replace accounting event scaffolding with SpendLogs projection by @joshua-berri in #49843
- test(perf): remove the database_upgrade_5rps e2e case and its harness tests by @kerry-berri in #50076
- feat(decisions): add EmpirioLabs AI as a decisions provider by @kerry-berri in #49977
- fix(router): stamp the failed deployment on every endpoint's attempt by @narmstrong-berri in #49941
- refactor(ui): move keys, projects and cost text onto i18n by @yuneng-berri in #49994
- refactor(ui): move logs and usage text onto i18n by @yuneng-berri in #49992
- refactor(ui): move playground and chat text onto i18n by @yuneng-berri in #49991
- test(integration): poll for the cached JWT rejection sentinel instead of a single Redis read by @mrinal-berri in #50014
- ci: run the OSV scan and unit tests on stable, rc and lts branches by @yuneng-berri in #50086
- feat: update EmpirioLabs models in model_prices_and_context_window.json by @kerry-berri in #49980
- fix(proxy): charge a video's provider-reported cost once, on the first poll that sees it completed by @tessellark in #49824
- chore(cost-map): add fireworks kimi k3.1 pro serverless pricing by @devin-ai-integration[bot] in #50095
- fix(guardrails)!: check Anthropic and Responses request tools in tool_permission pre_call by @meryemsakin in #41011
- fix(azure)!: answer 401 when Entra rejects the deployment's credential by @zoveki in #49863
- feat(cost-map): add baseten Kimi-K3.1-Pro by @devin-ai-integration[bot] in #50093
- test(observability): reserve sink port throughout outage by @devin-ai-integration[bot] in #50100
- chore(databricks): add retirement successors and kimi-k2-7 retirement date from the Databricks retired models page by @devin-ai-integration[bot] in #50094
- chore(cost-map): openai context fixes, azure gpt-6 flex pricing, bedrock govcloud and gmi rows by @devin-ai-integration[bot] in #50082
- fix(responses): keep the system prompt in input for json_object on the chat to responses bridge by @mrinal-berri in #49957
- feat(proxy): authenticate billing metrics with a cognito bearer token by @yassin-berriai in #49852
- test(skills): drop the archive rejection test whose zip-byte ids differ across xdist workers by @kerry-berri in #50118
- fix(bedrock): remove GovCloud Kimi K3 bedrock_mantle rows by @devin-ai-integration[bot] in #50117
- fix(auth): align cloud credential loading and expiry with the Python SDKs by @yujonglee-berri in #49589
- test: make three flaky unit tests deterministic by @yuneng-berri in #50114
- ci(unit): stop the full history clone on the db-and-spend shard, fetch the schema merge base by sha by @kerry-berri in #50120
- fix(bedrock): backfill GovCloud service-tier prices by @devin-ai-integration[bot] in #50121
- fix(github_copilot): let per-user connections work with a custom GitHub client ID by @ryan-crabbe-berri in #50116
- fix(guardrails): apply guardrail masks to Bedrock InvokeModel Claude requests and replies by @shrey-berri in #49947
- fix(cost): bill Batch cached tokens at the Standard cache price when a row has no Batch cache price by @kerry-berri in #50062
- fix(cost_calculator): keep regional and speed multipliers for per-call custom prices and log the billed per-call entry by @kerry-berri in #50063
- chore(cost-map): add openai gpt-image-2.6-sunburst and gpt-image-2.6-flare from the pricing page by @devin-ai-integration[bot] in #50134
- fix(least-busy): reserve the picked deployment so a burst of requests spreads out by @tc3oliver in #47484
- fix(proxy): answer an upstream overload with 503 server_is_overloaded on OpenAI routes by @mateo-berri in #49993
- fix(bedrock): add GovCloud Kimi, Haiku and Grok prices by @devin-ai-integration[bot] in #50128
- refactor(ui): move shell, entry and public hub text onto i18n by @yuneng-berri in #50110
- refactor(ui): move models text onto i18n by @yuneng-berri in #50112
- fix(azure): strip output-only reasoning content from Responses input by @qibinjin in #50046
- chore(cost-map): add openai batch image output prices from the pricing page by @devin-ai-integration[bot] in #50138
- fix(proxy): treat Postgres restart and shutdown errors as DB unavailable, not poison spend-log rows by @kerry-berri in #50132
- feat(accounting): add opt-in SpendLogs ledger by @joshua-berri in #49856
- fix(ui): send a team admin's member key edits on the first save by @yuneng-berri in #50007
- fix(nvidia_riva): send the api key exactly once by calling riva over grpc directly by @ryan-crabbe-berri in #50140
- fix(ui): let team admins edit models on team service account keys by @jesus-berri in #49970
- fix(cost_map): fill missing Claude capability fields from the family baseline by @ryan-crabbe-berri in #49815
- feat(ui): show model deprecation banner on the models page by @krrish-berri-2 in #50080
- test(routing): expect 503 server_is_overloaded for an upstream overload by @devin-ai-integration[bot] in #50155
- test(providers): expect 503 server_is_overloaded for an upstream overload by @devin-ai-integration[bot] in #50154
- feat(proxy): add model deprecation alerts with daily requests by key by @ishaan-j-berri in #50022
- fix(bedrock)!: keep Claude's thinking when response_format json_schema is set by @quietjules in #49696
- refactor(proxy)!: drop the unused accounting event tables by @joshua-berri in #49923
- chore(cost-map): add together_ai ricursive-ai/Ripple-65B-Preview from the Together models API by @devin-ai-integration[bot] in #50163
- feat(ui)!: redesign public AI Hub as a catalog by @tin-berri in #50153
- feat(alerts): show recommended model provenance and provider notices by @ishaan-j-berri in #50162
- test(providers): expect 503 server_is_overloaded for an upstream overload on the responses bridge by @devin-ai-integration[bot] in #50166
- refactor(ui): align Chat with dashboard styling by @moe-berri in #50034
- feat(router): add the Rust router core with the host as its only boundary by @narmstrong-berri in #49513
- test(translation): expect thinking usage fields on Bedrock chat by @devin-ai-integration[bot] in #50175
- test(translation): expect thinking usage fields on Bedrock messages by @devin-ai-integration[bot] in #50179
- fix(mistral): a named tool_choice is dropped, the model picks any tool by @pasqualtroncone in #39737
- test(translation): expect thinking usage fields on Bedrock responses by @devin-ai-integration[bot] in #50181
- feat(skills)!: add portable Agent Skills Hub API by @tin-berri in #50159
- feat: email affected owners before model deprecations by @ishaan-j-berri in #50172
- feat(skills)!: add portable version history by @tin-berri in #50152
- feat(skills)!: add portable submissions and admin review by @tin-berri in #50160
- fix(usage): restore per-user spend breakdown on the user aggregated route by @ishaan-j-berri in #49464
- feat(skills): add optional manual security scans by @tin-berri in #50194
- feat(skills): show download counts and history by @tin-berri in #50165
- fix(cost-map): add Gemini Flex long prompt prices, Live grounding prices, seven GMI rows and EmpirioLabs page prices by @devin-ai-integration[bot] in #50208
- feat(accounting)!: make the SpendLogs ledger the default accounting path by @joshua-berri in #49872
- test(integration): stop the wire peer from dropping requests whose bytes arrive late by @tessellark in #49889
- feat(vertex-ai): add published gemini omni 1.2 flash pricing and limits by @devin-ai-integration[bot] in #50227
- docs(pr-template): drop the make-me-human-readable tags from the handwritten description by @mateo-berri in #50183
- fix(github-copilot): send the GitHub token directly instead of exchanging it by @mateo-berri in #50126
- fix(openai): never send OPENAI_ADMIN_KEY as the bearer token for a deployment without an api_key by @kerry-berri in #50218
- fix(accounting): keep spend commits working when prometheus_client is not installed by @joshua-berri in #50230
- refactor(router): delete the python router core by @narmstrong-berri in #50178
- feat(gemini): add Omni 1.2 Flash pricing and update video model successors by @devin-ai-integration[bot] in #50229
- feat(gateway): forward HTTP requests to the Python proxy by @yujonglee-berri in #49604
- chore(cost-map): rolling registry audit, add gpt-6-cyber, Kimi K3.1 Pro rows, Jina rerankers and capability flags by @devin-ai-integration[bot] in #50245
- test(skills): assert patch publication and serialize preference writes by @devin-ai-integration[bot] in #50252
- test(usage): assert per-user entity spend and metadata by @devin-ai-integration[bot] in #50251
- refactor(bedrock): drop the redundant $defs deep copy in tool conversion by @mateo-berri in #50240
- fix(openai): add gpt-6-cyber max input tokens and the gpt-5.5-cyber-preview shutdown date by @devin-ai-integration[bot] in #50254
- fix(anthropic): report temperature/top_p as supported only when the model keeps them by @ryan-crabbe-berri in #50144
- refactor(ui): move remaining logs and usage text onto i18n by @yuneng-berri in #50146
- refactor(ui): move remaining models text onto i18n by @yuneng-berri in #50147
- refactor(ui): move remaining shell and nav text onto i18n by @yuneng-berri in #50148
- refactor(ui): move remaining keys, teams and agents text onto i18n by @yuneng-berri in #50238
- refactor(ui): move remaining playground, chat and compliance text onto i18n by @yuneng-berri in #50239
- refactor(ui): move remaining Aria and admin text onto i18n by @yuneng-berri in #50242
- fix(zscaler_ai_guard)!: scan only the last user turn on requests by @yucheng-berri in #50139
- docs(pr-template): require rerunnable proof setup and collapsed long output by @mateo-berri in #50258
- feat(bedrock): add us-gov.xai.grok-4.7 GovCloud pricing by @devin-ai-integration[bot] in #50288
- fix(bedrock): add GovCloud Grok 4.7 batch prices by @devin-ai-integration[bot] in #50291
- test(router): expect no fallback errors header for non-bool include_fallback_errors by @narmstrong-berri in #50259
- fix(router): do not cool down a deployment on a 404 from a response id lookup by @narmstrong-berri in #50262
- test(copilot): align login guards with direct access tokens by @mateo-berri in #50285
- feat(interactions): forward continuation_token and type requires_continuation so callers can resume a long decode by @kerry-berri in #50151
- fix(router): keep the request's metadata on rust core fallback hop kwargs by @narmstrong-berri in #50263
- fix(router): retry a team wildcard under the provider-prefixed name by @narmstrong-berri in #50264
- fix(responses): preserve native stream spend on guardrail rejection by @mateo-berri in #50286
- fix(router): give the rust core's priority scheduler the router's redis cache by @narmstrong-berri in #50265
- refactor(ui): move alerts page text onto i18n by @yuneng-berri in #50271
- fix(router): write the prompt caching pin when turn_off_message_logging is on by @kerry-berri in #50276
- test(router): expect a primary stream's stall to cool its deployment by @narmstrong-berri in #50261
- fix(types): define the responses compact call types for during_call guardrails and deployment hooks by @kerry-berri in #50274
- fix(router-core): read time through the router's clock when routing by @narmstrong-berri in #50295
- feat(databricks): add databricks-kimi-k3-1-pro pricing by @devin-ai-integration[bot] in #50303
- fix(azure): sync model retirement dates by @devin-ai-integration[bot] in #50296
- feat(packaging): build litellm-proxy gateway wheels by @yujonglee-berri in #49605
- feat(skills): add authenticated install and share commands by @tin-berri in #50211
- fix(router): let type checkers see the real Router constructor arguments by @mateo-berri in #50278
- fix(ui): keep chat text sent back to the model in English by @yuneng-berri in #50304
- build(deps): bump @azure/msal-node to 7.x in vscode-extension to clear osv-scan by @devin-ai-integration[bot] in #50198
- feat(skills): add sortable Skills Hub catalog and publication audit by @tin-berri in #50195
- fix(ui): center the deployment health banner icon on its title by @yuneng-berri in #50302
- fix(users)!: validate custom IDs and reject concurrent duplicate creation by @mrinal-berri in #49748
- feat(ui): allow custom user IDs in user invitations by @mrinal-berri in #49749
- feat(bedrock): default to native structured output on Opus 5 and Opus 4.8 by @mateo-berri in #50222
- refactor(prompt_templates): move JSON schema helpers out of common_utils into json_schema_utils by @mateo-berri in #50241
- test(copilot): seed direct access tokens in Copilot wire fixtures by @devin-ai-integration[bot] in #50307
- fix(proxy): probe scrypt instead of MD5 in the fips_mode OpenSSL check by @yucheng-berri in #50305
- feat(ui): add a beta language setting to the account menu by @yuneng-berri in #50309
- fix(router): drop supports_web_search false deployments for Anthropic web_search_* and Gemini googleSearch tools by @kerry-berri in #50275
- fix(audio-transcription): keep transcripts out of transcription error messages by @qtim0 in #50137
- feat(proxy)!: only let clients pick S3 buckets the admin allowed by @ryan-crabbe-berri in #47496
- feat(redis): rust Redis foundation with no runtime change by @yujonglee-berri in #50169
- feat(proxy): give Codex accurate model entries for every model in /v1/models by @ryan-crabbe-berri in #49825
- feat(spend-logs): opt-in latest_turn mode that stores only the current turn of stateless requests by @jesus-berri in #49544
- feat(team): let default_team_params attach access_group_ids to every new team by @jesus-berri in #49908
- test(e2e): add a Codex row that calls a local MCP tool on a first and a resumed turn by @ryan-crabbe-berri in #49817
- refactor(ui): move remaining outlier text onto i18n by @yuneng-berri in #50312
- fix(terraform): drop out-of-band deleted litellm_key from state and treat its 404 on delete as gone by @devin-ai-integration[bot] in #47877
- chore(cost-map): source fireworks deprecations and replacement models by @devin-ai-integration[bot] in #50334
- feat(ui): set tpm_limit and rpm_limit on tags from the Admin UI by @kerry-berri in #50314
- test(bedrock_mantle): expect the generic unsupported-param 400 for temperature on fixed-sampling Claude by @devin-ai-integration[bot] in #50344
- feat(redis): serve the proxy's common Redis call with Rust stores by @yujonglee-berri in #50170
- fix(bedrock): forward the per-turn-control beta to Bedrock Invoke by @Scott-Wilson-ZocDoc in #43086
- test(e2e): wait for saved MCP credentials before deleting the server by @devin-ai-integration[bot] in #50366
- fix(vertex_ai): honor vertex_location for the Cloud Text-to-Speech endpoint by @julienparenti in #50255
- fix(ui): simplify the collapsed workspace dropdown by @moe-berri in #50369
- fix(ui): support custom model provider logos (#50056) by @ishaan-j-berri in #50371
- build(deps): bump oauthlib to 4.0.1 and lock filelock 4.2.4 on 3.11+ and 3.20.3 on 3.10 to clear osv-scan by @devin-ai-integration[bot] in #49204
- feat(proxy): hash UI passwords with PBKDF2 in FIPS mode by @yucheng-berri in #49874
- fix(proxy): discover models for LiteLLM Gateway wildcard providers by @ishaan-j-berri in #50374
- build(deps): keep Python 3.10 osv-scan suppressions until 2027-02-01 by @devin-ai-integration[bot] in #50386
- fix(anthropic): default Responses JSON-schema strictness (#50023) by @ishaan-j-berri in #50375
- fix(anthropic): preserve Azure Responses reasoning replay (#50024) by @ishaan-j-berri in #50381
- feat: add OpenRouter-style -latest model aliases for first-party providers by @moe-berri in #50315
- fix(bedrock): drop another model's signed thinking when replaying to a non-Claude Converse target by @sidsri14 in #50073
- fix(anthropic)!: do not surface server_tool_use as client tool_calls by @JeongCheolLee in #48385
- fix(chatgpt): forward text and max_output_tokens to the Codex backend by @alekc in #38086
- chore(cost-map): add the openai o1 deprecation source from the deprecations page by @devin-ai-integration[bot] in #50402
- fix(model-map): add verified Mistral retirement dates by @devin-ai-integration[bot] in #50294
- fix(proxy): stop /tag/update 500 when the body carries the tag's budget_id by @kerry-berri in #50324
- test(cost): sync Azure GPT flex price fields for gpt-6-astra, gpt-6-luna and gpt-6.1-sol by @devin-ai-integration[bot] in #50410
- feat(bedrock): default to native structured output on Opus 5.5, Fable 5.1, Sonnet 5 and Haiku 5.5 by @mateo-berri in #50221
- test(spend): drive the TTL-preserving token increment through the native counter increments by @devin-ai-integration[bot] in #50418
- fix(responses): map streamed flex_unavailable errors to 429 not 500 by @mrinal-berri in #50336
- feat(router-core): derive serialize on router events by @narmstrong-berri in #50416
- chore: remove paragraph-ending period restriction by @narmstrong-berri in #50419
- fix(gemini): correct Embedding 2 Preview shutdown date by @devin-ai-integration[bot] in #50429
- feat(tags): reset a tag's spend through /tag/update by @kerry-berri in #50323
- feat(model-hub): show each deployment's full prices in the model hub by @ryan-crabbe-berri in #50145
- fix(azure): sync speech retirement dates and sources by @devin-ai-integration[bot] in #50430
- test(bedrock): expect native output on Opus 4.8 profiles after #50222 by @mateo-berri in #50343
- feat(proxy): mixed Codex model picker and LiteLLM routing on native codex routes by @simonp9 in #49408
- fix(router): count embedding batches per input in pre-call checks by @chuckiihub in #49851
- chore: bump litellm-enterprise 0.1.81 -> 0.1.83, litellm-proxy-extras 0.4.112 -> 0.4.114, litellm 1.109.0 -> 1.110.0 by @yuneng-berri in #50437
- chore(model_prices): rolling registry audit 2026-11-06 by @devin-ai-integration[bot] in #50436
- feat(router): add the Switchyard stage router as an auto router strategy by @joshua-berri in #50407
- fix(ui): stop parsing formatted dates and spend back into values by @yuneng-berri in #50350
- feat(guardrails): add mcp_block_behavior to raise 400 on MCP tool blocks by @mrinal-berri in https://github.com/BerriAI/litellm/pull/50284
- fix(router): pin /v1/responses requests for prompt caching affinity by @tessellark in https://github.com/BerriAI/litellm/pull/50321
- fix(bedrock): run realtime guardrails on Nova Sonic sessions by @tavren27 in https://github.com/BerriAI/litellm/pull/49833
- refactor(typing): clear about 1,100 basedpyright Any errors across 303 files by @mateo-berri in https://github.com/BerriAI/litellm/pull/49986
- feat(proxy): serve Codex its own release's model catalog, fetched from GitHub by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/50318
- fix(cost-map): jais-30b-chat and jais-13b-chat prices were per 1K tokens by @kerry-berri in https://github.com/BerriAI/litellm/pull/50452
- fix(usage): keep spend when metadata lookups hit database failures by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50253
- fix(guardrails): stop model-level post_call guardrails from checking a proxy response twice by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/50300
- fix(otel): seed request metadata baggage for team-only OTel v2 destinations by @mrinal-berri in https://github.com/BerriAI/litellm/pull/50373
- test(e2e): follow the Aria sidebar move and the Skills Hub rename in UI specs by @yuneng-berri in https://github.com/BerriAI/litellm/pull/50453
- feat(ui): format dashboard numbers, money and dates through i18next by @yuneng-berri in https://github.com/BerriAI/litellm/pull/50443
- fix(gemini): sync documented model successors by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50468
- fix(bedrock): sync published Kimi K3.1 Highspeed prices by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50451
- test(routing): expect /v1/responses to pin the served deployment for an hour after #50321 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50474
- fix(baseten): sync Kimi K3.1 Pro output limit by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50477
- fix(wandb): sync CoreWeave Forge prices and add DeepSeek V4.1-Flash-1017 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50476
- feat(videos): add first-class OpenRouter video request fields by @mateo-berri in https://github.com/BerriAI/litellm/pull/50319
- fix(bedrock): forward Codex agent messages that carry encrypted content intact by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/50457
- feat(xai): bill image calls from cost_in_usd_ticks and add grok-imagine-image-2.0 resolution prices by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50481
- fix(xai): honor deployment input_cost_per_pixel for xAI image costs by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/50490
New Contributors
- @bap1106 made their first contribution in #39324
- @Gopal3746 made their first contribution in #45715
- @DewellNaa made their first contribution in #48335
- @dkrisman made their first contribution in #40967
- @discobot made their first contribution in #30277
- @sidhunt made their first contribution in #43290
- @alvcol made their first contribution in #46861
- @selimfedakar made their first contribution in #48845
- @MaximeBOUDIER made their first contribution in #46902
- @algirdasci made their first contribution in #44863
- @kaust1495 made their first contribution in #44944
- @PrabalParihar made their first contribution in #48393
- @davanstrien made their first contribution in #49056
- @devin-gupta made their first contribution in #49188
- @adityabatra072 made their first contribution in #45662
- @alchemicjon made their first contribution in #47398
- @meryemsakin made their first contribution in #41011
- @tc3oliver made their first contribution in #47484
- @qibinjin made their first contribution in #50046
- @pasqualtroncone made their first contribution in #39737
- @qtim0 made their first contribution in #50137
- @julienparenti made their first contribution in #50255
- @sidsri14 made their first contribution in #50073
- @JeongCheolLee made their first contribution in #48385
- @alekc made their first contribution in #38086
- @chuckiihub made their first contribution in #49851
Full Changelog: v1.109.0-dev.2...v1.110.0-dev.1