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.100.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.100.0-rc.1/cosign.pub \
ghcr.io/berriai/litellm:v1.100.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(anthropic): drop and self-heal empty thinking blocks on /v1/messages by @tin-berri in #38625
- fix(anthropic): handle per-level reasoning_effort flags without supports_reasoning by @tin-berri in #38618
- fix(complexity_router): route client housekeeping calls to the cheapest tier by @tin-berri in #38598
- test: fix staging CI regressions from #38182, #38144, #38265, #37962, and #37969 by @mateo-berri in #38304
- feat(spend): report prompt caching savings as total and gateway-attributed by @tin-berri in #38134
- fix(proxy): let llm_api virtual keys read /model_group/info by @devin-ai-integration[bot] in #38662
- feat(ui): edit the auto-router tier set with custom classifier-defined tiers by @tin-berri in #38603
- fix(proxy): count tools, system, and Anthropic image and document blocks in the count_tokens fallback (internal copy of #36671) by @mateo-berri in #38657
- test: refresh the suites that drifted from langfuse and OpenAI's retired Assistants API by @yuneng-berri in #38637
- test(e2e): unskip four tests whose blockers no longer hold by @yuneng-berri in #38640
- feat(proxy): add paginated GET /public/v1/model_hub by @yuneng-berri in #38636
- refactor(ui): type search tool params from the generated schema by @yuneng-berri in #38633
- feat(a2a): semantic search over the agent registry via GET /v1/agents?query and an agent_search MCP tool by @mateo-berri in #38609
- fix(model_prices): add bedrock_mantle gpt-5.5/5.4 272K tiers, align sol with AWS invoice by @mateo-berri in #38615
- fix(ui): keep the usage filter visible when the caller's scope is empty by @yuneng-berri in #38581
- fix(registry): add Gemini Omni 1.1 Flash, xAI grok-imagine image models, Mistral cache-read pricing, GLM 5.3 Flash + Kimi K2.7 Code entries by @devin-ai-integration[bot] in #38560
- fix(logging): preserve null end user in callbacks by @yucheng-berri in #38642
- test: close mutation-testing gaps in container, skills and openai-like config factories by @yuneng-berri in #38677
- fix: enforce MCP toolsets attached to a team, org, or internal user by @yucheng-berri in #38488
- fix(tests): drain the global logging worker in RAG aquery billing tests by @devin-ai-integration[bot] in #38653
- chore(techdebt): type new signatures and drop slop comments from the last 24h by @devin-ai-integration[bot] in #38644
- feat(auto_router): write and preview the classifier prompt an edited tier set sends by @tin-berri in #38605
- fix(proxy): price the /v1/messages cost header by the deployment model, not the client alias by @mateo-berri in #38691
- fix(streaming): preserve provider model for cost calculation by @aaaaaandrew in #38656
- feat(models): sync together_ai model registry by @github-actions[bot] in #38694
- test(e2e): cover Together reasoning_effort=none, json_schema, and cache-read pricing by @mateo-berri in #38697
- fix(model_info): map supports_parallel_function_calling into ModelInfo by @mateo-berri in #38692
- test(litellm_utils_tests): give the aiohttp transport tests teeth by @devin-ai-integration[bot] in #38066
- fix(proxy): use default_factory for _BudgetCascade.rollover_caps by @yassin-berriai in #38687
- feat(guardrails): add Lakera v2 skip-message honoring and advisory (inject_system_message) mode by @deepanshululla in #34940
- fix(router): drop a tier param the routed target cannot take by @tin-berri in #38622
- fix(router): scrub fallback stamp keys in place and strip them at the proxy boundary by @yucheng-berri in #38690
- fix(shadow-eval): validate Anthropic SDK judge credentials by @tin-berri in #38701
- feat(ui): run the Lite preset's medium and complex tiers at their documented efforts by @tin-berri in #38482
- chore: drop stray learnings.md workflow note from CLAUDE.md by @yucheng-berri in #38704
- fix(spend): remove the proxy-wide autorouter savings baseline override by @tin-berri in #38700
- fix(router): tier-pinned reasoning_effort supersedes client effort carriers by @tin-berri in #38698
- fix(proxy): reset a key's budget-window counters on spend reset by @yassin-berriai in #38686
- feat(shadow_eval): measure both arms' cost so a job reports what the router would have saved by @tin-berri in #38631
- fix(gpt-5): stop forwarding temperature and top_p to reasoning models that reject them by @tin-berri in #38593
- fix(streaming): report response_cost and Anthropic citations from stream_chunk_builder by @mateo-berri in #38696
- feat(ui): make provider logos readable in dark mode by @yuneng-berri in #38588
- feat(terraform): resource and data source parity with the community provider by @shivamrawat1 in #38158
- test(shadow_eval): configure the anthropic sdk judge in the funnel-seed test by @yucheng-berri in #38717
- fix(ci): fall back to github.token when the GH_TOKEN secret is unset in the Together sync workflow by @mateo-berri in #38695
- feat(terraform): add litellm_jwt_key_mapping resource by @devin-ai-integration[bot] in #38714
- feat(terraform): coverage-enforcing CI gate against the latest OpenAPI spec by @devin-ai-integration[bot] in #38710
- fix(terraform): refresh jwt key mapping allowlist entries now that the resource is merged by @devin-ai-integration[bot] in #38720
- fix(guardrails): record post_call scans on native /v1/messages streams by @mateo-berri in #38713
- chore(deps): raise RestrictedPython floor to 8.5 by @yuneng-berri in #38715
- fix(proxy): trigger async_pre_call_hook on POST /v1/files uploads by @devin-ai-integration[bot] in #38607
- test(responses): adapt temperature tests to the gpt-5 reasoning validation by @mateo-berri in #38748
- fix(router): pin batch, file, and fine-tuning job ids to their owning model group on fallback by @mateo-berri in #38742
- fix(bedrock): map real batch record counts and guard zero-count retire by @mateo-berri in #38744
- fix(aws): forward aws_external_id in Bedrock embeddings and SageMaker credential loading by @mateo-berri in #38727
- fix(aws): build every AWS endpoint and ARN from the region's partition (aws-cn, aws-us-gov) by @mateo-berri in #38747
- refactor(types): replace Any with real types across 178 backend files by @mateo-berri in #38501
- feat(hosted_vllm): add vLLM-Omni videos API by @mubashir1osmani in #38148
- fix(databricks): derive OAuth token URL from workspace origin by @ump45nose in #35940
- test(e2e): add logging e2e coverage (s3_v2, gcs_bucket, team langfuse callback, datadog failure) by @yucheng-berri in #38552
- fix(batches): fill a managed batch page past rows that will not parse by @mateo-berri in #38738
- fix(proxy): tag routing misses proxy-merged tags when chat requests carry litellm_metadata by @mateo-berri in #38739
- fix(health): honor allow_requests_on_db_unavailable in readiness probe by @devin-ai-integration[bot] in #37640
- feat(mcp): support asymmetric (RS256) signing for MCP gateway session tokens by @devin-ai-integration[bot] in #38728
- fix(ui): make code blocks follow the theme in dark mode by @yuneng-berri in #38771
- perf(rust): use pythonize for bridge serialization by @yujonglee-berri in #38764
- fix(policy): let the AI policy suggester drop sampling params its model refuses by @tin-berri in #38594
- feat(ui): link team and key model chips to the models page filtered to that group by @ryan-crabbe-berri in #38626
- fix(ui): make the logs JSON viewer follow the theme in dark mode by @yuneng-berri in #38778
- chore: bump litellm-enterprise 0.1.61 -> 0.1.62, litellm-proxy-extras 0.4.90 -> 0.4.91 by @yuneng-berri in #38779
- refactor: clean up tech debt that landed on 2026-08-29 by @devin-ai-integration[bot] in #38743
- fix(managed resources): let keys with no user_id or team_id read their own batches and files by @devin-ai-integration[bot] in #34849
- fix(proxy): pin model reconcile read to the writer DB so /model/new does not 500 under read replica lag by @devin-ai-integration[bot] in #38580
- fix(ui): restore the reopen control for the log drawer's trace sidebar by @yuneng-berri in #38782
- fix(azure): use /openai/v1 image routes for v1, preview and latest api versions by @devin-ai-integration[bot] in #38285
- fix(soniox): align synthesized SRT/VTT cues to real speech timing by @dan2k3k4 in #34440
- fix(bedrock): route all cohere.embed models to the cohere embedding config by @devin-ai-integration[bot] in #38670
- feat(mcp_gateway): add RFC 7662 introspection for gateway session tokens by @devin-ai-integration[bot] in #38726
- fix(headroom): resolve CCR retrieval on streaming /chat/completions by @devin-ai-integration[bot] in #35017
- fix: bound Hugging Face config fetch and keep embedding tests off the network by @devin-ai-integration[bot] in #38752
- feat(vertex-ai): add veo 3.1 lite model metadata by @emerzon in #30782
- feat(proxy): cyberark conjur secret manager configuration via Admin UI by @devin-ai-integration[bot] in #38445
- ci: build the benchmark environment outside the CodSpeed runner by @devin-ai-integration[bot] in #38426
- fix(proxy): give every
requestscall a timeout so a silent server cannot hang the caller by @ryan-crabbe-berri in #38234 - fix(batches): aggregate reasoning tokens and per-line pass/fail counts by @mubashir1osmani in #37208
- fix(ui): allow in-place editing of classifier numeric inputs by @tin-berri in #38803
- fix(anthropic): emit signature-only thinking blocks on the /v1/messages bridge by @tin-berri in #38809
- fix(ui): keep a deleted-from search query instead of blanking the box by @yuneng-berri in #38830
- fix(proxy): run SMTP send_email off the event loop with a connection timeout by @devin-ai-integration[bot] in #38473
- feat(budgets): enforce shared budgets on model access groups by @ryan-crabbe-berri in #38784
- feat(vertex_ai): support gemini-3.5-transcribe on /v1/audio/transcriptions by @mateo-berri in #38740
- fix(anthropic_endpoints): serialize dict-detail HTTPExceptions on /v1/messages like sibling surfaces by @mateo-berri in #38741
- fix(proxy): count auto-router classifier cost in savings and benchmarks by @tin-berri in #38835
- feat(proxy): add LiteLLM_BudgetWindowSpend table for per-window budget spend by @ryan-crabbe-berri in #35854
- fix(models): registry audit: new Together/Fireworks/Gemini/Mistral/xAI models, xai retirement repricing, bedrock grok-4.6 caching, deprecation dates by @mateo-berri in #38804
- feat(proxy): maintain per-window budget spend rows in the spend writer by @ryan-crabbe-berri in #35886
- perf(proxy): read budget-window spend from the maintained window table by @ryan-crabbe-berri in #35887
- fix(together_ai): stop writing context_length as max_output_tokens in the serverless sync by @mateo-berri in #38820
- fix(openai): flatten top-level anyOf/oneOf/allOf in Responses API tool schemas by @mateo-berri in #38792
- fix(anthropic): cap reasoning_effort thinking budget below max_tokens on /v1/messages by @mateo-berri in #38836
- fix(azure): flatten top-level tool schema combinators for Azure Responses GPT-4-family deployments by @mateo-berri in #38837
- chore: rebuild Admin UI bundle for the next release by @yuneng-berri in #38846
- fix(proxy): list all non-team models for users with an empty model list by @devin-ai-integration[bot] in #38249
- fix(guardrails): stop Lakera monitor mode forwarding unmasked PII on Responses-API bodies by @yucheng-berri in #38841
- feat(mcp): bulk-import Anthropic MCP connectors via API and admin UI by @devin-ai-integration[bot] in #38444
- feat(ui): set a model access group's shared budget from the dashboard by @ryan-crabbe-berri in #38843
- fix(ui): drop stray text next to Close in the model connection test dialog by @yuneng-berri in #38852
- feat(helm): make extra ingress paths configurable in the componentized chart by @yassin-berriai in #35700
- fix(otel/v2): detach credential-routed tenant spans into their own trace by @yucheng-berri in #38847
- test(e2e): stop the reliability fallback tests flaking on gpt-5.5's reasoning budget by @yuneng-berri in #38833
- test(e2e): retry upstream-saturation failures in the claude CLI driver by @yuneng-berri in #38850
- chore(ci): promote internal staging to main by @yuneng-berri in #38805
New Contributors
- @aaaaaandrew made their first contribution in #38656
- @ump45nose made their first contribution in #35940
- @yujonglee-berri made their first contribution in #38764
Full Changelog: v1.100.0-dev.2...v1.100.0-rc.1