github BerriAI/litellm v1.107.0-dev.3

pre-release6 hours ago

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.3

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

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

  • fix: index streamed thinking_blocks so the OpenAI SDK .stream() accumulator accepts them by @kerry-berri in #46611
  • feat(xai): bill grok voice realtime sessions by @kerry-berri in #46600
  • feat(typesafe): support Jev 1.14 images, box questions, and long-context headers by @mateo-berri in #46596
  • fix(proxy): gzip responses over 16 KiB off the event loop by @mihidumh in #46362
  • fix(proxy): keep JSON nulls as null in audit log values by @yuneng-berri in #46577
  • test: expect the list-position index on streamed thinking blocks in the integration suite by @kerry-berri in #46618
  • test: compare coding-agent response contracts across model tiers by @kerry-berri in #46597
  • feat(ui): filter active and paused model deployments by @thementalcoding in #43710
  • fix(anthropic): keep signed empty thinking blocks on /v1/messages requests by @clonylu in #41362
  • test(cost): add tier 1 gpt cache_read cases and recapture input_text usage shapes by @devin-ai-integration[bot] in #46623
  • test(integration): cache the two-turn tool_search guardrail replays by @mateo-berri in #46614
  • test: cover response contracts across translation endpoints by @kerry-berri in #46632
  • perf(proxy): cache the public provider and agent field endpoints by @mateo-berri in #46617
  • fix(proxy): resolve model aliases to their target deployment for listing metadata by @haydster7 in #41041
  • fix: cap cold MCP schema workers at usable CPUs and deflake wall-clock unit tests by @devin-ai-integration[bot] in #45791
  • fix(auth): return a generic 401 for an unknown key by @koladefaj in #39787
  • fix(proxy): scope /spend/tags aggregates to the caller's own and permitted-team logs by @ojensen-berri in #46194
  • fix(anthropic/adapter): stop translate_anthropic_tools_to_openai mutating the caller's input_schema by @ErenAta16 in #34653
  • fix(vertex): report an unreadable credentials file as a read failure by @koladefaj in #40173
  • fix(llms): sanitize trailing slashes in provider get_complete_url by @Raushankumar0720 in #42887
  • fix(vertex_ai): return 400 with file line number for malformed batch JSONL row by @devin-ai-integration[bot] in #40097
  • test(ci): pin the xai reported-cost split and the coordinator-held Prisma lock wait by @mateo-berri in #46645
  • fix: preserve explicit provider for async image, audio, and realtime routes by @WongAnneLister in #36346
  • feat(minimax): add MiniMax-H3 and H3-Max video generation via /v1/videos by @Bytechoreographer in #43705
  • test(caching): baseline breaker metrics from live state after gc by @devin-ai-integration[bot] in #46652
  • refactor(types): replace Any with proven types in 24 files by @mateo-berri in #46663
  • fix(vertex_ai): prevent Gemini from misinterpreting $ref in tool results by @Sushit-prog in #38284
  • fix(decisions): keep box answers from OpenAI-format providers instead of turning them into refusals by @mateo-berri in #46633
  • fix(decisions): answer 400 on a malformed provider_specific_header instead of dropping it by @mateo-berri in #46619
  • fix: keep model capability flags out of provider requests by @mateo-berri in #46647
  • fix(count_tokens): count system and tools on Vertex Gemini, fall back to Mantle on Bedrock 404 by @mrinal-berri in #46430
  • fix(vertex_ai): route Model Garden models through the generateContent adapter by @devin-ai-integration[bot] in #41836
  • fix(streaming): keep provider response headers on SDK streaming errors by @Acacian in #41528
  • feat(providers): add Inference APIs as OpenAI-compatible provider by @TaylorHawkes in #41669
  • fix(model_prices): registry audit 2026-10-15, OpenAI GPT-4 shutdown dates, Azure gpt-chat-latest, xAI voice text input, Sail prices by @devin-ai-integration[bot] in #46675
  • test(translation): add claude-sonnet-5-5 anthropic messages service_tier case by @devin-ai-integration[bot] in #46678
  • test(cost): add best-guess tier 1 cases for vertex_ai and azure_ai claude and gpt-6 cache_write_5m by @devin-ai-integration[bot] in #46687
  • test(integration): expect signed empty thinking blocks to survive /v1/messages replay after #41362 by @mateo-berri in #46686
  • test(rust-bridge): select native routes per test without LITELLM_RUST by @yujonglee-berri in #46620
  • test(translation): recapture azure gpt-6-astra content_filters by @kerry-berri in #46691
  • test(cost): let CostMapEntry hold flex, priority and ultrafast cache and tier prices by @kerry-berri in #46629
  • feat(cost-map): add together_ai NVIDIA-Nemotron-3.5-Super-VL by @berriai-litellm-provider-info-sync[bot] in #46693
  • fix(responses): open faked stream items empty so tool arguments and text arrive once by @mateo-berri in #46533
  • test(cost): add azure_ai claude-haiku-5-5 cases and gpt-6 service tier cache prices by @devin-ai-integration[bot] in #46694
  • fix(bedrock): type performanceConfig latency as standard or optimized by @kerry-berri in #46698
  • fix(jwt): honor end_user_id_jwt_field on the JWT-to-virtual-key mapped path by @yuneng-berri in #46637
  • feat(docker): stop, start, and uninstall a quickstart install with litellm-gateway by @misbahsy in #46486
  • test(cost): add tier 1 claude messages stream twins and recapture drifted usage shapes by @devin-ai-integration[bot] in #46690
  • fix(proxy): list team access group models in /v1/model/info and keep key model lists narrow by @le-shi in #32599
  • test(cost): cover turn-2 usage shapes across bridged previous_response_id, cached streams and passthrough cache writes by @kerry-berri in #46703
  • test(cost): cover custom deployment aliases, off-peak pricing, bridge usage shapes and duplicate spend rows by @kerry-berri in #46708
  • test(cost): pin litellm's own prompt count over a tool-call history when the stream carries no usage by @kerry-berri in #46710
  • refactor(rust-bridge): remove the LoggerRule concept from the catalog by @yujonglee-berri in #46711
  • test: extend runtime regression contracts for Messages and SDK by @kerry-berri in #46641
  • feat(proxy): report when each per-model budget window resets by @Thijmen in #45797
  • fix(scim): write a group's roster in one locked transaction instead of one member at a time by @mateo-berri in #45197
  • fix(proxy): allow model instances in LiteLLM_EndUserTable validation by @yuefdev in #41677
  • fix(responses): bill a background response once, on the first read or poll that sees it finished by @devin-ai-integration[bot] in #45703
  • feat(rust): add native OpenRouter Responses by @yujonglee-berri in #46000
  • fix(openai): strip prompt_cache_breakpoint under drop_params for OpenAI models that cannot read it by @ryan-crabbe-berri in #46453
  • feat(batches): store each batch line's request and response in S3 and GCS by @devin-ai-integration[bot] in #41691
  • feat(bedrock): add the jp.amazon.nova-2-lite-v1:0 geo inference profile by @berriai-litellm-provider-info-sync[bot] in #46721
  • fix(guardrails): resolve decision models in caller team scope by @moyai-devin-berriai[bot] in #46085
  • feat(proxy): split Azure PTU deployments across teams with per-team PTU ceilings and PTU-hour reporting by @devin-ai-integration[bot] in #43043
  • fix(anthropic): keep signed empty thinking blocks and honor thinking.block_binding by @ryan-crabbe-berri in #46342
  • test(integration): remove BUG skips for 3 tests that pass on main by @devin-ai-integration[bot] in #46725
  • fix(mcp): preserve progress and cancel upstream work promptly by @joshua-berri in #46134
  • fix(test): wait for the wedged Redis to be reached instead of a fixed 0.1s sleep in team roster sync tests by @mateo-berri in #46727
  • fix(bedrock): add Priority and Flex prices to the gpt-oss-120b and gpt-oss-20b rows by @berriai-litellm-provider-info-sync[bot] in #46728
  • feat(vertex-ai): add deepseek-v4.1-flash-maas by @berriai-litellm-provider-info-sync[bot] in #46729
  • fix(cost): price bridged /v1/messages reasoning tokens from the chat completion, not the served Anthropic body by @kerry-berri in #46726
  • test(integration): drop inherited provider API keys from the integration runner env by @devin-ai-integration[bot] in #46733
  • fix(search): bill an unpriced fallback search tool at its own price, not the failed primary's by @kerry-berri in #46734
  • fix(decisions): read a deployment's own supports_box_questions flag before the cost map by @mateo-berri in #46696
  • Revert "feat(proxy): add LITELLM_FIPS_MODE startup gate with provider assertion and loud password migration failure" (#42700) by @yucheng-berri in #46740
  • ci(unit): run the two slowest shards on 4 workers by @kerry-berri in #46743
  • feat(agents): support Databricks Agent Platform agents in the agent gateway by @devin-ai-integration[bot] in #45681
  • feat(model_prices): add missing OpenAI, Together, Fireworks and Bedrock registry entries by @devin-ai-integration[bot] in #46742
  • fix(s3): bound object key filenames by @link89 in #40825
  • test(e2e): perf rig (out-of-process mocks, PerformanceTestCase runner, per-request limits) and the small_bodies_5rps case by @kerry-berri in #46713
  • feat(mcp): relay authorized modern upstream subscriptions by @joshua-berri in #46153
  • fix(vertex-ai): price deepseek-v4.1-flash-maas at zero during free period by @berriai-litellm-provider-info-sync[bot] in #46753
  • fix(vector_stores): stop sharing one list across default-constructed registries by @msdianprince-7 in #38879
  • test(integration): wait on the right signal in five flaky integration contracts by @yuneng-berri in #46737
  • refactor(typing): clear 1143 basedpyright Any errors across 273 files by @mateo-berri in #46574
  • fix(websearch_interception): intercept the bare web_search tool type on chat completions by @mateo-berri in #46736
  • fix(prompt_templates): do not mutate messages in-place in function_call_prompt by @mgeorgaklis in #41676
  • fix(anthropic): count a replayed server tool call's cache mark the way modify_params sends it by @mateo-berri in #46591
  • fix(proxy-extras): accept unencoded DB passwords in the v2 migration lock and redact its errors by @yassin-berriai in #46592
  • fix(proxy-extras): hold only Prisma's lock key during migrate deploy so it never waits on the request log index build by @yassin-berriai in #46660
  • fix(proxy): honor disable_end_user_cost_tracking in spend logs and end-user tables by @Dotify71 in #40945
  • feat(proxy): name the successor model for deprecating deployments by @rameswaran-mohan in #41670
  • fix(azure): set azure_ai/claude-opus-5-5-fast deprecation_date from list API by @berriai-litellm-provider-info-sync[bot] in #46760
  • feat(ui): set a search tool's cost per query from the Admin UI by @yassin-berriai in #46723
  • fix(proxy): chain RDS IAM DB auth through the IRSA role when the DB role trusts only the pod role by @yassin-berriai in #46540
  • feat(helm): expose Redis TLS settings in the litellm chart redis values by @yassin-berriai in #46536
  • fix(proxy): route SSO token exchange and userinfo calls through litellm's httpx client by @yassin-berriai in #46547
  • fix(mcp): persist the first DCR client for config-declared servers regardless of who registers by @yassin-berriai in #46544
  • fix(mcp): accept validated JWT subjects after virtual-key mapping by @yassin-berriai in #46549
  • feat(mcp): add mcp_disabled_capabilities to stop advertising prompts and resources by @yassin-berriai in #46563
  • feat(ui): scope the MCP server selector to the team, user and access groups it edits by @yassin-berriai in #46565
  • fix(oci): drop non-function tools under drop_params and gate reasoning_effort on declared levels by @fede-kamel in #40732
  • fix(anthropic): send detail on input_image parts bridged from /v1/messages to Responses by @mateo-berri in #46720
  • feat(helm): add db.useIAMAuth and db.useAzureEntraAuth token auth to litellm-helm by @yassin-berriai in #46534
  • test(integration): assert the streamed usage.cost matches the spend row on every cost case by @kerry-berri in #46762
  • ci(unit): mcp-elicitation shard runs dist load so test_interactions.py's 74 params spread over its 4 workers by @kerry-berri in #46770
  • feat(terraform): write-only secret attributes to keep secrets out of state by @yassin-berriai in #46538
  • fix(ci): run the MCP interactions integration contract in its own unit shard by @mateo-berri in #46773
  • fix(mcp): resolve /mcp/proxy tool_id from the owning server instead of relisting every server by @yassin-berriai in #46545
  • fix(proxy): preserve AWS session tokens for RDS IAM auth by @yassin-berriai in #46559
  • feat(gemini)!: auto-continue gemini-4-argon long decodes with continuationToken by @mateo-berri in #46240

New Contributors

Full Changelog: v1.107.0-dev.2...v1.107.0-dev.3

Don't miss a new litellm release

NewReleases is sending notifications on new releases.