Commit graph

54859 commits

Author SHA1 Message Date
yuneng-jiang
b7d579fab2
Merge pull request #50545 from BerriAI/litellm_chore_23d634
Some checks failed
LiteLLM Rust / rust-wheel (push) Has been cancelled
LiteLLM Rust / rust-lint (push) Has been cancelled
LiteLLM Rust / rust-test (push) Has been cancelled
chore: bump litellm to 1.108.3 on lts/1.108.x
2026-11-07 11:05:20 -08:00
Yuneng Jiang
3eda243ea8
chore: bump litellm 1.108.2 -> 1.108.3
litellm 1.108.2 already shipped, so the next release off this line is 1.108.3
2026-11-07 10:31:40 -08:00
yuneng-jiang
7e95523094
Merge pull request #50487 from BerriAI/backport_49984_lts_1108
Some checks failed
LiteLLM Rust / rust-lint (push) Waiting to run
LiteLLM Rust / rust-test (push) Waiting to run
LiteLLM Rust / rust-wheel (push) Waiting to run
Terraform Provider / gofmt, vet, build, test (push) Has been cancelled
Terraform Provider / Provider endpoints vs proxy OpenAPI schema (push) Has been cancelled
test(e2e): backport the e2e speedup and main's CI cleanups to lts/1.108.x
2026-11-06 19:44:32 -08:00
joshua-berri
03d9254dc2
Merge pull request #50484 from BerriAI/litellm_backport_mcp_sse_lts_1_108_x
fix(mcp): backport #47034 to lts/1.108.x
2026-11-06 19:41:16 -08:00
Mateo Wang
a323682345
ci: remove workflows whose secrets are dead (#49722)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
(cherry picked from commit b4a80d175c)
2026-11-06 17:41:13 -08:00
yuneng-jiang
fea2ca57e3
ci: cut the weekly rc branch on Monday 3am PT instead of Friday (#49472)
(cherry picked from commit 3129e44848)
2026-11-06 17:40:47 -08:00
tavren27
b6c3c591ee
ci: run the dashboard API types and Terraform endpoint checks on every change that can alter the spec (#49022)
* ci: run the dashboard API types check on every change that can alter the OpenAPI spec

* chore: shorten the spec_pattern comment to a pointer at the CI filter

* chore: drop the spec_pattern comment

* docs: name the full ui-api-types trigger set in the make check header and dashboard AGENTS.md

* test: check make check and CI pick the same files for the API-type sync

* ci: run the Terraform provider endpoint audit on enterprise route changes

* test: keep the Terraform trigger test in the mapped workflow test file

---------

Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
(cherry picked from commit e73f06ecdc)
2026-11-06 17:40:47 -08:00
devin-ai-integration[bot]
8473801145
ci: remove the Together AI and weekly cost map sync workflows (#48473)
Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
(cherry picked from commit 57ac107311)
2026-11-06 17:40:46 -08:00
yuneng-jiang
48bb30b537
test(mcp): replace the live Linear MCP OAuth e2e tests with integration coverage (#47154)
* test(mcp): move the MCP OAuth happy path from a live Linear e2e to an integration test

GitHub Actions now runs unit tests only, and the MCP OAuth happy path needed a
captured Linear browser login to click through a real consent page. The OAuth
flows it exercised are already integration tests against an owned
authorization-server double, except one behavior: the stored per-user token
must be served by a proxy process that never saw the consent, with no shared
Redis to fall back on. That case is now in test_mcp_oauth_flows.py

The e2e test, its owned-gateway helper, its workflow, the mcp_oauth_live marker
and the JUnit gate script only that workflow used are removed

* test(mcp): chat completions run an OAuth server tool with the caller's own stored token

* test(e2e): drop the Linear chat-completion MCP OAuth e2e and its helpers

The behavior it checked, a chat completion running an OAuth server's tool with
the caller's stored per-user token, is now an integration test in
test_mcp_llm_endpoints.py that needs no saved Linear browser login

* test(mcp): decode the stored per-user credential as urlsafe base64

The plaintext check used b64decode, which drops the - and _ of a urlsafe value
and raised on roughly one ciphertext in five

* test(mcp): drop the chat OAuth integration test that duplicates test_mcp_slots F2-chat

security/test_mcp_slots.py already sends a per-user OAuth token through
/v1/chat/completions and asserts the peer receives it. Every mutant the new test
killed was also killed by the existing suite, so it added no signal

(cherry picked from commit 44fcbc30b0)
2026-11-06 17:40:33 -08:00
yujonglee
26852a46f5
Merge pull request #50463 from BerriAI/litellm_backport_50300_lts_1_108_x
fix(guardrails): backport #50300 to lts/1.108.x
2026-11-07 10:40:24 +09:00
Joshua Valluru
d80ad6ebf3 ci(integration): keep the MCP SDK1 peer on mcp 1.x despite the project override
Carries the CircleCI half of #47651 so the mcp>=2.3.0 uv override does
not replace the peer venv's pinned mcp==1.28.1

(cherry picked from commit 8fe0a7358e)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 17:29:48 -08:00
Mateo Wang
f22a5e7b61
Merge pull request #50449 from BerriAI/litellm_backport_bedrock_empty_api_base_lts_1_108_x
fix(bedrock): treat an empty api_base or runtime endpoint as unset on lts/1.108.x
2026-11-06 17:28:21 -08:00
yuneng-jiang
048b587b0c
test(e2e): retire the quiet_stack lock and batch the claude_code model registration (#49984)
* test(e2e): retire the quiet_stack lock

quiet_stack held an exclusive host-wide lock for six tests, draining every
other xdist worker while they ran. On the full e2e lane that left 35-38% of
worker time idle. Each of those tests now lives where it can run without
pausing the suite

- the two memory tests move to perf/ behind the perf marker, so the perf lane
  runs them on its own fresh stack. Their refusing deployments use a literal
  key because the perf stack carries no provider keys
- the stored-request size check from the memory test becomes an integration
  test on an owned proxy that stores prompts
- the discount and margin spend-row tests are dropped from e2e. Their
  breakdown assertions join the existing integration pricing test, which
  already owns the discount and margin repricing flow
- the Bedrock guardrail cost test stays in e2e without the pricing reset
  fixture, since nothing else on the stack writes pricing config now
- the MCP semantic tool filter test turns on a proxy-wide setting, so it gets
  a new proxy_wide_config opt-in marker and runs after the main run

* test(e2e): register the claude_code deployments as one batch

The claude_code session fixture registered its 24 deployments one at a time on every xdist worker, and each one waited out the 15 s propagation window on its own, about 6 minutes per worker. ProxyClient.register_models posts the whole batch, polls each model until every replica serves it, then waits out propagation once from the last write. A model that fails to post or never becomes servable comes back as ModelNotRegistered, and an unservable one is deleted, so the fixture keeps reporting per-deployment failures the way it did

(cherry picked from commit b18188dee2)
2026-11-06 17:27:13 -08:00
Yujong Lee
598138fdf0 chore(deps): widen litellm-core filelock cap to <5 to match the root manifest 2026-11-07 10:23:22 +09:00
joshua-berri
3867d48dd5 fix(mcp): backport #47034 to lts/1.108.x
Upgrade to MCP SDK 2.3.0 and raise the per-event SSE size cap so MCP
tool results over 1 MiB stop failing with "SSE stream ended without a
response"

(cherry picked from commit 4aec80f5ee)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 17:08:23 -08:00
Yujong Lee
47931a3bf2 chore(deps): lock filelock 4.2.4 on 3.11+ and 3.20.3 on 3.10, as main does
Widens the filelock range to <5 and adds main's two filelock constraints, matching main's pyproject.toml since #49204
2026-11-07 08:12:07 +09:00
yujonglee
6c95a2d970 fix(guardrails): check a model-level post_call response once across the proxy and deployment layers (#50300)
Backport of #50300 to lts/1.108.x
Cherry-picked from 2b4485dee5 (main)

Conflicts in litellm/integrations/custom_guardrail.py and litellm/proxy/utils.py came from code the
line does not have (the pydantic import, _REQUEST_FIELDS and _guardrails_listed_in in
custom_guardrail.py, the stream token-id helpers in proxy/utils.py). Kept the line's code, added the
pick's helpers and pydantic import, and defined _REQUEST_FIELDS in both files next to the line's own
module-level TypeAdapter constants
2026-11-07 07:45:04 +09:00
mateo-berri
03fc76ed8d fix(bedrock): keep skipping a non-string runtime endpoint
Backport to lts/1.108.x ahead of its main PR.
Cherry-picked from ec312bb5e9 (litellm_fix_bedrock_empty_api_base).
2026-11-06 14:31:42 -08:00
mateo-berri
534aeb2d88 fix(bedrock): treat an empty api_base or runtime endpoint as unset
Backport to lts/1.108.x ahead of its main PR.
Cherry-picked from 9bcb039ac2 (litellm_fix_bedrock_empty_api_base).
2026-11-06 12:29:32 -08:00
yuneng-jiang
831a14c8f4
Merge pull request #50280 from BerriAI/litellm_backport_translation_p0_lts_1_108_x
fix: backport #46870, #46984 and #47100 to lts/1.108.x
2026-11-06 11:36:57 -08:00
Yuneng Jiang
e716a2c6cc
Merge branch 'lts/1.108.x' into litellm_backport_translation_p0_lts_1_108_x 2026-11-06 11:08:42 -08:00
mrinal-berri
73e9ac9304
Merge pull request #50267 from BerriAI/litellm_backport_49957_lts_1_108_x
fix(responses): backport json_object system prompt in input to lts/1.108.x (#49957)
2026-11-06 10:19:57 -08:00
Mateo Wang
58d96d3f1e
Merge pull request #50348 from BerriAI/litellm_backport_48931_lts_1_108_x
fix(mcp): backport #48931 to lts/1.108.x
2026-11-06 10:08:26 -08:00
Mateo Wang
be09d658fa
Merge pull request #50392 from BerriAI/litellm_backport_50255_lts_1_108_x
fix(vertex_ai): backport #50255 to lts/1.108.x
2026-11-06 09:33:56 -08:00
Mateo Wang
9155cd224b
Merge pull request #50360 from BerriAI/litellm_backport_bedrock_converse_service_tier_lts_1_108_x
fix(bedrock): backport Converse service_tier fix to lts/1.108.x
2026-11-06 09:33:36 -08:00
Mateo Wang
7ab17dfc53
Merge pull request #50362 from BerriAI/litellm_backport_43086_lts_1_108_x
fix(bedrock): backport #43086 to lts/1.108.x
2026-11-06 09:33:27 -08:00
Kerry Lu
612587a91d
Merge pull request #50326 from BerriAI/litellm_backport_1108_2_fixes_lts_1_108_x
fix(backport): bring #50132, #50218, #50274 and #50276 onto lts/1.108.x
2026-11-06 08:56:25 -08:00
mateo-berri
d6cfa6f0d3 chore(deps): bump oauthlib 4.0.0 -> 4.0.1 on lts/1.108.x
Lock-only bump that clears GHSA-3jp2-3mrg-2vxc and the line's osv-scan red. main already resolves oauthlib 4.0.1 (#49204), and the lines match main's and #50326's.
2026-11-06 04:40:50 -08:00
Julien Parenti
eb25b17946 fix(vertex_ai): honor vertex_location for the Cloud Text-to-Speech endpoint (#50255)
Backport of #50255 to lts/1.108.x.
Cherry-picked from 6fc9555f83 (main), adapted by hand: the line's text-to-speech module has no Gemini TTS code, so the Gemini parts of the pick are dropped and chirp takes its host from the deployment's or call's own vertex_location only.
2026-11-06 02:41:12 -08:00
mateo-berri
7771cbb1ec style: clear the ruff reds lts/1.108.x already has
Sorts two imports ruff flags (I001) in redis_update_buffer.py and utils.py, the same hunks #50348 carries, and drops a duplicate GenericStreamingChunk import (F811) in a streaming test. No behavior change.
2026-11-06 02:41:11 -08:00
mateo-berri
a97503a393 fix(bedrock): keep a responses batch row's drop_params
A /v1/responses batch row went through the Responses-to-Chat bridge, which
keeps only Responses fields, so the row's own drop_params was lost while its
service_tier still reached the Nova mapper. An unknown tier then failed the
file upload even with drop_params: true on the row.

The row's drop_params now rides along to the mapper, and the passthrough
branch keeps it out of the modelInput sent to Bedrock.
2026-11-06 01:37:23 -08:00
mateo-berri
f2cd45a8ab style: clear the ruff reds lts/1.108.x already has
Sorts two imports ruff flags (I001) in redis_update_buffer.py and utils.py, the same hunks #50348 carries, and drops a duplicate GenericStreamingChunk import (F811) in a streaming test. No behavior change.
2026-11-05 23:02:55 -08:00
mateo-berri
8a60580280 fix(bedrock): answer 400 for service tiers Bedrock cannot serve, forward reserved
Converse used to drop any service_tier outside default, flex, and priority
with no error, rewrite auto to default, and drop reserved. Now reserved and
standard_only map to Bedrock tiers, auto sends no tier, and any other value
answers 400 unless drop_params is on. Nova batch rows honor the row's
drop_params.

Backport to lts/1.108.x of ce94d2894d (litellm_bedrock_converse_service_tier_values), whose main PR is pending.
Adapted to the line: lts has no REQUEST_PARAMS, so the call passes the value through TypeAdapter(object) and keeps the line's two-argument requestMetadata call.
2026-11-05 23:02:48 -08:00
Scott Wilson
28abdf7dfe fix(bedrock): forward the per-turn-control beta to Bedrock Invoke (#43086)
Backport of #43086 to lts/1.108.x.
Cherry-picked from 08f2a98250 (main).

Conflicts resolved for the line: update_headers_with_filtered_beta keeps the line's (headers, provider) signature and gains only keep=, the messages handler passes keep= at the line's existing filter call, DEPLOYMENT_SCOPED_CAPABILITY_FIELDS adds supports_per_turn_control to the line's own set, the Invoke config (anthropic_claude3_transformation.py on the line) gains the _MODEL_INFO adapter main already had, and the test file gains main's ScriptedBedrockInvoke and _ANTHROPIC_MESSAGE helpers the new tests use.
2026-11-05 22:42:57 -08:00
mateo-berri
22563a80d1 fix(mcp): keep DeepSeek tool cleanup and the guardrail policy result on lts/1.108.x
DeepSeek now sends the params through its own tool cleanup when a hosted MCP
tool is dropped, so a tool_choice naming that tool and the tool selection params
beside legacy functions are cleared as the line does today.

The MCP security guardrail uses the gateway's saved toolset check, so a failed
read reports the name as unregistered with the policy result instead of raising.

Also fixes three lint errors the line already has, two import orders and one
duplicate test import, since make check cannot pass on this line without them.
2026-11-05 21:50:49 -08:00
simonp9
628f97a9e4 fix(mcp)!: answer 400 for a hosted MCP tool a translated route cannot run, drop it under drop_params (#48931)
Backport of #48931 to lts/1.108.x.
Cherry-picked from 61da6fcb4d (main).
2026-11-05 21:50:49 -08:00
mateo-berri
84a0d2950d fix(core): move drops_unsupported_params into core_helpers on lts/1.108.x
Prerequisite of #48931 on lts/1.108.x, hand-ported from the core_helpers move in b51b9b7d43 (#47347), which the line does not carry. tool_fields imports the helper from core_helpers, and the responses bridge now imports it from there too.
2026-11-05 21:50:49 -08:00
shrey
bf06bf1edb
Merge pull request #50297 from BerriAI/litellm_backport_48470_lts_1_108_x
fix(router): backport #48470 to lts/1.108.x
2026-11-05 20:59:32 -08:00
Mateo Wang
2295a3517f
Merge pull request #50325 from BerriAI/litellm_backport_50137_lts_1_108_x
fix(audio-transcription): backport #50137 to lts/1.108.x
2026-11-05 20:47:59 -08:00
kerry
c7120f38ac build(deps): bump oauthlib to 4.0.1 in uv.lock
Lock-only bump for GHSA-3jp2-3mrg-2vxc, which osv-scan flags on this line. uv lock --upgrade-package oauthlib, nothing else in the lock moves.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-06 03:04:59 +00:00
Kerry Lu
da447bb759 fix(router): write the prompt caching pin when turn_off_message_logging is on (#50276)
Backport of #50276 to lts/1.108.x. tests/integration/_support/redaction_probe.py also sends the standard key the picked integration test reads (main's probe got it in #47192).
Cherry-picked from 3f13c1ca34 (main). Conflicts in litellm_logging.py and the prompt caching check test were main-only neighbours (_get_completed_success_callbacks and the tools/system affinity tests), resolved by adding only this PR's method and test.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-06 03:02:46 +00:00
Kerry Lu
d9d70c1936 fix(types): define the responses compact call types for during_call guardrails and deployment hooks (#50274)
Backport of #50274 to lts/1.108.x. The line also lacked the get/delete/cancel responses CallTypes members that main got in #49133, so a during_call guardrail made those routes 500 with 'aget_responses is not a valid CallTypes'. The six members are added here (CallTypes, schema.d.ts, the azure call type list), and tests/integration/conftest.py registers the shares_worker_state marker the picked integration test carries.
Cherry-picked from d295f76c4a (main). Conflicts in litellm/types/utils.py, schema.d.ts and three test files were neighbouring main-only call types and tests, resolved by adding only the compact_responses entries and tests from this PR.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-06 03:02:46 +00:00
Kerry Lu
bec75e8c37 fix(openai): never send OPENAI_ADMIN_KEY as the bearer token for a deployment without an api_key (#50218)
Backport of #50218 to lts/1.108.x.
Cherry-picked from f25fff42a6 (main). Conflict in tests/unit/llms/openai/test_openai.py resolved by adding only this PR's test and imports, the neighbouring agentic-loop tests from main are not on this line.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-06 02:50:47 +00:00
Kerry Lu
6ea6ae380e fix(proxy): treat Postgres restart and shutdown errors as DB unavailable, not poison spend-log rows (#50132)
Backport of #50132 to lts/1.108.x. The line had no _prisma_error_code helper (main got it in #49190), so it is added here verbatim for db_write_never_sent.
Cherry-picked from b080c59e78 (main). Conflict in tests/unit/proxy/db/test_exception_handler.py resolved by keeping only the tests this PR adds, the two neighbouring tests from #49190 are not on this line.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-06 02:50:47 +00:00
qtim0
79c6f14f4c fix(audio-transcription): keep transcripts out of transcription error messages (#50137)
Backport of #50137 to lts/1.108.x.
Cherry-picked from 5085022580 (main).

Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
2026-11-05 18:23:56 -08:00
mateo-berri
4d32ea0075 bump: version 1.108.2 2026-11-05 16:51:15 -08:00
mateo-berri
78ee04d89c revert: keep oauthlib at 4.0.0 on lts/1.108.x until main moves
main still resolves oauthlib 4.0.0, and the line never runs ahead of main.
2026-11-05 16:51:09 -08:00
mateo-berri
408ab3a948 chore(deps): bump oauthlib to 4.0.1 on lts/1.108.x
Lock-only bump. 4.0.1 fixes a published advisory that osv-scan reports on
this line. oauthlib comes in through fastapi-sso, and the 4.0.0 to 4.0.1
wheel diff touches only server-side OAuth code.
2026-11-05 16:16:24 -08:00
shrey kharbanda
d1d159637e fix(router): preserve tag fail-open policy through affinity and cooldown (#48470)
Adapted for lts/1.108.x: the line has no _async_routable_cooled_deployment_ids,
so its call site and the _pool test helper change are dropped, and the test
file gains the RouterErrors import it lacks on this line.

(cherry picked from commit cfe0100e1f)
2026-11-05 14:56:28 -08:00
mateo-berri
e26cb98237 test(bedrock): match the wire tests to the line's schema path on Sonnet 4.6
The limits test now runs on Haiku 5.5 with thinking, the opt-in row whose
schemas the picks clean, since Sonnet 4.6 keeps the line's schema as sent.
The open object test checks Converse forwards the caller's schema once with
no JSON tool and answers with Bedrock's verdict. The /v1/messages test compares
against a copy taken before the call, so an in-place edit fails it.
2026-11-05 13:54:36 -08:00