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.94.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.94.0-dev.1/cosign.pub \
ghcr.io/berriai/litellm:v1.94.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
- feat(ui): working Test Connection for the complexity auto router by @akapur99 in #32950
- fix(xecguard): use StandardLoggingGuardrailInformation in logging hook by @yucheng-berri in #32911
- feat(ui): adopt openapi-react-query ($api) and convert useCustomers by @ryan-crabbe-berri in #32949
- refactor(ui): colocate the mcp-servers view, keeping the shared mcp_tools surface by @ryan-crabbe-berri in #32968
- refactor(ui): convert endpoint usage charts to shadcn/recharts by @ryan-crabbe-berri in #32723
- fix(proxy-auth): stop unrecognized model namespaces slipping through provider wildcard keys by @mateo-berri in #32979
- feat(router): random-pick multi-model complexity tiers by @krrish-berri-2 in #32967
- fix(xecguard): sanitize scan result before recording it for logging by @yucheng-berri in #32935
- fix(auto_router): filter embedding models in complexity tab dropdowns, require all tiers, inline validation by @akapur99 in #32978
- fix(anthropic): translate raw adaptive thinking for pre-4.6 models on chat completions and Bedrock Converse by @akapur99 in #32944
- feat(router): add Router(plugins=[...]) routing-plugin pipeline by @krrish-berri-2 in #32972
- feat(router): soft-floor adaptive mode for complexity router by @krrish-berri-2 in #32947
- docs(github): add QA runbook section to the PR template by @mateo-berri in #32965
- fix(model_cost): add supports_reasoning: false to Gemini image generation models by @mateo-berri in #32836
- build(dev-env): add make bootstrap and unprovisioned-checkout preflight to pre-commit by @mateo-berri in #32981
- ci(ui): report only error-level knip findings in CI by @ryan-crabbe-berri in #32971
- feat(batches): track cost for unmanaged Bedrock batches, generalize the flag by @Sameerlite in #32315
- fix(guardrails): walk custom_tool_call_output items in _content_utils by @yucheng-berri in #32969
- fix: show and allow editing team model aliases after team creation by @ryan-crabbe-berri in #33047
- fix(ci): bump pillow to 12.3.0 to resolve osv-scan CVEs by @yucheng-berri in #33093
- feat(mcp): mint gateway-bound envelope at the token endpoint for dcr_bridge oauth_delegate by @tin-berri in #32828
- fix(mcp): surface rejected delegate-auth upstream tokens as connect-time 401 by @tin-berri in #32741
- fix(proxy): track unauthenticated pass-through requests in spend logs by @devin-ai-integration[bot] in #32410
- feat(lasso): send source.type for Used By attribution by @yucheng-berri in #33090
- fix(responses): continue MCP gateway tool turns from the final response and surface failures by @thibault-linktree in #33025
- fix(responses): continue MCP gateway tool turns from the final response and surface failures by @tin-berri in #33099
- fix(completion): forward aws credential kwargs into litellm_params so the responses bridge keeps WIF auth by @mateo-berri in #32956
- fix(ui): respect litellm_key_header_name in BYOK credential save and workflow runs fetches by @ryan-crabbe-berri in #33103
- refactor(ui): standardize debounce waits behind shared DEBOUNCE_WAIT_MS constant by @ryan-crabbe-berri in #33040
- feat(ui): rebuild the Virtual Keys table on the shared DataTable by @yuneng-berri in #32991
- fix: redact async complete streaming response for custom callbacks by @yucheng-berri in #33106
- build(ui): bump @tanstack/react-pacer from 0.2.0 to 0.22.1 by @ryan-crabbe-berri in #33041
- fix(ui): address Virtual Keys redesign review nits by @yuneng-berri in #33112
- fix(openai/responses): clamp max_output_tokens below API minimum by @devin-ai-integration[bot] in #33098
- fix(prometheus): read v3 rate limiter remaining values for per-key model gauges by @yucheng-berri in #33119
- fix(ui): drop w-full from page-content wrappers to remove 32px horizontal overflow by @yuneng-berri in #33118
- refactor(ui): migrate straightforward value debounces to react-pacer by @ryan-crabbe-berri in #33042
- feat(mcp): interactive SSO sign-in for dcr_bridge oauth_delegate DCR clients by @tin-berri in #32946
- test(proxy): add regression tests for management_endpoints edge cases by @yuneng-berri in #32976
- fix(auto-router): correct Responses API tool_choice shape and propagate alias litellm_params by @krrish-berri-2 in #32974
- fix(ui): render the sidebar scrollbar with shadcn ScrollArea by @yuneng-berri in #33124
- refactor(ui): migrate callback debounce sites to react-pacer with regression tests by @ryan-crabbe-berri in #33043
- chore: add CODEOWNERS for ui and proxy UI build artifacts by @yuneng-berri in #33131
- feat(mcp): client-held refresh envelope for the dcr_bridge oauth_delegate flow by @tin-berri in #32980
- feat(ui): rebuild the Teams table on the shared DataTable by @yuneng-berri in #33128
- fix(mcp): relay upstream OAuth token and DCR rejections instead of a generic 500 by @tin-berri in #33113
- fix(keys): persist key_type so the UI shows correct key scope instead of "All Proxy Models" by @devin-ai-integration[bot] in #33115
- feat(router): opt-in session affinity for complexity router by @krrish-berri-2 in #33126
- feat(prometheus): expose video duration and image count consumption metrics by @yucheng-berri in #33138
- test(e2e): otel trace completeness on /chat/completions by @yucheng-berri in #33132
- fix(sso): paginate through all pages when fetching service principal group assignments by @ryan-crabbe-berri in #33149
- test(e2e): otel trace completeness on /v1/messages by @yucheng-berri in #33133
- feat(ui): add adaptive routing settings to Auto-Router v2 by @krrish-berri-2 in #33146
- refactor(mcp): extract the dcr_bridge token flow into bridge_token_flow.py by @tin-berri in #33141
- chore: bump litellm 1.93.0 -> 1.94.0, litellm-enterprise 0.1.49 -> 0.1.50, litellm-proxy-extras 0.4.76 -> 0.4.77 by @yuneng-berri in #33229
- chore(deps): pin httplib2 and setuptools transitive floors by @yuneng-berri in #33233
- feat(ui): left-anchor the Create Key and Create Team CTAs by @yuneng-berri in #33248
- fix(anthropic/passthrough): drop incompatible temperature when downgrading adaptive thinking for pre-4.6 models by @devin-ai-integration[bot] in #33244
- fix(guardrails): run apply_guardrail-style model-level pre_call guardrails at deployment hook by @yucheng-berri in #33136
- fix(proxy)!: enforce user budget on team keys (read-time + reservation) with UI opt-out by @devin-ai-integration[bot] in #32005
- fix(e2e): bound spend-log snapshots to a /spend/logs/v2 window by @mubashir1osmani in #33265
- test(e2e): cover key rpm/tpm rate limiting, window reset, and pacing headers by @mateo-berri in #32914
- fix(anthropic): use native output capability by @krrish-berri-2 in #33235
- fix(ci): retry setup-uv installs to survive transient manifest fetch failures by @mateo-berri in #33279
- fix(proxy): never log raw virtual keys in key insertion debug output by @yucheng-berri in #33268
- feat(pricing): add gemini-omni-flash-preview with video output token pricing by @mateo-berri in #33274
- fix(auth): scope the JWT enterprise gate to actual JWTs by @mubashir1osmani in #33296
- fix(s3): sanitize slashes in response-id-derived object key file name by @yucheng-berri in #33271
- refactor(ui): migrate guardrails table onto shared DataTable by @yuneng-berri in #33303
- chore(ci): promote internal staging to main by @yuneng-berri in #33308
Full Changelog: v1.93.0-rc.1...v1.94.0-dev.1