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.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.111.0-dev.1/cosign.pub \
ghcr.io/berriai/litellm:v1.111.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
- 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
- @apex-mochen made their first contribution in #43577
- @raunakpandey1 made their first contribution in #49806
- @tedswinyar made their first contribution in #49183
- @kenneth-berri made their first contribution in #50764
- @giladk1221 made their first contribution in #50883
- @taxfree-python made their first contribution in #46845
- @nurlanmnn made their first contribution in #50979
- @satwik-bankapur made their first contribution in #49914
- @collieai-dev made their first contribution in #49224
Full Changelog: v1.110.0-dev.2...v1.111.0-dev.1