github BerriAI/litellm v1.109.0-dev.2

pre-release2 hours ago

Verify Docker Image Signature

All LiteLLM Docker images are signed with cosign. This release is signed with the key introduced in commit e82a3c6.

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 published signing key:

cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/e82a3c646908ba0a6ee0beddc4310d7a6cac4065/cosign.pub \
  ghcr.io/berriai/litellm:v1.109.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.109.0-dev.2/cosign.pub \
  ghcr.io/berriai/litellm:v1.109.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

  • fix(databricks): price the openjev decision model at its published 0.6 DBU per 1M input tokens by @kerry-berri in #48694
  • fix(tavily): return raw_content, score, favicon and the response envelope from Tavily search by @mrinal-berri in #48684
  • fix(ui): keep guardrail wizard navigation within the dialog by @tin-berri in #48688
  • fix(langfuse otel): emit request metadata under langfuse.observation.metadata and langfuse.trace.metadata on the OTEL v2 Langfuse mapper by @devin-ai-integration[bot] in #42697
  • fix(cohere): map string stop parameter to list of strings for stop_sequences by @Pyhroff in #47091
  • fix(anthropic): count search results and reject unsupported token-count blocks by @kerry-berri in #48699
  • fix(proxy)!: paginate customer lists and usage filters by @tin-berri in #48700
  • fix(responses): skip failed spend-log turns when rebuilding a session from previous_response_id by @ryan-crabbe-berri in #48647
  • fix(responses): reject or drop Responses params the chat completions bridge cannot translate by @ryan-crabbe-berri in #48655
  • fix(ui): prefill the key edit Organization picker from org_id by @mateo-berri in #39535
  • fix(responses): keep every MCP tool round in streaming follow-up input by @shivamrawat1 in #47698
  • docs(readme): link the LiteLLM OSS Champions program from Contributing by @zoveki in #48734
  • test(harness): audit #47530 by @norkelbyte in #48751
  • test(sagemaker): audit #47495 by @rj-cairn in #48767
  • test(gemini): audit #47542 by @zoveki in #48758
  • test(proxy): pin the max_parallel_requests slot release when a streamed /v1/messages MCP auto-execute ends by @mateo-berri in #47788
  • fix(cost-map): drop the gpt-5-nano priority input price OpenAI does not sell by @tessellark in #48763
  • test(spend): audit #47815 by @norkelbyte in #48774
  • feat: add ai& (aiand) provider by @islomjon-aiand in #38958
  • fix(router)!: count an explicit allowed_fails of 3 and keep fallback deployments out of cooldown by @HardMax71 in #46183
  • test(proxy): audit #47418 by @tavren27 in #48766
  • fix(router): let affinity pins yield to deployments that already failed this request by @aidanasingh in #32309
  • test(llms): audit #47535 by @tessellark in #48786
  • test(responses): audit #47504 by @norkelbyte in #48787
  • test(spend): audit #47353 by @rj-cairn in #48785
  • test(proxy): audit #46815 by @m6atlas in #48768
  • fix(bedrock): retry without strict when Bedrock rejects strict tool schemas under drop_params by @m6atlas in #48733
  • test(files): audit #40621 by @zoveki in #48788
  • test(anthropic, bedrock): audit #47489 by @zoveki in #48782
  • fix(anthropic): let drop_params drop speed on claude-opus-4-7 after Anthropic removed its fast mode by @norkelbyte in #48764
  • test(token_counter): audit #47586 by @simonp9 in #48800
  • test(anthropic): audit #47478 by @paveln83 in #48803
  • fix(router): continue Responses mid-stream fallbacks on models without assistant prefill by @tin-berri in #47672
  • test(router): audit #47498 by @mika-lt in #48799
  • test(decisions): audit #47508 by @tavren27 in #48777
  • test(router): audit #47376 by @norkelbyte in #48792
  • test(proxy): audit #47358 by @norkelbyte in #48784
  • test(router): audit #41368 by @tavren27 in #48794
  • refactor(fallback-generalizations)!: remove the legacy extends and mixed-rule shim by @norkelbyte in #48737
  • fix(streaming): exact-match the SSE [DONE] marker in BaseModelResponseIterator by @michelligabriele in #47832
  • test(nvidia_riva): audit #41021 by @quietjules in #48801
  • feat(proxy): per-provider and per-model rpm/tpm requirements for enforce_project_model_quota by @mateo-berri in #47693
  • feat(cli): keep the ChatGPT login with lite codex --subscription by @rj-cairn in #48741
  • test(proxy): audit #47352 by @norkelbyte in #48804
  • test(mcp): audit #47422 by @tavren27 in #48821
  • test(scim): audit #47544 by @zoveki in #48791
  • build(rust): upgrade reqwest to 0.13 and move MCP out of litellm-http by @yujonglee-berri in #48039
  • fix(http): honor transport settings for Rust WebSockets by @yujonglee-berri in #47968
  • fix(vertex_ai): send Vertex Claude labels as X-Vertex-AI-Labels header instead of the request body by @ryan-crabbe-berri in #48753
  • fix(cost-map): rolling provider pricing, capability and retirement audit by @devin-ai-integration[bot] in #48188
  • fix(proxy/auth): apply max_end_user_budget_id to end users without a row on cached keys by @moe-berri in #48704
  • refactor(http): build outbound requests as reqwest::Request by @yujonglee-berri in #48041
  • refactor(rust): adopt one error discipline across litellm-rust with source chains and Report by @yujonglee-berri in #48042
  • feat(rust): one typed decline from core up to each host by @yujonglee-berri in #47772
  • fix(huggingface): stop forcing truncate=false on TEI rerank and pass truncate params through by @moe-berri in #48706
  • fix(ollama): forward embedding credentials, headers and timeout by @moe-berri in #48707
  • fix(router)!: isolate child tier pins in user turn mode by @tin-berri in #48701
  • fix(refuseless): update GLM 5.3 and DeepSeek V4.1 Flash prices by @moe-berri in #48844
  • fix(ui): match simple auto router models to advanced setup by @moe-berri in #48851
  • fix(ui): show reasoning in the Playground for /v1/responses by @moe-berri in #48850
  • fix(responses): forward top-level moderation param to OpenAI by @moe-berri in #48708
  • fix(proxy): store boolean settings as JSON booleans on /config/field/update by @shrey-berri in #48595
  • fix(azure): map context_length_exceeded error code to ContextWindowExceededError by @shrey-berri in #48616
  • fix(images): honor max_retries and prevent Router retry amplification by @moe-berri in #48705
  • fix(vertex-ai): preserve image size aspect ratios by @shrey-berri in #48463
  • fix(otel)!: label configured pass-through routes litellm.passthrough instead of chat by @yucheng-berri in #48675
  • fix(chatgpt): derive the upstream session id from prompt_cache_key by @occ in #42014
  • fix(cost-map)!: price Mistral Large 4 at its list price now that the launch sale ended by @zoveki in #48825
  • fix(anthropic-messages): merge deployment and client anthropic-beta instead of overwriting by @shrey-berri in #48594
  • feat(proxy): log one line per token count call by @mateo-berri in #47657
  • fix(otel): suppress spans for excluded proxy requests by @tin-berri in #48720
  • fix(baseten): price the two decision models at their published input rates by @devin-ai-integration[bot] in #48849
  • fix(router)!: resolve trusted JEV connection environment references by @tin-berri in #48717
  • chore(cost-map): fill fireworks spot router capability fields from base models by @kerry-berri in #48858
  • fix(mistral): replay assistant reasoning as a Mistral thinking chunk by @rj-cairn in #48778
  • fix(images): normalize absent images in async edits by @tin-berri in #48872
  • fix(count_tokens)!: audit #47441 and keep the framed estimate for Bedrock count models from the cost map by @rj-cairn in #48805
  • fix(responses)!: answer 400 before counting a lone Responses built-in tool on Claude by @tessellark in #48798
  • fix(router): drop the deployment rpm filter from enable_pre_call_checks by @kerry-berri in #48873
  • fix(router): pass lifecycle events through on background OpenAI responses streams that cannot fall back by @simonp9 in #48817
  • fix(batches): stop unbillable batches from blocking file deletes and new-batch polling by @tessellark in #48752
  • fix(audio): reject unsupported transcription providers with 400 by @shrey-berri in #47971
  • fix(azure): share one Entra token request per worker and audit #47348 by @tessellark in #48769
  • fix(cost-map): add mistral/deepseek-v4-1-flash-1017 by @devin-ai-integration[bot] in #48879
  • feat(decisions): support Ollama decision models by @moe-berri in #48871
  • fix(gemini)!: accept Google's current Managed Agents fields on create and interactions by @zoveki in #48750
  • fix(openai)!: send the whole reasoning_effort dict when chat is bridged to Responses by @m6atlas in #48807
  • fix(proxy): account for media in combined TPM reservations by @tin-berri in #48865
  • feat(providers): add ZeroGPU as an OpenAI-compatible provider by @amaan-ai20 in #43874
  • refactor(ui): use the shadcn Kbd primitive for keyboard hints by @yuneng-berri in #48885
  • fix(pricing): sync databricks model prices by @devin-ai-integration[bot] in #48884
  • fix(cli): let the proxy decide when a classic lite login token has expired by @mateo-berri in #47712
  • fix(aiohttp_openai): forward service_tier in transform_response by @TemoSulava in #47263
  • refactor(rust-bridge): require the native extension by @yujonglee-berri in #48852
  • fix(streaming): surface upstream abort as server errors (LIT-10159) by @sorgfresser in #48328
  • fix(ui): bundle the Aria avatar so it loads in every deployment by @yuneng-berri in #48890
  • fix(responses)!: bill partial usage on mid-stream failures and report bridged /v1/messages failures to the proxy by @mateo-berri in #47537
  • fix(files)!: scope provider and model file lists to the caller's managed files under require_managed_files by @mateo-berri in #47682
  • fix(anthropic): map model_context_window_exceeded stop reason to length by @moe-berri in #48874
  • feat(accounting): add accounting contracts, PricingSnapshot and ledger schema (LIT-10193) by @devin-ai-integration[bot] in #48862
  • fix(ci): spend logs guard requires the approval to cover the head's spend-log lines by @kerry-berri in #48904
  • fix(guardrails)!: make hide-secrets honor skip_tool_message_in_guardrail by @yucheng-berri in #48689
  • fix(pricing): add databricks priority pay per token prices by @kerry-berri in #48891
  • fix(ci): keep the spend logs guard approval through a later COMMENTED review (LIT-10242) by @kerry-berri in #48901
  • fix(logging): bill each SDK call its own native Bedrock guardrail trace when calls share one metadata dict by @kerry-berri in #48923
  • fix(aiohttp_transport): keep the owned session open while a response stream is still being read (LIT-10237) by @kerry-berri in #48920
  • ci(spend-logs-guard): run only on pull_request_target, re-run by hand after approving by @kerry-berri in #48941
  • fix(router): cool down failing deployments when fallbacks use string targets (LIT-10238) by @kerry-berri in #48913
  • fix(migration_data_checks): size btree entries by the bytes Postgres stores (LIT-10244) by @kerry-berri in #48911
  • feat(daily-activity): per-guardrail spend breakdown in user, team and organization daily activity by @mrinal-berri in #48702
  • feat(ui): search and multi-select tools in the MCP toolset editor by @mrinal-berri in #48601
  • fix(gemini): preserve every grounding web source by @SilverMarcs in #48745
  • feat(proxy)!: model family and access group entries in model_max_budget by @mateo-berri in #47722
  • test(routing): audit #46601 by @tessellark in #48910
  • feat(skills): add a litellm-setup agent skill by @mateo-berri in #47731
  • fix(ci): flag any schema.prisma change inside model LiteLLM_SpendLogs in the spend logs guard by @kerry-berri in #48905
  • feat(router): add deployment rpd and tpd daily limits to enforce_model_rate_limits by @kerry-berri in #48875
  • feat(tencent): add Seedream image generation and editing through TokenHub by @tessellark in #48735
  • test(spend): audit #47506 by @quietjules in #48919
  • feat(proxy): accept request priority from the x-litellm-priority header by @mubashir1osmani in #47618
  • fix(websearch): strip Claude Code instructional prefix in short-circuit search by @agustin18 in #43458
  • feat(accounting): add durable event ledger writer by @joshua-berri in #48883
  • refactor(types): replace Any with proven types in 28 files by @rj-cairn in #48903
  • test(gemini): cover every web source for a grounded passage by @moe-berri in #48861
  • fix(router): reject string fallback targets at Router init (LIT-10238) by @kerry-berri in #48943
  • fix(vertex-ai): add batch above 200k and image output batch prices for gemini models by @devin-ai-integration[bot] in #48945
  • fix(streaming): keep merged think tags balanced and split SSE lines only on CR/LF by @rj-cairn in #48755
  • refactor(router): fence the router surface and document the router-core boundary by @narmstrong-berri in #48839
  • test(extraction): audit #47473 by @paveln83 in #48898
  • ci: run zizmor with --no-ignores and move the spend logs and cost map guards to pull_request by @yuneng-berri in #48947
  • refactor(images): remove dall-e-2 and dall-e-3 code paths by @kerry-berri in #48703
  • test(proxy): audit #46997 by @zoveki in #48918
  • test(responses): audit #47445 by @tavren27 in #48902
  • fix(vertex_ai)!: send the caller's anthropic-version in the Vertex Claude /v1/messages body, not the header by @zoveki in #48814
  • refactor(model-catalog): parse, lower and validate the catalog into typed prices by @yujonglee-berri in #48853
  • test(router): set string fallback targets after Router init in the sdk cooldown cases (LIT-10238) by @kerry-berri in #48954
  • fix(health): ask OpenAI and Azure audio chat models for audio output in the health check probe by @mateo-berri in #47730
  • fix(proxy): stop log lines from leaving terminal colors on by @ryan-crabbe-berri in #48966
  • fix(bedrock): omit system prompt from audio transcription and report its token usage by @david-koh in #41565
  • fix(logging): stop dumping the request body at every layer under --detailed_debug by @ryan-crabbe-berri in #48973
  • fix(stream): the last usage frame carries litellm's bill in usage.cost by @kerry-berri in #48955
  • fix(responses): drop params compact rejects and send Azure compaction to the v1 route by @simonp9 in #48876
  • fix(guardrails): scan Responses tool results in texts-mode guardrails by @mika-lt in #48827
  • fix(guardrails): skip embeddings input in google_text_moderation by @simonp9 in #48934
  • feat!: add StreamLake provider metadata by @ZHOUKAILIAN in #41006
  • fix(proxy): let typesafe/* allowlists cover /typesafe Jev calls and list Jev in the model picker by @mateo-berri in #47697
  • feat(router): daily_reset_time picks when deployment rpd and tpd daily limits start over by @kerry-berri in #48957
  • test(unit): keep unix socket paths in unit tests under the macOS AF_UNIX limit by @devin-ai-integration[bot] in #45040
  • feat(ocr)!: support outputContentFormat=markdown for Azure Document Intelligence by @zoveki in #48926
  • feat(azure_ai): reach Foundry agents through the project Responses API by @mateo-berri in #47717
  • docs(adrs): add ADRs for the Python SDK and proxy, starting with provider usage extras by @devin-ai-integration[bot] in #36668
  • fix(responses): drop the null created_by OpenAI rejects when output items are replayed by @tessellark in #48783
  • fix(cli): give lite codex aliases of a Codex-known model that model's catalog entry by @tessellark in #48894
  • fix(proxy)!: enforce an end user's per-model budget from their linked budget by @mika-lt in #48815
  • fix(context_management)!: count the system prompt toward the clear_tool_uses input_tokens trigger by @AlonSoko in #47857
  • fix(google_genai): read one-object and null spellings of repeated fields in countTokens and generateContent by @zoveki in #48771
  • fix(proxy)!: stop labelling management and health rejections as auth failures by @tavren27 in #48739
  • test(json_fragment_accumulator): assert peak allocation instead of a drain timing ratio by @devin-ai-integration[bot] in #43370
  • fix(credentials): keep the stored secret when PATCH echoes its masked read-back by @tessellark in #48950
  • fix(responses): call the renamed drops_params helper on the compact path by @ryan-crabbe-berri in #49030
  • docs(qa): allow focused proof for mechanical PRs by @mateo-berri in #49031
  • fix(proxy): enforce team and key Allowed Vector Stores when no vector store registry is loaded by @paveln83 in #48915
  • build(deps): bump langgraph and tornado and add dated scan ignores to clear osv-scan and image-scan by @devin-ai-integration[bot] in #48302
  • fix(responses): stream every citation batch before completion by @SilverMarcs in #48747
  • fix(token_counter): count OpenAI models newer than tiktoken's table with o200k_base by @rj-cairn in #48728
  • fix(cost_map): mark fireworks_ai/minimax-m3 as vision and pin capabilities verified against live calls by @devin-ai-integration[bot] in #43390
  • feat(responses): support Codex client tool_search on Anthropic and other bridged providers by @mateo-berri in #48972
  • fix(proxy)!: list every priced Vertex family under a vertex_ai/* grant by @devin-ai-integration[bot] in #41959
  • fix(responses): keep each Codex tool once when its tool list repeats across turns by @ryan-crabbe-berri in #49006
  • feat(providers): add BigModel support and model pricing by @AaronHowell in #48563
  • fix(health)!: openai realtime health check reports healthy with a missing or invalid api key by @devin-ai-integration[bot] in #41233
  • fix(responses): replay the original Responses item order, phase, and boundaries on the next chat turn by @simonp9 in #48912
  • fix(responses): resume background response streams with stream and starting_after by @paveln83 in #48819
  • test(integration): scope the signoz, otel conversation id, and series cap proxy fixtures to their module by @rj-cairn in #48965
  • fix(anthropic): drop the non-spec custom object from /v1/messages tool definitions by @zoveki in #48893
  • fix(responses): drop a malformed prompt_cache_breakpoint under drop_params on the direct /v1/responses path by @devin-ai-integration[bot] in #45330
  • test: fix flaky spend-log cleanup budget, login lockout, and wedged Redis tests by @devin-ai-integration[bot] in #47108
  • fix(vertex_ai): build the cachedContents collection URL under a custom api_base by @devin-ai-integration[bot] in #44783
  • fix(github_copilot): treat a malformed api-key.json like a missing one by @devin-ai-integration[bot] in #44723
  • feat(proxy)!: add suppress_startup_output to turn off startup prints by @mateo-berri in #47708
  • feat(proxy): let a Claude Code gateway user choose the session team by @simonp9 in #49001
  • feat(proxy)!: general_settings.claude_code_marketplace_auth_required puts the Claude Code marketplace behind a LiteLLM key by @zoveki in #48980
  • fix(token_counter)!: keep a loaded Hugging Face tokenizer when a slower download fails by @quietjules in #48916
  • fix(llms): move later developer messages for models declared system-first by @mika-lt in #48897
  • fix(openai): warn when the GPT-5 reasoning effort gate drops a level under drop_params by @mateo-berri in #47761
  • fix(websearch)!: keep the provider prefix on the agentic follow-up model by @msdianprince-7 in #38885
  • fix(logging): mark mirrored silent_model calls with is_silent_experiment in spend logs by @tavren27 in #48888
  • fix(cohere): price native Cohere embed calls on Foundry relays and the Cohere passthrough by @tavren27 in #48978
  • feat(providers): add Kyma API as an OpenAI-compatible provider by @m6atlas in #48756
  • fix(cost): bill a deployment's per-second rates on native Anthropic /v1/messages by @devin-ai-integration[bot] in #42417
  • fix(proxy): stream a guardrail block on /v1/messages as Anthropic events by @tessellark in #49010
  • fix(caching): read the cache key's model group from the router's metadata for the call by @mika-lt in #48917
  • fix(passthrough): forward OpenAI-Beta and default agents=v1 on the OpenAI passthrough by @mika-lt in #49009
  • test(router_strategy): keep foreign asyncio task noise out of the budget limiter caplog asserts by @devin-ai-integration[bot] in #43375
  • fix(bedrock)!: route region-prefixed embedding models to that region and bill its price by @tessellark in #49072
  • fix(anthropic)!: drop beta-gated body fields under drop_params by @tavren27 in #48793
  • ci: run the dashboard API types and Terraform endpoint checks on every change that can alter the spec by @tavren27 in #49022
  • refactor(types): replace Any with proven types in 14 files by @mika-lt in #48928
  • fix(fallback): read stored router_settings from the database on fallback writes by @mika-lt in #48999
  • build(model-catalog): ship the cost map inside the native extension by @yujonglee-berri in #48907
  • ci(model-catalog): check the cost map by loading it through model-catalog by @yujonglee-berri in #48908
  • feat(soniox): add realtime speech-to-text on /v1/realtime by @dan2k3k4 in #44822
  • fix(exceptions)!: honor status code when mapping OpenAI invalid_request_error exceptions by @otiscuilei in #32537
  • fix(anthropic)!: send /v1/messages PDF documents to OpenAI-shaped providers as file parts by @mateo-berri in #47166
  • feat(vector_stores): add OpenSearch k-NN search as a vector store provider by @mateo-berri in #47759
  • feat(router): opt in to non-chat deployment filtering by @mateo-berri in #46257
  • feat(secret_managers): resolve oidc/google api_key references per request by @mateo-berri in #47703
  • fix(guardrails): scan and rewrite streamed /v1/completions under post_call guardrails by @paveln83 in #49035
  • feat(dashscope)!: derive protocol bases from one domain by @Bytechoreographer in #47812
  • fix(proxy): persist tag spend and drain success callbacks within the shutdown budget by @devin-ai-integration[bot] in #48988
  • feat(proxy): replace the pre-migration row check with a rolled-back dry run of the pending migrations by @kerry-berri in #48961
  • fix!: retain unattributed daily activity across reports and exports by @mrinal-berri in #48925
  • refactor(router): add router entry points and keep the old members as a deprecated mixin by @narmstrong-berri in #48840
  • fix(caching): keep reasoning, citations, and audio on streamed cache hits by @jesco-absolut in #32096
  • fix(proxy): keep the litellm command light so spawned workers answer uvicorn's first health ping by @devin-ai-integration[bot] in #45039
  • refactor(router): move router callers onto the entry points and invert the proxy imports by @narmstrong-berri in #48847
  • feat(vertex_ai)!: use HTTP/2 httpx client for search_api vector store by @devin-ai-integration[bot] in #40631
  • fix(anthropic): keep Mistral thinking text on streaming /v1/messages by @zoveki in #49059
  • feat(guardrails): opt-in response_masked_data on PANW Prisma AIRS block by @mrinal-berri in #46219
  • fix(proxy)!: honor litellm_settings.drop_params for Claude Code and Codex requests by @simonp9 in #49058
  • docs: link README to Python SDK and autorouter guides by @moe-berri in #48986
  • feat(router): infer custom classifier tiers from model mappings by @moe-berri in #48987
  • fix(cost): finalize synchronous response cost once for header, spend log and rollups by @devin-ai-integration[bot] in #48993
  • fix(guardrails)!: make lakera_v2 on_flagged block reject PII-only detections, add mask by @yucheng-berri in #48944
  • fix(otel)!: give key/team Langfuse destinations user, tags and session on OTel v2 without global Langfuse keys by @yucheng-berri in #48718
  • feat(guardrails): scan sampled stream windows in the background by @yucheng-berri in #48952
  • fix(otel)!: print OTel v2 spans to stdout only when the operator asks by @yucheng-berri in #48723
  • ci: run the integration groups on GitHub Actions by @yuneng-berri in #48985
  • fix(responses): only merge repeated Codex tools when drop_params is on by @ryan-crabbe-berri in #49112
  • fix(caching): key cached async clients by a per-loop token instead of id(loop) by @paveln83 in #48877
  • test(otel): fix main's Langfuse destination tests after the stdout opt-in change by @yucheng-berri in #49129
  • ci: run the extensions integration group with 48 workers by @yuneng-berri in #49134
  • fix(guardrails): allow MCP call modes on the generic guardrail API by @jhoblitt in #48060
  • fix(mcp)!: restore upstream-token admission for legacy delegate servers by @shrey-berri in #48939
  • fix(ci): build base native extension for OpenAPI lint by @yujonglee-berri in #49136
  • fix(proxy)!: bill streamed /v1/completions without stream_options like chat by @devin-ai-integration[bot] in #45366
  • fix(anthropic): retry /v1/messages without strict when Claude rejects strict tools under drop_params by @zoveki in #49102
  • feat(ui): add i18next plumbing and move the Workflows page onto it by @yuneng-berri in #49144
  • fix(responses)!: keep the proxy's error body on litellm.responses errors from litellm_proxy models by @mika-lt in #49073
  • fix(context_management)!: run clear_tool_uses in the gateway on the Responses API path by @AlonSoko in #47861
  • chore: bump litellm-enterprise 0.1.80 -> 0.1.81, litellm-proxy-extras 0.4.111 -> 0.4.112 by @yuneng-berri in #49149
  • feat(dashscope): add image edits and text-to-speech by @zoveki in #48998
  • feat(pass-through): add eu/jev decision API pass-through with spend tracking by @edujuan in #46875
  • chore(caching)!: remove the disk cache backend by @yuneng-berri in #48114
  • test: update integration tests left stale by recent product changes by @yuneng-berri in #49143
  • feat(lite): offer each model group's reasoning efforts in pi, OpenCode and Codex by @quietjules in #48949

New Contributors

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

Don't miss a new litellm release

NewReleases is sending notifications on new releases.