Skip to content

v1.100.0-dev.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Aug 04:49
· 7 commits to litellm_internal_staging since this release
e55dbaf

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-dev.2

Verify 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-dev.2/cosign.pub \
  ghcr.io/berriai/litellm:v1.100.0-dev.2

Expected 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

  • refactor(ui): install the shadcn alert primitive by @yuneng-berri in #38300
  • refactor(ui): re-pull label, textarea, separator and skeleton from the registry by @yuneng-berri in #38302
  • feat(prometheus): configure deployment caller identity by @mphilippnv in #38221
  • test(e2e): let the Together replayed-reasoning case survive a single provider miss by @mateo-berri in #38314
  • fix(otel): map /v1/messages provider errors before failure logging by @mateo-berri in #38310
  • fix(exceptions): map upstream status codes for providers with no exception_type branch by @mateo-berri in #38318
  • fix(passthrough): record ownership of streamed responses under managed ids by @mateo-berri in #38320
  • fix(proxy): encrypt streamed responses ids on /openai/v1/responses and /responses aliases by @mateo-berri in #38325
  • test(cost-calc): pin the rate fallbacks inside a tiered-pricing tier by @yuneng-berri in #38327
  • test(e2e): cover the Bedrock provider-feature cells customers run by @mateo-berri in #38232
  • fix(together_ai): fail open on response_format instead of dropping it for unregistered models by @mateo-berri in #38269
  • fix(proxy): honor DATABASE_DISABLE_PREPARED_STATEMENTS in componentized entrypoints by @devin-ai-integration[bot] in #38363
  • fix(anthropic-responses): preserve structured output strictness by @eugene-yao-zocdoc in #38211
  • chore(typing): roll up the daily tech debt cleanups from Aug 20 to Aug 26 by @devin-ai-integration[bot] in #37922
  • fix(router): resolve hidden aliases for explicit lookup by @daniel-meismer-zocdoc in #38272
  • fix(ui): keep focus in the add model public name input while typing by @devin-ai-integration[bot] in #38366
  • fix(model_prices): price 1-hour cache writes on claude-3-haiku and claude-3-opus at 2x input by @mateo-berri in #38371
  • fix(proxy): keep the caller's Google token on credential-less Vertex passthrough under custom auth by @mateo-berri in #38299
  • fix(mcp): preserve provider access token lifetime by @daniel-meismer-zocdoc in #38271
  • chore(ui): remove stale "New" badges from the dashboard by @yuneng-berri in #38374
  • test(cost-estimate): pin the prices and period totals /cost/estimate returns by @yuneng-berri in #38315
  • fix(ci): let the mutation workflow find covered lines so it generates mutants by @yuneng-berri in #38305
  • fix(model_prices): raise bedrock_mantle gpt-5.5 and gpt-5.4 max_input_tokens to Mantle's enforced 1050000 by @mateo-berri in #38368
  • fix(azure/realtime): authenticate realtime websocket with Azure AD token when no api-key by @devin-ai-integration[bot] in #34658
  • fix(bedrock): map reasoning_effort to reasoning.effort for OpenAI GPT-5.x on Converse by @6matt in #38279
  • test(prometheus): cover caller-identity config failure cases by @yucheng-berri in #38380
  • fix(redis): support credential providers across clients by @eugene-yao-zocdoc in #38094
  • fix(health): support mode: image_edit in health checks by @devin-ai-integration[bot] in #38291
  • fix(cost-map): add US data residency uplift to claude-sonnet-4-6 and mythos entries by @mateo-berri in #38369
  • fix(anthropic): raise missing-credential error on /v1/messages passthrough by @devin-ai-integration[bot] in #38240
  • fix(mcp): complete DCR bridge OAuth challenges by @daniel-meismer-zocdoc in #37384
  • test(proxy): pin the request-validation contracts in proxy/_types.py by @yuneng-berri in #38307
  • docs(CLAUDE.md): add pull-before-work rule by @mateo-berri in #38386
  • fix(anthropic): scale cache costs by fast mode and trust served speed by @mateo-berri in #38378
  • fix(pricing): add azure gpt-5.6 cache write rates and correct data zone priority by @mateo-berri in #38370
  • docs: tighten the pull-before-work rule in CLAUDE.md by @devin-ai-integration[bot] in #38389
  • fix(health): strip credential fields from GET /health output by @Siraj637909 in #37090
  • fix(minimax): attach MINIMAX_API_KEY on anthropic messages requests by @mateo-berri in #38393
  • refactor(ui): replace hand-picked z-index values with one named scale and lint it by @ryan-crabbe-berri in #38282
  • fix(health): probe Azure GA realtime path for transcription-only models by @mateo-berri in #38390
  • fix(bedrock): parse cacheDetails for Converse 1h/5m cache write cost split by @danielva-monday in #36762
  • fix(caching): flush async cache writes cancelled at event loop shutdown by @mateo-berri in #38385
  • fix(router): resolve model_group_alias before pre-routing strategy dispatch by @tin-berri in #38382
  • feat(proxy): enforce rpm/tpm on model add + fix validation error title in UI by @kunal2002 in #36518
  • refactor(ui): move every page header onto the shared PageHeader by @yuneng-berri in #38306
  • fix(proxy): stop cache eviction errors from failing /key/update by @yuneng-berri in #38308
  • fix(aiohttp): honor global ssl_verify on the aiohttp_openai handler path by @mateo-berri in #38400
  • fix(logging_worker): rescue dequeued logging tasks lost at event loop close by @mateo-berri in #38394
  • fix(caching): require the namespace delimiter when checking already-namespaced redis keys by @mateo-berri in #38403
  • fix(prompts): reject keyed prompt_data with prompt_id and populate prompt version by @mateo-berri in #38404
  • fix(cost_calculator): resolve real cost key when model_name alias contains '/' by @ksk2023 in #38344
  • fix(cost-map): correct prompt_cache_min_tokens for Claude Fable 5 and backfill Anthropic re-export entries by @mateo-berri in #38405
  • test(azure-ai): pin the 422 retry that drops the field the provider rejected by @yuneng-berri in #38309
  • refactor(ui): read the auto-router tier set through one row list by @tin-berri in #38408
  • fix(proxy): stop empty DB router_settings lists from clobbering yaml fallbacks by @mateo-berri in #38406
  • fix(team): allow no-reset default budgets for team members by @devin-ai-integration[bot] in #37708
  • fix: forward image content lists to DeepSeek vision models by @yucheng-berri in #38397
  • fix(fireworks_ai): stop using the trace id as the session affinity key by @Hamjaster in #35754
  • fix(gemini-realtime): keep the client's voice on Vertex AI native-audio Live by @yucheng-berri in #38395
  • fix(vertex_ai): bill Gemini grounding per unique web search query by @ousamabenyounes in #36397
  • fix(health): make the image_edit health probe moderation-safe by @mateo-berri in #38417
  • test: gate the test tree on fifteen assertion and handler rules it already satisfies by @ryan-crabbe-berri in #38361
  • fix(proxy): key lazy openapi stubs off registered features, not sys.modules by @mateo-berri in #38416
  • fix(proxy): derive auto-router health from its underlying models by @tin-berri in #38174
  • fix(responses): let cache-control injection reach the system prompt from instructions by @tin-berri in #38120
  • fix(gemini): bill Google Maps grounding as its own SKU by @mateo-berri in #38418
  • fix(speech): keep proxy metadata and completion cost through the TTS completion bridge by @mateo-berri in #38414
  • fix: map Gemini ON_DEMAND_FLEX traffic type to flex service tier by @bisma-nawaz in #37724
  • feat(langfuse): support langfuse_environment as a per-key dynamic callback param by @devin-ai-integration[bot] in #38264
  • feat(proxy): hide unhealthy models from model listings, opt-in by @yuneng-berri in #38313
  • fix(mcp): honor admin-entered OAuth URLs on authorize after issuer yield by @mateo-berri in #38379
  • fix(model_prices): correct gemini-3.5-flash-lite flex cache-read pricing by @mateo-berri in #38422
  • fix(cost): price gemini-live-2.5-flash-native-audio realtime sessions by @mateo-berri in #38419
  • fix(cost-map): correct Gemini TTS and native-audio rates by @mateo-berri in #38412
  • fix(prompts): propagate PATCHed prompt templates to every worker and pod by @mateo-berri in #38411
  • fix(model_prices): bill gemini -latest/preview alias cache reads at 10% of input by @mateo-berri in #38423
  • fix(proxy): sync search tools into the router on management writes by @yuneng-berri in #38392
  • feat(guardrails): track Azure Prompt Shield usage and cost with spend isolation by @yucheng-berri in #38387
  • fix(prompts): apply prompt templates before routing on /v1/responses and honor ignore_prompt_manager_model by @mateo-berri in #38407
  • fix(cost): make cost-breakdown headers respect service tier by @mateo-berri in #38424
  • fix(mcp): add litellm[mcp] extra and actionable error when streamable_http_client is missing by @mateo-berri in #38399
  • revert(proxy): remove router_model_name from auto-routed response bodies by @tin-berri in #38429
  • fix(google_genai): price streamed generateContent with the provider that served it by @devin-ai-integration[bot] in #36055
  • fix(logging): stop billing and logging response reads as LLM calls by @devin-ai-integration[bot] in #36890
  • fix(budget): serialize model_max_budget before the /budget/update write by @yuneng-berri in #38430
  • fix(ui): block the auto-router submit on a missing classifier model and an orphaned keyword rule by @tin-berri in #38427
  • feat(complexity_router): heuristic-first classifier chaining by @tin-berri in #38428
  • test(e2e): un-skip the per-model budget update case by @yuneng-berri in #38437
  • fix(cost): stop double-billing cached tokens that overlap a modality by @Srivatsa03 in #37407
  • feat(ui): add Teams list CSV export with budgets, model grants, and rate limits by @devin-ai-integration[bot] in #38436
  • fix(mcp): accept raw x-litellm-api-key on streamable HTTP admission by @devin-ai-integration[bot] in #38364
  • fix: bound row count on GET /spend/logs to stop unbounded LiteLLM_SpendLogs scans by @devin-ai-integration[bot] in #38420
  • fix(scim): apply default_team_params (incl. models) to SCIM-created teams by @devin-ai-integration[bot] in #38433
  • fix(prompts): propagate prompt deletes to every worker and pod by @mateo-berri in #38434
  • fix(anthropic_adapter): carry web search cost into /v1/messages breakdown headers by @mateo-berri in #38439
  • fix(ui): show custom technical keywords on every router whose scorer runs by @tin-berri in #38451
  • fix(e2e): move the vertex realtime suite off the retired Live preview model by @yuneng-berri in #38454
  • feat(newrelic): per-team cost and usage metrics via team callbacks by @yucheng-berri in #37610
  • fix(ui): carry a preset's per-tier litellm_params through the prefill by @tin-berri in #38453
  • fix(e2e): size the mid-conversation-system cache prefix above the minimum deterministically by @yuneng-berri in #38468
  • fix(e2e): disable thinking on the gemini chat cost test instead of racing its budget by @yuneng-berri in #38469
  • feat(ui): put the auto-router savings hero on a spend rail and a four-tile row by @tin-berri in #38470
  • feat(ui): toggle internal health check visibility in request logs by @mateo-berri in #38391
  • fix(mcp): canonicalize bearer scheme on bridge egress by @daniel-meismer-zocdoc in #38398
  • refactor: clean up fresh tech debt from 2026-08-27 window by @devin-ai-integration[bot] in #38484
  • fix(exception_mapping_utils): map unmapped exceptions when model and provider are unset by @mateo-berri in #38496
  • fix(ui_sso): resolve highest privilege Entra app role, not first in claim by @imranismail in #36728
  • fix(proxy): regenerate lazy OpenAPI snapshot and guard it in CI by @mateo-berri in #38410
  • feat(ui): add cache hit/miss filter to Request Logs by @devin-ai-integration[bot] in #38432
  • fix(bedrock): sign rerank requests with the shared header-filtered SigV4 helper (internal copy of #36462) by @mateo-berri in #38093
  • fix(bedrock): sign rerank requests with the shared, header-filtered SigV4 helper by @noahnistler in #36462
  • fix(ui): order the auto-routers table newest first so a new router lands on page one by @tin-berri in #38545
  • feat(ui): run the Anthropic Family preset's reasoning tier on Opus 5 at high thinking by @tin-berri in #38490
  • build(ui): bump nginx to 1.31-alpine by @devin-ai-integration[bot] in #38541
  • feat(otel): support per-team/per-key service.name for OTel v2 destinations by @devin-ai-integration[bot] in #38532
  • test(e2e): de-flake the cost-header cache read and the router fallback control by @yuneng-berri in #38435
  • feat(gemini): day-0 support for gemini-3.5-transcribe and transcribe-live by @mateo-berri in #38540
  • feat(health): opt-in model-group allowlist for background health checks and health-check routing by @mateo-berri in #38539
  • fix(mcp): keep upstream OAuth Authorization when jwt signer hook injects one on tools/call by @devin-ai-integration[bot] in #38555
  • fix: suppress misleading register_model unresolved-cost warnings for entries without custom pricing by @devin-ai-integration[bot] in #38542
  • feat(proxy): opt-in budget rollover carrying overage into the next window by @devin-ai-integration[bot] in #38514
  • fix(auth): skip guaranteed-miss team lookup for the litellm-dashboard sentinel by @devin-ai-integration[bot] in #38471
  • fix(key_management): allow /key/update to keep or shrink MCP server grants the key already holds by @devin-ai-integration[bot] in #38463
  • fix: keep schema reconciliation from fighting a partitioned LiteLLM_SpendLogs by @devin-ai-integration[bot] in #38452
  • fix(ui): open select popups below the trigger instead of over it by @tin-berri in #38554
  • fix(realtime): bill trailing audio when a Gemini transcribe Live session closes by @mateo-berri in #38563
  • test(e2e): cover key generate and update on the Admin UI path by @yuneng-berri in #38448
  • chore: bump litellm-enterprise 0.1.60 -> 0.1.61, litellm-proxy-extras 0.4.89 -> 0.4.90 by @yuneng-berri in #38566
  • fix(ui): let the paginated search select keep what the user types by @yuneng-berri in #38475
  • fix(otel): anchor MCP tool-call spans to the gateway's own trace, link the client's context by @yucheng-berri in #38317
  • fix: roll up the open deflake fixes for the MCP logging queue, PTU rollup, license gate, and pricing test isolation by @devin-ai-integration[bot] in #37833
  • fix(model_prices): rolling registry audit - verified models and rates for Novita, DeepInfra, W&B, Bedrock Sol, Gemini, Fireworks, Azure gpt-5.6, Mistral, Together by @devin-ai-integration[bot] in #38207
  • test(together_ai): assert fail-open supported params for models missing from the registry by @mateo-berri in #38487
  • test(e2e): let the together tool tests accept parallel calls by @yuneng-berri in #38567
  • feat(mcp): let a resolved OAuth token target a custom upstream header by @tin-berri in #38456
  • feat(together_ai): map reasoning_effort per model class by @mateo-berri in #38263
  • feat(dashscope): support qwen-image-3.0 and qwen-image-3.0-pro image generation by @devin-ai-integration[bot] in #38449
  • fix(cost): apply Together AI cache read pricing and per-model registry rates by @mateo-berri in #38280
  • fix(guardrails): forward aws_external_id when the bedrock guardrail assumes a role by @devin-ai-integration[bot] in #38376
  • fix(transcription): synthesize srt/vtt output for adapters without native subtitle formats by @mateo-berri in #38561
  • fix(streaming): preserve provider service-tier metadata so Vertex flex streams bill at flex rates by @mateo-berri in #38458
  • fix(realtime): bill Gemini Live native-audio output tokens at the audio rate by @mateo-berri in #38457
  • fix(anthropic): carry tool_reference tool results through the guardrail translation round trip by @mateo-berri in #38465
  • fix(anthropic-adapter): pass provider-native and OpenAI-format tools through on /v1/messages by @mateo-berri in #38431
  • test(e2e): serve the vision image from our own fixture by @yuneng-berri in #38575
  • feat(together_ai): add zai-org/GLM-5.3-Flash to the model registry by @mateo-berri in #38486
  • fix(ui): stop server-searched comboboxes from clobbering picks and queries by @ryan-crabbe-berri in #38574
  • feat(model_prices): let a map entry declare its exact reasoning_effort levels by @tin-berri in #38481
  • fix(anthropic): carry the adaptive effort tier to every bridged Claude target by @tin-berri in #38533
  • feat(alerting): add native Microsoft Teams alerting destination by @devin-ai-integration[bot] in #38367
  • chore(proxy): resync the generated API artifacts with the current models by @tin-berri in #38587
  • fix(router): reject complexity-router settings written outside complexity_router_config by @tin-berri in #38570
  • feat(ui): session-level cache observability in request logs by @devin-ai-integration[bot] in #38442
  • fix(ui): link Virtual Keys hint through the migrated /ui route by @devin-ai-integration[bot] in #38596
  • fix(anthropic): carry the effort tier only where the target declares reasoning_effort by @tin-berri in #38592
  • fix(presidio): chunk oversized text before /analyze so large content blocks do not fail by @yucheng-berri in #38483
  • fix(logging): stop stream-based log collectors classifying INFO logs as errors by @yucheng-berri in #38476
  • feat(ui): dry-run an auto-router config against the backend before saving it by @tin-berri in #38595
  • fix(guardrails): add fail-open mode to CrowdStrike AIDR guardrail by @yucheng-berri in #38568
  • fix(router): copy instead of mutating caller metadata when scrubbing fallback stamp keys by @yucheng-berri in #38586
  • feat(proxy): opt-in enforce_fallback_model_access authorizes router fallbacks against the calling key by @ryan-crabbe-berri in #38572
  • fix(langfuse): warn and drop invalid LANGFUSE_TRACING_ENVIRONMENT instead of failing requests by @yucheng-berri in #38582
  • fix(tencent): route thinking through extra_body in chat completions by @FelipeRodriguesGare in #38100
  • test-check-commits by @nickhac in #36344
  • feat(proxy): dry-run a real request body on /auto_router/test_routing by @tin-berri in #38590
  • fix(shadow_eval): refuse a judge model that also serves one of the arms it grades by @tin-berri in #38589
  • fix(anthropic): resolve /v1/messages effort tiers through the capability owner by @tin-berri in #38492
  • fix(router): fall over on raised mid-stream errors in /v1/messages streams by @mateo-berri in #38606
  • feat(models): add daily Together AI model registry sync script and workflow by @mateo-berri in #38257
  • feat(ui): the model and wire layer for operator-defined auto-router tier sets by @tin-berri in #38602
  • fix(moonshot, together_ai): send the reasoning effort Kimi K3 accepts by @tin-berri in #38611
  • fix(ui): one-click theme toggle and matching Docs/Blog styling in the top bar by @ryan-crabbe-berri in #38601
  • feat(proxy): opt-in flags to require rpm/tpm on model and project create by @ansh-agrawal in #36514
  • fix(exceptions): keep a refused connection an APIConnectionError by @yuneng-berri in #38624
  • chore(ci): promote internal staging to main by @yuneng-berri in #38616

New Contributors

Full Changelog: v1.100.0-dev.1...v1.100.0-dev.2