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-dev.2Verify 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-dev.2/cosign.pub \
ghcr.io/berriai/litellm:v1.107.0-dev.2Expected 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
- feat(claude-code): emit installationPreference in marketplace.json entries by @devin-ai-integration[bot] in #41430
- fix(proxy): scope /global/activity/cache_hits analytics to the caller's own and permitted-team logs by @ojensen-berri in #46210
- fix(anthropic): cache tool result screenshots on the /v1/messages to Responses bridge by @ryan-crabbe-berri in #46324
- test(integration): cover fine_tuning endpoint contracts by @devin-ai-integration[bot] in #44697
- fix(databricks): send a single plain text block as a string for non-Claude models by @mrinal-berri in #45686
- feat(ui): show decision models as decisions and list the supported ones in the AI Hub by @devin-ai-integration[bot] in #45965
- feat(decisions)!: send images to Cloudflare Clef through its images field by @devin-ai-integration[bot] in #45734
- feat(anthropic): generate auto mode safeguard_results with a classifier model on the /v1/messages chat bridge by @devin-ai-integration[bot] in #45600
- feat(mcp): separate confidential client for ID-JAG leg 2 by @joshua-berri in #46211
- fix(http_handler): only replay POST and PATCH when the request never reached the upstream by @mateo-berri in #46336
- feat(decisions): add Laya and Bespoke providers to the Add Model form by @devin-ai-integration[bot] in #45260
- fix(ui): widen the LiteAdmin home model selector by @moe-berri in #46446
- fix(cache): keep cache hits free of unset fields, and follow intentional behavior changes in CircleCI suites by @mateo-berri in #46359
- fix(anthropic): check Vertex forced-tool support on the real model, skip non-string user ids, drop speed where unsupported by @ryan-crabbe-berri in #46337
- fix(sso)!: reject empty identities before session creation by @yucheng-berri in #44098
- chore(codeowners): replace kerrylu-berri with kerry-berri by @kerry-berri in #46452
- fix(cost-map): registry audit 2026-10-14, remove azure_ai/claude-fable-5-5 by @devin-ai-integration[bot] in #46428
- fix(proxy): build configured logging callbacks at boot so a broken callback fails startup instead of the first request by @ryan-crabbe-berri in #46378
- feat(dashscope): add Wan 3.0, Wan 2.7 and HappyHorse video generation via /v1/videos by @Bytechoreographer in #43706
- fix(anthropic): forward service_tier on chat completions to Anthropic and Azure by @ryan-crabbe-berri in #46461
- fix(ui): label Decisions playground issues by question key and fix the Response header row by @mateo-berri in #46145
- fix(http): restore the 15s aiohttp keep-alive default in the Python and Rust clients by @mateo-berri in #46355
- fix(vertex_ai): pass the per-request timeout to Gemini streaming calls by @kerry-berri in #46349
- feat(proxy): add deployment warning endpoints with instance-wide ignore and snooze by @yuneng-berri in #46347
- fix(proxy): check previous_response_id ownership on /v1/responses/compact by @mateo-berri in #46408
- refactor(router): name the pre-content stream retry helpers for both stream paths and let the retry loop take its attempt function by @kerry-berri in #46474
- fix(anthropic): stream json_schema answers as content on Bedrock Mantle and Claude Platform, and join split answers by @mateo-berri in #46331
- fix(caching): collect the Redis circuit-breaker state gauge as one series per state across worker processes by @kerry-berri in #46357
- fix(gemini): add the changelog shutdown date to gemini-2.0-flash-exp-image-generation by @berriai-litellm-provider-info-sync[bot] in #46489
- test(integration): remove six setup causes of CircleCI integration reds by @yuneng-berri in #46490
- fix(s3_v2): bound each upload attempt, add jitter, retry 429 and transport errors in the call by @ryan-crabbe-berri in #46340
- fix(streaming): add CustomStreamWrapper.close() and release the connection when a sync stream ends by @kerry-berri in #46354
- feat(proxy): let proxy admins open soft_budget to team admins by @yuneng-berri in #46485
- fix(proxy): accept every known logging callback on /health/services by @yassin-berriai in #46297
- test(proxy): cover the OTel V2 otel callback on /health/services by @yassin-berriai in #46394
- fix(vllm): write spend log rows for /vllm passthrough calls to router models by @devin-ai-integration[bot] in #45733
- fix(config): treat blank env values as unset so the proxy neither crash-loops nor silently drops a guardrail by @ryan-crabbe-berri in #46341
- fix(proxy): evict the cached user on every proxy for every /user/update and /user/bulk_update by @yuneng-berri in #46500
- feat(proxy): let proxy admins open team member defaults to team admins by @yuneng-berri in #46353
- fix(anthropic): forward service_tier on /v1/messages for anthropic, azure_ai and bedrock_mantle by @kerry-berri in #46370
- fix(router): read the first stream chunk before returning so a failure before any token runs through the retry and fallback budget by @kerry-berri in #46493
- fix(caching): report Redis circuit-breaker metrics through the Prometheus services logger by @kerry-berri in #46484
- fix(anthropic): keep refusal stop_reason and stop_details on the logged response by @devin-ai-integration[bot] in #46104
- fix(router): add fallback_on_unsupported_params so param rejections can raise instead of falling back by @kerry-berri in #46350
- feat(access-groups): per-server MCP tool permissions on access groups by @yassin-berriai in #46300
- feat(helm): read database and Redis host or URL from a Kubernetes Secret by @yassin-berriai in #46410
- fix(mcp): leave out tool texts too long to embed instead of failing tool search by @devin-ai-integration[bot] in #43554
- perf(scim): batch group member identity lookups into one query per push by @yassin-berriai in #46412
- feat(helm): support a separate hostname per component in the componentized deploy by @yassin-berriai in #46360
- fix(redis): default every Redis client to a 5s socket timeout when none is set by @ryan-crabbe-berri in #46501
- fix(router): report fallbacks skipped for access or budget instead of calling them failed by @yassin-berriai in #46291
- fix(proxy): finish prisma engine requests when their caller is cancelled by @yassin-berriai in #46503
- fix(proxy-extras): run prisma migrate deploy under the pinned coordinator lock instead of Prisma's session advisory lock by @yassin-berriai in #46368
- test(integration): fix three more CircleCI integration reds from test setup by @yuneng-berri in #46510
- fix(caching): make Redis Cluster commands wait for a pool slot instead of tripping the circuit breaker by @yassin-berriai in #46488
- test(rust): assert native serving via the x-litellm-rust response marker by @yujonglee-berri in #46531
- fix(responses): propagate cache_control through responses->chat completion bridge by @TobiMayr in #32511
- feat(guardrails): add Airia guardrail integration by @airia-open-source in #40784
- feat(terraform): add team_member_model_max_budget to litellm_team by @matthowardcohere in #46274
- fix(responses): keep the provider code and message on top-level stream error events by @mateo-berri in #46438
- feat(access-groups): grant Claude Code skills through access groups by @yassin-berriai in #46294
- test(integration): delete flaky team model TPM concurrency test by @kerry-berri in #46541
- fix(vertex-ai): add flex prices to gemini-nano-banana-2.1 by @berriai-litellm-provider-info-sync[bot] in #46512
- feat(proxy): let proxy admins open team metadata to team admins, keeping proxy settings with proxy admins by @yuneng-berri in #46506
- fix(responses): return the first message item as content for structured output on the chat bridge by @kerry-berri in #46508
- fix(cost): split xai spend rows across input and output instead of booking the total as output by @kerry-berri in #46320
- test(rust-bridge): pin Messages and Responses callback contracts on the native path by @yujonglee-berri in #46443
- test(host-python): move driver tests out of the inline module by @yujonglee-berri in #46325
- refactor(host-python): collect host failures in a thiserror Error enum by @yujonglee-berri in #46361
- refactor(host-python): run the Python driver as one async body by @yujonglee-berri in #46235
- refactor(rust-bridge): generator-style execution protocol with stream step names by @yujonglee-berri in #46282
- test(translation): share rich request and response templates by @kerry-berri in #46546
- refactor(rust-bridge): return an unstarted Execution from native entrypoints and drive it in Python by @yujonglee-berri in #46299
- test(integration): add claude-haiku-5-5 basic translation cases by @devin-ai-integration[bot] in #45176
- feat(ui): add the Airia guardrail to the Guardrail Garden with its logo by @airia-open-source in #46562
- feat(proxy): return the W3C traceresponse header on traced responses by @adityajoy-1902 in #42079
- feat(proxy): general_settings.disable_requester_ip_address_logging keeps caller IP out of spend logs by @yucheng-berri in #45804
- test(integration): update stale CircleCI integration expectations by @yuneng-berri in #46570
- fix(cli): run group subcommands in the lite shell and default to the logged-in gateway by @mateo-berri in #46511
- fix(cost): price AgentCore web search at $7 per 1,000 queries by @litellm-stampbot in #46571
- feat(ui): replace deployment warning banners with a health icon, alert banner and panel by @yuneng-berri in #46498
- fix(caching): report zero response_cost on a response-cache hit by @Apeksha9389 in #46471
- fix(responses bridge): keep defer_loading on function tools sent to the Responses API by @mateo-berri in #46439
- fix(router): read the first stream chunk through aiter so MCP auto-run streaming works again by @kerry-berri in #46578
- fix(anthropic): keep tool_search_tool_result so the search call replays with its result by @mateo-berri in #46440
- test(translation): add gpt-6-astra translation cases by @devin-ai-integration[bot] in #46580
- test(translation): recapture bedrock invoke claude-sonnet-4-6 bases after usage shape change by @devin-ai-integration[bot] in #46579
- test(translation): add claude-fable-5-1 translation cases by @devin-ai-integration[bot] in #46581
- fix(bedrock)!: replay redacted_thinking on Converse and keep its data as Claude's own string by @ryan-crabbe-berri in #46532
- test(translation): share rich fixtures across Claude, GPT and Gemini providers by @kerry-berri in #46585
- fix(bedrock): use base_model for Claude capability checks on application inference profile ARNs by @ryan-crabbe-berri in #46569
- feat(cost-map): add scx-ai DeepSeek-V4.1-flash, GLM-5.3 and Kimi-K3 by @devin-ai-integration[bot] in #46496
- fix(cost): price typesafe/jev-1.14.0 by @hyamie in #46594
- fix(responses): translate OpenAI tool_search to Anthropic tool search for Claude models by @devin-ai-integration[bot] in #45882
- test(integration): follow #46101 in the breakpoint cache mark census expectation by @mateo-berri in #46509
- fix(router): keep the prompt caching affinity pin alive as long as the prefix's cache_control ttl by @devin-ai-integration[bot] in #46084
- fix(anthropic): emit one tool_use block per call when a /v1/messages stream chunk carries several by @narmstrong-berri in #46492
- refactor: clean up fresh tech debt in per-user Copilot auth, Ternary FOCUS export and telemetry by @devin-ai-integration[bot] in #45769
- fix(responses bridge): round-trip tool_search_call and tool_search_output items between turns by @mateo-berri in #46444
- fix(anthropic)!: translate the OpenAI tool_search tool on /v1/chat/completions for Claude models by @mateo-berri in #46389
- fix(xai): name a completed xAI batch's results file and stop looking it up on xAI's files API by @yucheng-berri in #45559
- chore(prices): add xAI grok-voice-3.0, grok-voice-2.0 and grok-voice-latest realtime rows by @berriai-litellm-provider-info-sync[bot] in #46602
- fix(responses): map Anthropic tool search to OpenAI server tool search by @mateo-berri in #46441
- fix(proxy): store list-valued audit log changes as JSON text by @yuneng-berri in #46555
New Contributors
- @airia-open-source made their first contribution in #40784
- @matthowardcohere made their first contribution in #46274
- @adityajoy-1902 made their first contribution in #42079
- @Apeksha9389 made their first contribution in #46471
- @hyamie made their first contribution in #46594
- @narmstrong-berri made their first contribution in #46492
Full Changelog: v1.107.0-dev.1...v1.107.0-dev.2