Verify Docker Image Signature
All LiteLLM Docker images are signed with cosign. Every release is signed with the same key introduced in commit 0112e53.
Verify using the pinned commit hash (recommended):
A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
ghcr.io/berriai/litellm:v1.107.0-rc.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.107.0-rc.1/cosign.pub \
ghcr.io/berriai/litellm:v1.107.0-rc.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(ui): place Home Create New Virtual Key button like the Virtual Keys page by @krrish-berri-2 in #46778
- fix(mcp): scope gateway OAuth consent to x-mcp-servers and add explicit scope setting by @devin-ai-integration[bot] in #44957
- fix(mcp): request offline access from Google upstream OAuth providers by @devin-ai-integration[bot] in #41197
- fix(anthropic): drop unknown legacy thinking keys under drop_params when rebuilding adaptive thinking by @mateo-berri in #46741
- feat(mcp): enable verified stateless protocol capabilities by @joshua-berri in #46264
- fix(ci): restore loadscope on the mcp-interactions shard so its MCP subscription cases do not race across workers by @mateo-berri in #46783
- feat(proxy): add agent_access_default_deny for least-privilege agent access by @devin-ai-integration[bot] in #43979
- fix(rust-bridge): honor the configured request_timeout on native Messages by @yujonglee-berri in #46749
- ci: run mcp interactions and redis cluster iam integration tests only in circleci by @yassin-berriai in #46780
- test(integration): hand every harness server a port from one per-worker block by @yuneng-berri in #46761
- fix(terraform): stop the perpetual plan diff on litellm_mcp_server by @yassin-berriai in #46781
- test(e2e): perf users start staggered with jitter, tool-call streams get a first token, small_bodies_5rps sends from the mixed case's callers by @kerry-berri in #46776
- fix(ollama): prevent reused response ids from dropping spend logs by @devin-ai-integration[bot] in #39227
- fix(vertex-ai): end free period for deepseek-v4.1-flash-maas by @berriai-litellm-provider-info-sync[bot] in #46793
- feat(cost-map): add baseten Muse Spark Open and Nemotron 3.5 Super VL by @berriai-litellm-provider-info-sync[bot] in #46794
- fix(proxy): limit gzip to dashboard analytics and offload compression by @tin-berri in #46712
- chore(pricing): add github_copilot deprecation dates for claude-opus-5 and gpt-5.6-terra by @berriai-litellm-provider-info-sync[bot] in #46792
- ci(cost map): classify token_count_framing and token_count_fallback_model in the schema generator by @mateo-berri in #46784
- fix(terraform): accept 2xx from the proxy in mcp server, model, key and org requests by @yassin-berriai in #46550
- fix(proxy): cooldown errors carry 429, Sentry starts at boot without request bodies, tracing failures log at ERROR, exporter counters exported by @ryan-crabbe-berri in #46344
- feat(wandb): add NVIDIA Nemotron 3.5 Super VL to the cost map by @berriai-litellm-provider-info-sync[bot] in #46795
- fix(bedrock): forward Nova Sonic realtime tool calls with their arguments by @mrinal-berri in #46214
- test(ui): send Connection: close on every integration browser request by @mateo-berri in #46805
- refactor(rust-bridge): move the route host modules under host/routes by @yujonglee-berri in #46786
- refactor(rust-bridge): let each route host pick the body params by @yujonglee-berri in #46787
- fix(responses): preserve explicit websocket API keys (internal copy of #40853) by @mateo-berri in #46724
- test(integration): build OpenAI and Anthropic SDK models before tests start threads by @yucheng-berri in #46797
- fix(guardrails): honor streaming settings on the Noma v2 guardrail by @yucheng-berri in #46606
- fix(count_tokens): count Anthropic-format requests for OpenAI the way /v1/messages inference converts them by @mateo-berri in #46759
- fix(sso): share SAML sign-in state over Redis without enable_redis_auth_cache by @yuneng-berri in #46807
- fix(responses): write one spend-log row per native WebSocket turn by @kerry-berri in #46768
- fix(crusoe): update base URL to current endpoint by @acheamponge in #33121
- test(e2e): attach perf case metrics and limits as JUnit properties by @narmstrong-berri in #46774
- fix(terraform)!: send additional_drop_params to the proxy instead of deleting the keys it names by @mateo-berri in #46782
- fix(count_tokens): count Anthropic-format requests for Gemini the way /v1/messages inference converts them by @mateo-berri in #46767
- fix(proxy): reset end-user spend in committed pages so the budget cascade survives a large LiteLLM_EndUserTable by @kerry-berri in #46502
- test(e2e): perf datastore limits count the Postgres statements and Redis commands a request waits on, background work reported on its own by @kerry-berri in #46798
- fix(cost): bill Responses API image generation and usage reported web search as tool usage cost by @devin-ai-integration[bot] in #41877
- fix(count_tokens): return a 400 naming Anthropic blocks the OpenAI and Gemini count can't convert by @mateo-berri in #46772
- fix(vertex-ai): drop cached flex price from gemini 3 preview rows by @berriai-litellm-provider-info-sync[bot] in #46826
- fix(proxy): only release the legacy limiter's slot from an admitted Responses WebSocket by @devin-ai-integration[bot] in #46822
- test(e2e): mixed_size_requests_2rps perf case (coding-agent bodies 5k to 1m tokens with tools, JWT and key callers, two guardrails) by @kerry-berri in #46717
- fix(ui): validate the Add Model form when Test Connect is clicked by @yuneng-berri in #46834
- fix(bedrock-passthrough)!: return AWS-shaped errors so AWS SDKs read the code and message by @yucheng-berri in #46522
- test(integration): wait for the gen-AI span before reading the excluded-services operator trace by @yucheng-berri in #46846
- feat(soniox): decode proxy form fields for context, translation and flags by @dan2k3k4 in #40605
- fix(router): let an exact base_model widen a deployment's context window by @setarm01 in #46197
- fix(bedrock): grant sts:GetWebIdentityToken and sts:TagGetWebIdentityToken in web identity session policy for claude_platform by @Bochenski in #46670
- fix(proxy)!: count endpoints return errors in their source API shape instead of silent local counts by @mateo-berri in #46815
- fix(responses): preserve provider request IDs in streaming failure logs by @moyai-berriai[bot] in #45453
- fix(guardrails): record every content filter match in logging_only and offer the mode in the UI by @yucheng-berri in #46673
- fix(anthropic): keep trailing user messages with None or empty list content by @devin-ai-integration[bot] in #41397
- fix: preserve non-null anyOf branches when stripping null types for Vertex by @debanshd in #41683
- perf(ui): page the member tables and look up budget rows once per render by @Bytechoreographer in #26667
- fix(proxy): track and drain management audit log writes on shutdown by @akram1089 in #43594
- feat(gemini): allow disabling thought summaries while keeping thinking on by @Aryan-Pardeshi in #36460
- fix(router)!: keep RPM, region, and param checks when token counting fails by @ryuto-takemoto in #44544
- build(deps): bump claude-agent-sdk to 0.2.165 to unblock osv-scan (rc/1.107.0) by @yuneng-berri in #46976
- fix(mcp): stop proxy-started legacy listeners from consuming server rpm (rc/1.107.0) by @yuneng-berri in #46982
- fix(cost): bill bridged /v1/messages Responses replies like native /v1/responses for reasoning tokens and service tier (backport #46975 to rc/1.107.0) by @yuneng-berri in #47009
- fix(proxy): backport the 1.107.0 rc triage fixes to rc/1.107.0 by @yuneng-berri in #47043
- fix!: backport the second batch of rc/1.107.0 CI triage fixes from main by @yuneng-berri in #47090
- feat(mcp): backport the ID-JAG stack to rc/1.107.0 (#46748, #46747, #46745, #47004) by @yassin-berriai in #47058
- fix(mcp)!: backport the ID-JAG signed resource claim cap to rc/1.107.0 (#47094) by @yassin-berriai in #47138
- fix(mcp)!: backport the OAuth Delegate fields and gateway-owned DCR bridge client to rc/1.107.0 (#46941, #46940) by @yassin-berriai in #47153
- test: backport the SDK logging drain to rc/1.107.0 (#46924) by @yuneng-berri in #47143
- fix(vector-stores): backport #47021 to rc/1.107.0 by @yuneng-berri in #47159
- fix: backport the third batch of rc/1.107.0 CI triage fixes from main by @yuneng-berri in #47174
- fix(bedrock): backport #46307 and #46524 to rc/1.107.0 by @yucheng-berri in #47157
- feat(count_tokens)!: backport the count_tokens stack to rc/1.107.0 (#46839, #46843, #46583, #47057, #47064, #47163, #46777) by @yuneng-berri in #47209
- chore: bump litellm-enterprise 0.1.77 -> 0.1.78, litellm-proxy-extras 0.4.109 -> 0.4.110 on rc/1.107.0 by @yuneng-berri in #47230
- fix(ui): backport #47025 to rc/1.107.0 by @yuneng-berri in #47224
- chore: rebuild Admin UI bundle for rc/1.107.0 by @yuneng-berri in #47232
- fix(guardrails)!: backport #45874 to rc/1.107.0 by @yucheng-berri in #47234
New Contributors
- @setarm01 made their first contribution in #46197
- @debanshd made their first contribution in #41683
- @akram1089 made their first contribution in #43594
- @Aryan-Pardeshi made their first contribution in #36460
- @ryuto-takemoto made their first contribution in #44544
Full Changelog: v1.107.0-dev.3...v1.107.0-rc.1