github BerriAI/litellm v1.111.0-dev.1

pre-release53 minutes ago

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.111.0-dev.1

Verify 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.111.0-dev.1/cosign.pub \
  ghcr.io/berriai/litellm:v1.111.0-dev.1

Expected 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(completion): accept a tool_choice that forces an OpenAI hosted tool by @kerry-berri in #50578
  • fix(accounting): stop delivery metrics from scanning retained receipts on every flush by @joshua-berri in #50565
  • fix(key/info): return 400 instead of 500 when no key is provided by @apex-mochen in #43577
  • fix(gemini): add the Flex above-200k cache read price to gemini-3.1-pro-preview rows by @devin-ai-integration[bot] in #50607
  • test(observability): match the full card number instead of a 4111 substring that timestamps can contain by @devin-ai-integration[bot] in #50612
  • fix(proxy): align ownership and scope handling by @mateo-berri in #50600
  • feat(proxy): total_timeout bounds a whole non-streaming request by @joshua-berri in #50496
  • fix(cli): end the local login when lite logout cannot check the OS keychain by @zoveki in #50098
  • fix(ui): label every budget reset time in the Admin UI with UTC by @zoveki in #50591
  • fix(proxy)!: price expanded wildcard /model/info rows as the model their calls route to by @paveln83 in #49128
  • fix(bedrock): derive the web identity session policy per AWS caller by @tavren27 in #50592
  • perf(router): skip unused deployment reads in the callback filter step and cache anthropic capability probes by @narmstrong-berri in #50641
  • test(integration): follow cached prepared statements in the held statement relay by @devin-ai-integration[bot] in #50651
  • feat(proxy): add OpenSearch index pass-through with per-key read/write grants by @quietjules in #50573
  • test(e2e): repin the Together reasoning replay backend to MiniMax-M3.1-Flash by @yuneng-berri in #50601
  • fix(proxy): build plugin session claims from FIPS provider services in fips_mode by @yucheng-berri in #50544
  • feat(anthropic): add claude-fable-5-2 and its Claude Platform on AWS mirror by @devin-ai-integration[bot] in #50715
  • feat(cost-map): rolling registry update (Anthropic and Bedrock Fable 5.2, Azure realtime cache, Vertex, Friendli) by @devin-ai-integration[bot] in #50707
  • fix(proxy): show committed spend in the remaining budget gauges by @zoveki in #49199
  • feat(azure): add azure_ai/claude-fable-5-2 and claude-fable-5-2-fast from the Foundry Claude page by @devin-ai-integration[bot] in #50723
  • build(ui): fail lint on hardcoded English in dashboard JSX by @yuneng-berri in #50593
  • fix(prompt_templates): keep moved private helpers importable from common_utils by @zoveki in #50721
  • perf(router): look up host step answers by id instead of scanning every candidate by @narmstrong-berri in #50704
  • feat(cost-map): add Claude Fable 5.2 on Vertex AI and repoint claude-fable-latest by @kerry-berri in #50713
  • test(integration): cover claude-fable-5-2 capability flags and prompt-cache pricing on the scripted Anthropic upstream by @kerry-berri in #50722
  • fix(cost)!: bill transcriptions by the seconds the provider reports by @ryan-crabbe-berri in #50727
  • fix(logging): bill a refused response the router falls back from by @joshua-berri in #50735
  • fix(audio): measure duration for PathLike multipart tuple contents by @raunakpandey1 in #49806
  • feat(auth): grant access groups through principal attribute rules by @krrish-berri-2 in #50455
  • fix(minimax): forward reasoning_effort instead of dropping it by @jeevan1098 in #49583
  • fix(ollama_chat): give each streamed tool call its own index by @tedswinyar in #49183
  • fix(redis): accept a bare service account email for GCP Memorystore IAM by @yujonglee-berri in #50676
  • fix(rust): install the rustls crypto provider at the Python host boundary by @yujonglee-berri in #50502
  • feat(cost-map): add GovCloud regional rows for Bedrock Claude Fable 5.2 and Mythos 5.2 by @devin-ai-integration[bot] in #50746
  • fix(bedrock): answer 400, not 500, for malformed count-tokens requests by @paveln83 in #50708
  • feat(router): let deployments declare a shared encrypted content boundary by @joshua-berri in #50750
  • test(integration): cover claude-fable-5-2 capability flags and prompt-cache pricing on Vertex AI and Bedrock Converse by @kerry-berri in #50742
  • fix(proxy): fail-closed budget enforcement returns 403 naming /team/member_add for a team user with no membership row by @kerry-berri in #50603
  • fix(complexity_router): keep Claude Code subagent and side-request traffic off other agents' tier pins by @joshua-berri in #50741
  • test(audio): bill reported transcription seconds for measurable uploads by @devin-ai-integration[bot] in #50767
  • chore(cost-map): add openai gpt-6-cyber long context prices from the pricing page by @devin-ai-integration[bot] in #50770
  • feat(proxy): let a key's logging entry reference a proxy credential by @jesus-berri in #50572
  • fix(messages): let proxy /v1/messages requests run on the rust path by @narmstrong-berri in #50335
  • fix(messages): log native messages success once, after the proxy releases it by @narmstrong-berri in #50420
  • fix(messages): log native messages request fields like python by @narmstrong-berri in #50421
  • fix(messages): pass non-message bodies through and refuse non-string headers as bad requests by @narmstrong-berri in #50422
  • fix(rust): run native async calls through python's async wrapper steps by @narmstrong-berri in #50423
  • fix(messages): raise native messages failures as python's errors by @narmstrong-berri in #50424
  • fix(messages): bill a native stream the client abandoned like python by @narmstrong-berri in #50425
  • fix(messages): write the native unary cache entry after the router stamps it like python by @narmstrong-berri in #50426
  • test(integration): assert response ids stay scoped to their minting key by @devin-ai-integration[bot] in #50703
  • chore(cost-map): add github_copilot/claude-fable-5.2 from the Copilot models-and-pricing table by @devin-ai-integration[bot] in #50775
  • test(integration): assert team model visibility follows caller scope by @devin-ai-integration[bot] in #50772
  • fix(cost-map): price wandb DeepSeek-V4.1-Flash-1017 from the CoreWeave Forge listing by @devin-ai-integration[bot] in #50776
  • fix(proxy): write SpendLogs failure rows for config-defined pass-through endpoints by @devin-ai-integration[bot] in #41831
  • test(integration): repair tests that merged changes left stale by @yuneng-berri in #50782
  • fix(router): merge default metadata under the request's instead of replacing it by @paveln83 in #50700
  • fix(anthropic-messages): apply additional_drop_params before the unsupported param checks by @tavren27 in #50753
  • fix(router): honor request fallbacks in the mid-stream continuation check by @narmstrong-berri in #50260
  • fix(router): let a retry leave a pinned deployment after a retryable failure by @joshua-berri in #50769
  • test(integration): drop the empty-string n case from the Gemini long decode test by @yuneng-berri in #50796
  • feat(rust): add litellm-s3 crate, AwsCredentialsProvider and cost map fetch by @yujonglee-berri in #50547
  • refactor(model-cost): move the cost map inputs, fetch and register_model overlay into Rust by @yujonglee-berri in #50501
  • fix(prometheus): record litellm_overhead_latency_metric for streams, stamp plus the proxy's first-chunk work by @kerry-berri in #49920
  • fix(accounting): keep delivering spend when another worker's maintenance lock is orphaned by @mateo-berri in #50774
  • fix(sso): read the SSO client secret before the refresh-token DB check by @mateo-berri in #50773
  • test(integration): expect the 400 for a content-less leading system on Mantle count_tokens after #50708 by @devin-ai-integration[bot] in #50820
  • fix(proxy): serve Codex its own Bedrock catalog entries for Bedrock deployments by @ryan-crabbe-berri in #50743
  • feat(usage): split customer spend by the key's current team by @kenneth-berri in #50764
  • fix(proxy): list images in the Codex catalog only for models known to read them by @ryan-crabbe-berri in #50738
  • fix(hosted_vllm): omit empty tools list from chat requests by @krrish-berri-2 in #50812
  • feat(proxy): log keys and teams still on the deprecated empty models defaults at boot by @paveln83 in #50720
  • fix(router): count a Responses WebSocket turn's tokens before the next turn is admitted by @norkelbyte in #50730
  • chore(cost-map): add the openai gpt-image-2 shutdown date from the deprecations page by @devin-ai-integration[bot] in #50829
  • chore(cost-map): add together_ai/elorian-labs/glimpse-1.0 from the Together models API by @devin-ai-integration[bot] in #50830
  • fix(proxy)!: return managed file ids from rag ingest and use team credentials on vector store file routes by @tavren27 in #50459
  • test(decisions): ignore Ollama model-info calls in the decoy check by @moe-berri in #50827
  • fix(complexity_router): hold the default model for a user_turn ask whose classifier failed by @joshua-berri in #50793
  • test: update the spend tests that still expected the pre-ledger accounting queues by @yuneng-berri in #50814
  • feat(budgets): add per-model tpm and rpm limit maps to budgets and customers by @kerry-berri in #50797
  • fix(ui): keep the credential action menu open when the models page re-renders by @devin-ai-integration[bot] in #50845
  • fix(transcription): stop billing a FLAC with no sample count as 576 trillion seconds by @kerry-berri in #50842
  • fix: make scheduled key, user, and team spend resets idempotent by @mateo-berri in #50298
  • feat(cost-map): add meta/muse-ember-1.0 with long-context rates from the Meta pricing page by @kerry-berri in #50847
  • test(accounting): assert spend is delivered under another leader's maintenance lock by @devin-ai-integration[bot] in #50843
  • fix(proxy): send the whole Codex model catalog to Codex 0.166.0-alpha.1 and newer by @ryan-crabbe-berri in #50736
  • fix(proxy): let the OS assign Prisma engine ports by @devin-ai-integration[bot] in #50850
  • fix(ui): keep the request log model cell to one model by @Bytechoreographer in #49619
  • test(integration): empty the shared client cache before the tier pin batch test by @yuneng-berri in #50854
  • feat(cost-map): rolling registry update (claude-mythos-5-2, Azure Mythos 5.2, Friendli GLM-5.1 date, GovCloud Fable 5.2 token counting) by @devin-ai-integration[bot] in #50777
  • fix(proxy): bill an OpenAI pass-through background response once across repeated reads by @tavren27 in #50841
  • feat(cost-map): add gemini/gemini-4-carbon from the Gemini API pricing page by @devin-ai-integration[bot] in #50931
  • fix(redis): free each request's Redis batch scope once the request ends by @emerzon in #50751
  • fix(openai): download PDF URLs off the event loop and transform async chat messages once by @norkelbyte in #49176
  • feat(cost-map): add vertex_ai/gemini-4-carbon and gemini-4-carbon-cyber-permissive from the Vertex pricing page by @devin-ai-integration[bot] in #50942
  • refactor: clean up fresh tech debt in stream cost flag, masked httpx error and encrypted reasoning helpers by @mateo-berri in #50617
  • fix(proxy): open the Logs drawer by request_id without scanning for litellm_call_id by @tavren27 in #50789
  • fix(cost-map): give the Gemini 4 Carbon rows the shared Gemini 3 search free tier by @kerry-berri in #50951
  • perf(streaming): reuse the upstream choice for plain litellm HTTP-handler stream chunks by @quietjules in #50786
  • fix(responses): replay Claude tool search on follow-up turns by @zoveki in #50821
  • feat(rate-limit): enforce per-customer per-model tpm and rpm limits in the v3 limiter by @kerry-berri in #50857
  • test(cost): sync vertex 3.1 pro price fields and bedrock converse usage shapes by @devin-ai-integration[bot] in #50956
  • fix(decisions): keep box questions on a deployment when a same-model sibling turns them off by @tavren27 in #50724
  • feat: add claude mythos 5.2 to vertex ai cost map by @kerry-berri in #50940
  • fix(router): hold the registry lock across router-core writes and mirror reads by @narmstrong-berri in #50933
  • test(budgets): expect per-model tpm and rpm limits in budget info by @devin-ai-integration[bot] in #50967
  • feat(ui): customer portal (beta) surfacing the existing customer endpoints and customer usage by @kerry-berri in #50807
  • feat(customers): reject unknown fields on /customer/new and /customer/update instead of dropping them by @kerry-berri in #50965
  • fix(proxy): send a prompt-only call_endpoint token count to every provider count API by @paveln83 in #50783
  • test(integration): cap the OAuth metadata lookup in the mixed capabilities subscription case by @yuneng-berri in #50867
  • fix(mcp): accept comma-separated vendor scope grants on the connect check by @shrey-berri in #50717
  • fix(cost-map): give the Gemini 4 Argon rows the shared Gemini 3 search free tier by @kerry-berri in #50959
  • test(http2): drain client traffic after sending GOAWAY by @devin-ai-integration[bot] in #50972
  • fix(responses): keep unset-effort gpt-5.4/5.5 tool calls on chat completions by @devin-ai-integration[bot] in #50968
  • fix(cost-map): mark the azure_ai Claude rows that bill web search as supporting it by @kerry-berri in #50960
  • test(integration): recognize the model list's lock in the held write helper by @yuneng-berri in #50974
  • test(anthropic): scope structured output captures to inference routes by @devin-ai-integration[bot] in #50983
  • feat(proxy): let teams use their own allowed S3 buckets for batch files by @mrinal-berri in #50571
  • fix(router): let an explicit routing tag outrank the encrypted content pin by @joshua-berri in #50975
  • feat(cost): bill batch cached image input tokens for OpenAI image models by @devin-ai-integration[bot] in #50997
  • fix: audit registry metadata for Together, Mistral, Fireworks, Azure AI and Copilot by @devin-ai-integration[bot] in #51003
  • fix(cost-map): sync together_ai together/Tev1-4B-experimental input price with /v1/models by @devin-ai-integration[bot] in #51013
  • chore(cost-map): add github_copilot/gemini-4-carbon from the Copilot changelog launch post by @devin-ai-integration[bot] in #51012
  • fix(proxy)!: reject client-supplied Vertex location and project unless the admin opts in by @mateo-berri in #47028
  • fix(router): sync responses() applies the Router's num_retries and fallbacks by @joshua-berri in #51011
  • feat(spend): report guardrail spend separately in daily activity by @joshua-berri in #51010
  • fix(tool_choice): accept the Responses API's flat allowed_tools layout on chat completions by @mateo-berri in #50467
  • test(integration): keep owned test peers off ephemeral ports by @devin-ai-integration[bot] in #51019
  • fix(bedrock): forward x-pass- headers on the /bedrock/model pass-through routes by @norkelbyte in #50728
  • fix(proxy): send the streamed Responses fallback metadata as a typed Responses event by @paveln83 in #50804
  • fix(proxy): recheck missing users when resolving session grants by @devin-ai-integration[bot] in #51030
  • feat(cli): connect a per-user GitHub Copilot credential from the command line by @ryan-crabbe-berri in #50863
  • fix(responses): keep the namespace == name shape for deferred top-level tools by @kerry-berri in #50602
  • chore(cost-map): add fal_ai image and video rows priced from the fal.ai model pages (first fal-ai sync) by @devin-ai-integration[bot] in #51035
  • fix(vertex_ai): bill gemini image edits by token usage by @devin-ai-integration[bot] in #51038
  • feat(search): add Microsoft Web IQ provider by @giladk1221 in #50883
  • fix(otel): serialize pydantic Message objects in langfuse_otel, weave_otel and langtrace by @taxfree-python in #46845
  • perf(spend): narrow user and team spend log reads to the owner's api_keys so the (api_key, startTime) index is used by @kerry-berri in #51026
  • fix(mcp): challenge a single-server listing whose credential the upstream rejected by @shrey-berri in #50389
  • fix(ci): install tzdata so zoneinfo tests pass on runners without legacy tz aliases by @mateo-berri in #51057
  • fix(guardrails/rubrik): moderate text-completion prompts and forward rac_agent_id by @seph-barker in #49912
  • fix(model-prices): use current Hy4 promotional rates by @moe-berri in #51072
  • fix(proxy): allow management_routes keys to call PATCH /model/{model_id}/update by @nurlanmnn in #50979
  • fix(proxy): drop the beta label from the /v1/messages swagger tags by @mateo-berri in #51046
  • fix(router): re-check and reserve per-model rate limits on fallback targets by @kerry-berri in #50994
  • chore(cost-map): add 61 fal_ai image and video rows priced from the fal.ai model pages (second fal-ai sync) by @devin-ai-integration[bot] in #51077
  • feat(auto_router): report a session's whole spend and name why savings stay unestimated by @joshua-berri in #51066
  • chore(pricing): sync replicate model prices from replicate.com model pages by @devin-ai-integration[bot] in #51067
  • chore(databricks): add claude-fable-5-2, date glm-5-2 retirement and fix llama-3-1-8b context from the supported-models page by @devin-ai-integration[bot] in #51076
  • refactor(rust_bridge): route every Rust-to-Python call through host modules by @yujonglee-berri in #50822
  • fix(spend): write a background response's settling read in-process when the spend collector is on by @tavren27 in #50957
  • fix(proxy): judge the zero-cost budget waiver by the model a key or team alias serves by @joshua-berri in #51058
  • feat(docker)!: one shipped image, one entrypoint beside the Dockerfile, one compose file by @devin-ai-integration[bot] in #43332
  • feat(anthropic): forward message threads on native /v1/messages by @paveln83 in #50976
  • fix(router): send managed batch uploads to batch deployments when a chat deployment has a lower order by @mika-lt in #50971
  • fix(rate-limit): settle a fallback's tokens on the model group that served it by @kerry-berri in #51082
  • fix(proxy): keep the upgrade notice off the request path and count area-labelled release notes by @kerry-berri in #51027
  • fix(vertex_ai): bill gemini image text, thinking and priority tokens at their own rates by @devin-ai-integration[bot] in #51017
  • test(spend): expect token billing for Vertex image edits with usage by @devin-ai-integration[bot] in #51109
  • fix(reasoning): log the GPT-5 reasoning_effort drop warning only when the provider gets no effort by @paveln83 in #50995
  • test(mcp): read the comma grant through real credential storage by @shrey-berri in #51065
  • fix(proxy): keep a request's cache opt-in when its key has cache metadata by @quietjules in #50999
  • feat(replicate): add google/gemini-4-carbon from the Replicate model page by @devin-ai-integration[bot] in #51125
  • fix(mcp)!: forward the LiteLLM key when the admin configures it by @joshua-berri in #50604
  • feat(azure): add azure_ai/mistral-large-4-latest from the Azure Models API, priced from Mistral's model page by @devin-ai-integration[bot] in #51047
  • ci(image-scan): build Rust with a fast ci cargo profile instead of fat-LTO release by @mateo-berri in #51075
  • test(unit): deflake db metrics spans and drain timeout tests, split proxy-infra shard by @mateo-berri in #51078
  • chore(cost-map): add 3 fal_ai rows priced from the fal pricing API and model page (third fal-ai sync) by @devin-ai-integration[bot] in #51126
  • fix(bedrock): govcloud eol dates from the lifecycle table, gpt-5.6 cyber govcloud mantle row and daybreak blue input limit by @devin-ai-integration[bot] in #51095
  • feat(helm): single chart with monolith mode and shared image, remove litellm-helm by @devin-ai-integration[bot] in #43330
  • feat(terraform): run every AWS and GCP workload from the one litellm image by @devin-ai-integration[bot] in #43358
  • fix(spend): keep empty-key rows in owner-scoped spend log reads by @mateo-berri in #51127
  • fix(proxy): list callable ids for partial aliases over a catch-all deployment by @quietjules in #50963
  • test(providers): preserve unspecified Gemini image output modality by @devin-ai-integration[bot] in #51149
  • test(spend): expect token billing for Vertex image edits by @devin-ai-integration[bot] in #51148
  • fix(gemini): batch and flex tier fields the -latest alias rows were missing by @devin-ai-integration[bot] in #51150
  • fix(spend): keep free response reads and cancels off the creation spend row by @devin-ai-integration[bot] in #51110
  • fix(proxy): add tzdata to the proxy extra so a legacy TZ doesn't stop startup by @satwik-bankapur in #49914
  • fix(tls)!: exclude RSA key exchange and ChaCha20 from the outbound cipher list in FIPS mode by @yucheng-berri in #50671
  • fix(vertex): drop floor-only retirement dates, veo 3.1 successor and gemini token limits from the Vertex model pages by @devin-ai-integration[bot] in #51180
  • docs(security): updated mailinglist and vdp in security.md by @ojensen-berri in #51199
  • chore(cost-map): rolling registry PR, fal_ai rows, databricks gemini-4-carbon, deepinfra and bedrock tier prices by @devin-ai-integration[bot] in #51193
  • fix(router): preserve held tiers for OpenCode subagent results by @joshua-berri in #51176
  • refactor: clean up fresh tech debt in rubrik, passthrough headers and plugin mode comments by @mateo-berri in #51163
  • test(security): expect the async release check on offline mode by @devin-ai-integration[bot] in #51213
  • fix(management): keep classifier deployments serving during reloads by @devin-ai-integration[bot] in #51111
  • chore(cost-map): add 24 runwayml models and correct seedance2 and eleven_multilingual_v2 rates by @devin-ai-integration[bot] in #51216
  • fix(azure): use supported API versions for Responses requests by @kenneth-berri in #51116
  • feat(proxy): count a rate-limit fallback in x-litellm-attempted-fallbacks and name it in x-litellm-fallback-reason by @kerry-berri in #51138
  • refactor(proxy): let the gunicorn server take a private listener by @yujonglee-berri in #50871
  • feat(proxy): supervise the opt-in Rust forwarding server by @yujonglee-berri in #49606
  • fix(streaming): report zero cost for explicitly free calls by @devin-ai-integration[bot] in #51093
  • feat(gemini): file-backed batch jobs on /v1/batches with output download and spend tracking by @kerry-berri in #51032
  • fix(router): map Gemini stream-opening errors by @joshua-berri in #51218
  • fix(auth): enforce model access on Google and image URL routes by @joshua-berri in #51226
  • test(integration): fix the baseline accounting and series cap flakes by @yuneng-berri in #51096
  • fix(proxy): let /team/delete transactions wait for a pooled connection by @yuneng-berri in #51099
  • fix(completion)!: answer 400 for a chat message without a role by @zoveki in #51124
  • fix(proxy): stream the guardrail block response when the block comes after an SSE keepalive ping by @paveln83 in #51114
  • feat(otel): let a team or key OTel v2 destination add its own request metadata keys by @mrinal-berri in #50813
  • refactor(typing): clear 1141 basedpyright Any errors across 182 files by @quietjules in #50711
  • fix(proxy): reset a deleted customer's admission spend counter so a re-created one is not refused by @joshua-berri in #51224
  • fix(proxy): answer x-litellm-call-id on every token count response by @tavren27 in #51037
  • feat(rate-limit): name the limit that rejected a request in a rate_limited_by header on the 429 by @kerry-berri in #51228
  • refactor(ui): remove the deprecated Learning Resources sidebar link by @yuneng-berri in #51251
  • feat(helm): add scheme and tlsConfig to the gateway ServiceMonitor by @mrinal-berri in #50759
  • fix(proxy): name the deployment in stream error alerts on chat, completions, responses and messages by @quietjules in #51034
  • refactor(ui): remove the deprecated API Reference page by @yuneng-berri in #51246
  • test(e2e): remove the secret manager suite by @yuneng-berri in #51241
  • fix(bedrock): forward the compact-2026-09-04 compaction param on Invoke /v1/messages by @kerry-berri in #51223
  • fix(fallback): preserve concurrent writes and serve saved configuration by @joshua-berri in #51245
  • chore: remove dead files from the repo root by @yassin-berriai in #50936
  • chore: remove cookbook and preserve live assets by @yassin-berriai in #50944
  • ci: remove CircleCI by @yassin-berriai in #50950
  • security(proxy): stop request body fields from conflicting with admin-set deployment fields by @shrey-berri in #51254
  • test(proxy): make the cancelled supervisor test deterministic by @yuneng-berri in #51258
  • fix(responses): keep reasoning item IDs consistent across streaming events by @joshua-berri in #51243
  • feat(guardrails): write guardrail changes to the audit log by @mrinal-berri in #51118
  • fix(llms-types): let the compact-2026-09-04 beta through on bedrock to match the headers config by @kerry-berri in #51272
  • feat(messages): serve anthropic messages on rust only by @narmstrong-berri in #51119
  • fix(health): log Test Connection spend with the mode's call type and model id by @kenneth-berri in #50987
  • feat(bedrock): search knowledge bases by image and return image hits by @zoveki in #51063
  • fix(fips): hash MCP advisory-lock keys with SHA-256 in fips_mode and compute the OCI body digest as a security hash by @yucheng-berri in #51165
  • test(proxy): await background spend counters before asserting by @joshua-berri in #51249
  • chore(databricks): price claude-fable-5-2 from the proprietary pricing page by @devin-ai-integration[bot] in #51232
  • feat(azure_ai): support gpt-image edits on Azure AI Foundry by @Bytechoreographer in #49650
  • fix(proxy): keep a cost settings update from being undone by an in-flight config reload by @devin-ai-integration[bot] in #51273
  • chore(cost-map): source the fireworks deepseek v4 flash deprecation and name its replacement by @devin-ai-integration[bot] in #51285
  • test(guardrails): expect the content_filter finish on a blocked chat stream by @devin-ai-integration[bot] in #51281
  • fix(llms-types): drop the duplicate compact-2026-09-04 arm that fails rust-lint on main by @kerry-berri in #51280
  • perf(router): list a group's deployments once per registry change on the acompletion path by @narmstrong-berri in #50749
  • feat(guardrails): add the CollieAi guardrail integration by @collieai-dev in #49224
  • fix(anthropic_messages): bound the detached pump so it cannot outlive its stream by @nuernber in #51268
  • fix(auth): allow video retrieval after budget exhaustion by @joshua-berri in #51227
  • fix(proxy): bill anthropic pass-through calls at the deployment's custom price by @joshua-berri in #51267
  • ci(unit): split proxy-infra-root in two, isolate the child-python tests, make its file exclusions take effect by @kerry-berri in #51316
  • fix(gemini): attribute /gemini batchGenerateContent batches to the calling key by @kerry-berri in #51279
  • ci(unit): deselect test_unit_test_proxy_hooks from the q-z shard it matches, pin the dead proxy-infra-root codecov flag by @kerry-berri in #51324
  • test(integration): remove the openapi docs gate detached worktree test that cannot run offline by @mateo-berri in #51300
  • feat(gemini): add gemini-decision-1, the Decisions API model priced at $0.10 per 1M input tokens by @devin-ai-integration[bot] in #51215
  • feat(proxy): run spend log cleanup from a DB-backed scheduled job table by @jesus-berri in #50131
  • feat(ui): add Activity tabs to resource details by @moe-berri in #50630
  • feat(alerts): add persisted alerts and status APIs by @moe-berri in #50658
  • feat(alerts): detect daily changes in recorded usage by @moe-berri in #50666
  • feat(ui): show performance alerts in the Alerts page by @moe-berri in #51104
  • feat(alerts): enable monitoring by default with a five-alert free allowance by @moe-berri in #51123
  • feat(skills): add admin-only version restore by @tin-berri in #51309
  • chore: move config and docs off the repo root by @yassin-berriai in #50966
  • feat(gemini): support gemini-decision-1 on /v1/decisions and /v1/systemone by @mateo-berri in #51220
  • fix(proxy): reject unknown guardrail names on key, user, team and project writes by @mrinal-berri in #51080
  • fix(cost-map): drop the duplicate gemini/gemini-decision-1 entry that fails the root unit job on main by @yuneng-berri in #51341
  • test(providers): expect Rust routing for quiet Messages streams by @devin-ai-integration[bot] in #51346
  • test(observability): include CollieAi in guardrail scope settings by @devin-ai-integration[bot] in #51345
  • ci(integration): install the Rust gateway and fail forwarded_proxy when Rust is not in front by @mateo-berri in #51307
  • chore: move deployment sources under litellm/deploy by @yassin-berriai in #50981
  • chore: move ui and vscode-extension under litellm and delete docs by @yassin-berriai in #50992
  • chore: move workspace packages under litellm by @yassin-berriai in #51000
  • chore: move scripts and runtime sources under litellm by @yassin-berriai in #51006
  • ci: fail when the repo root grows past 15 entries by @yassin-berriai in #51007
  • fix(alerts): stop detecting traffic drops by @moe-berri in #51338
  • feat(rate-limit): team_model_limit_borrows_idle_capacity_from_other_teams lets a team's model TPM and RPM limits borrow idle capacity in the dynamic rate limiter by @kerry-berri in #51328
  • fix(fal_ai): give MiniMax H3 Max video endpoints their own resolution profile by @kerry-berri in #51348
  • fix(anthropic): close strict JSON schemas on the Messages to Responses bridge by @kenneth-berri in #51337
  • test(providers): expect Rust routing for idle Messages streams by @devin-ai-integration[bot] in #51364
  • feat(rate-limit): team_model_limit_max_borrow_multiple caps how far a team borrows idle model capacity by @kerry-berri in #51359
  • fix(gemini): add batch and priority image output token prices to gemini/gemini-2.5-flash-image by @devin-ai-integration[bot] in #51368
  • ci: stop PR runs from thrashing the Actions cache and stop smoke compiling from source by @yuneng-berri in #51343
  • feat(dynamic_rate_limiter_v3): steer flexible teams to a permitted alternate when their preferred model is saturated by @kerry-berri in #51350
  • feat(dynamic_rate_limiter_v3): priority_class_share_splits_equally_among_active_teams splits a priority class share among the teams active on a model by @kerry-berri in #51366
  • fix(rate-limit): hold router fallbacks, nested calls, WebSocket turns and oversized prompts to a borrowing team's model share by @kerry-berri in #51367
  • feat(model-catalog): read output_cost_per_billable_unit in the rust registry check by @kerry-berri in #51365
  • chore(cost-map): rolling registry audit 2026-11-12, xAI retired image rates, Kling 4, GMI rows and -latest aliases by @devin-ai-integration[bot] in #51395
  • feat(skills): let authors edit and withdraw pending submissions by @tin-berri in #51312
  • chore(cost-map): add 7 fal_ai rows for seedream 5.5, flux virtual try-on, patina material and vidu templates (fifth fal-ai sync) by @devin-ai-integration[bot] in #51407
  • feat(replicate): add video generation, image generation and text to speech through the predictions API by @kerry-berri in #51360
  • feat(mcp): cache upstream tool lists with an admin-set lifetime by @shrey-berri in #51160
  • fix(auth): enforce customer budget rpm/tpm limits under JWT auth by @mateo-berri in #51405
  • feat(fal_ai): add Nano Banana 2.1, bill it from fal billable units, fix google/ routing by @devin-ai-integration[bot] in #51410
  • fix(messages): name the deployment on a rust stream's transport error by @narmstrong-berri in #51358
  • fix(token-counter): count Anthropic server tool history by @kenneth-berri in #51334
  • feat(ui): add daily model usage to customer pages by @ishaan-j-berri in #51419
  • feat(proxy): publish opted-in pass-through endpoints on the Model Hub by @devin-ai-integration[bot] in #43905
  • feat(gemini): add gemini/gemini-4-hydrogen from the Gemini API pricing page by @devin-ai-integration[bot] in #51423
  • refactor(ui): remove standalone Model Leaderboard by @moe-berri in #51426
  • feat(alerts): add management controls and opt-in daily summaries by @moe-berri in #51418
  • fix(skills): honor dashboard user and team grants by @tin-berri in #51416
  • fix(proxy): fetch blog posts without blocking the event loop by @yassin-berriai in #51369
  • feat(vertex_ai): add vertex_ai/gemini-4-hydrogen from the Vertex pricing page by @devin-ai-integration[bot] in #51432
  • test(providers): expect rust for anthropic messages after rust-only cutover by @narmstrong-berri in #51351
  • fix(spend-logs): mask token-shaped secrets in stored request and resp… by @krrish-berri-2 in #48968
  • fix(otel): report the provider model in experimental GenAI traces by @joshua-berri in #51430
  • fix(azure): strip GPT-5 routing marker from Responses deployments by @joshua-berri in #51438
  • fix(messages): keep signed empty thinking blocks on rust by @narmstrong-berri in #51349
  • fix(messages): hand rust only the anthropic metadata user_id by @narmstrong-berri in #51355
  • fix(anthropic_messages): preserve first-round web search spend logs by @joshua-berri in #51441
  • fix(token-counting): count mid-conversation tool changes by @joshua-berri in #51447
  • test(integration): point database tests at the moved litellm/proxy-extras package by @devin-ai-integration[bot] in #51453
  • fix(otel): distinguish missing usage from prompt estimates on chat failures by @joshua-berri in #51443
  • fix(model_prices): add Azure DeepSeek V4.1 Flash 1017 and two Perplexity Agent API rows by @devin-ai-integration[bot] in #51444
  • test(messages): expect rust to drop a null thinking signature on retry by @narmstrong-berri in #51461
  • fix(proxy): refuse blocked and over-limit keys before reading the request body by @kerry-berri in #51428
  • fix(ui): serve navigation payloads under the ui prefix by @mrinal-berri in #50758
  • feat(model-catalog): read output_cost_per_video in the rust registry check by @kenneth-berri in #51433
  • feat(access-groups): grant vector stores through access groups by @shrey-berri in #50290
  • fix(openai): point gpt-image-1-mini, gpt-image-1.5 and chatgpt-image-latest at gpt-image-2.6-sunburst as successor by @devin-ai-integration[bot] in #51475
  • fix(ui): remove the Chargebacks page from Customer Portal by @tin-berri in #51474
  • feat(proxy): customer org, team and member hierarchy with budget templates by @ishaan-j-berri in #51459
  • feat(fal_ai): bill flat per-video fal.ai models with output_cost_per_video by @kenneth-berri in #51225
  • feat(cost-map): load LITELLM_MODEL_COST_MAP_URL from gs:// with Google application default credentials by @jesus-berri in #51108
  • feat(dynamic_rate_limiter_v3): prometheus share, borrowed and throttle metrics per team and model by @kerry-berri in #51417
  • fix(dynamic_rate_limiter_v3): a borrower gets its full share back once the model saturates by @kerry-berri in #51415
  • fix(fal_ai): bill Luma Ray v3.2 videos at fal's 540p default resolution by @kerry-berri in #51477
  • feat(ui): set per-threshold budget alert recipients on virtual keys by @jesus-berri in #51061
  • fix(embeddings): unwrap extra_body for providers with their own embedding handlers by @kenneth-berri in #51335
  • fix(bedrock): send max_tokens and priority in Cohere embedding requests by @kenneth-berri in #51435
  • chore: bump litellm-enterprise 0.1.83 -> 0.1.84, litellm-proxy-extras 0.4.114 -> 0.4.115, litellm 1.110.0 -> 1.111.0 by @yucheng-berri in #51486

New Contributors

Full Changelog: v1.110.0-dev.2...v1.111.0-dev.1

Don't miss a new litellm release

NewReleases is sending notifications on new releases.