Commit graph

55767 commits

Author SHA1 Message Date
yuneng-jiang
55c9c6af17
Merge pull request #50849 from BerriAI/litellm_rc109_beta_header_test_bundled_config
test: repair four failing tests on rc/1.109.0
2026-11-10 00:34:14 -08:00
Yuneng Jiang
e4f74548a3
test(integration): cap the OAuth metadata lookup in the mixed capabilities subscription case
The second server in this case is a plain MCP SDK server registered as
oauth_delegate. The gateway's first catalog listing waits for that server's
OAuth metadata lookup, which never resolves and runs for the full
MCP_METADATA_TIMEOUT of 10 seconds. The MCP SDK client also gives
server/discover 10 seconds, so the case passed or failed on about a tenth
of a second of head start.

Setting LITELLM_MCP_METADATA_TIMEOUT to 5 for this case keeps the lookup
well inside the client limit. The case still asserts that subscription
changes are delivered and tools are refreshed across both servers.
2026-11-09 23:57:47 -08:00
Mateo Wang
d993377396
test(integration): give each kill-burst its own prompts so cached control replies cannot stand in for late traffic (#50569)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
(cherry picked from commit 0d0bf8f75f)
2026-11-09 23:57:47 -08:00
Yuneng Jiang
f8eeb05ba8
test(integration): empty the shared client cache before the tier pin batch test
The test stores its recording Redis client in litellm's shared client
cache with the default ttl. When earlier tests in the same process have
filled that cache with longer lived clients, the next insert evicts the
recording client, the pin is read through a fresh client, and the test
sees no commands on the wire.
2026-11-09 22:41:32 -08:00
Yuneng Jiang
9eedf608e7
test(vertex_ai): read the bundled beta header config in the prompt caching scope test
The test read whatever config the previous test left loaded. The
local_beta_headers_config fixture reloads from the hosted file on main
at teardown, and since #49409 that file lets vertex_ai send
prompt-caching-scope-2026-01-05 as a header, which this line's bundled
config does not.
2026-11-09 22:31:39 -08:00
yuneng-jiang
d55668e253
Merge pull request #50795 from BerriAI/litellm_rc109_drop_gemini_empty_n
test(integration): drop the empty-string n case from the Gemini long decode test
2026-11-09 18:39:55 -08:00
Yuneng Jiang
33898503ab
test(integration): drop the empty-string n case from the Gemini long decode test
Google AI Studio answers generationConfig.candidate_count "" with a 400 before it generates anything, so the truncated 200 this case scripts is a reply Google never gives. The other malformed count and cap cases stay.

This also removes the skip that covered only that case on this line.
2026-11-09 17:39:27 -08:00
yuneng-jiang
efebe3a567
Merge pull request #50757 from BerriAI/litellm_rc109_together_repin
test(e2e): backport the Together reasoning replay repin (#50601) to rc/1.109.0
2026-11-09 16:56:46 -08:00
yuneng-jiang
5d0935b361 test(e2e): repin the Together reasoning replay backend to MiniMax-M3.1-Flash (#50601)
MiniMax-M3 reached its 2026-11-06 deprecation date in the cost map, which names MiniMax-M3.1-Flash as its successor

(cherry picked from commit 1d06a1ca69)
2026-11-09 15:17:15 -08:00
yuneng-jiang
7f88a33e89
Merge pull request #49978 from BerriAI/litellm_chore_9d4b6e
Some checks failed
LiteLLM Rust DB / db-queries (push) Has been cancelled
LiteLLM Rust / rust-lint (push) Has been cancelled
LiteLLM Rust / rust-test (push) Has been cancelled
LiteLLM Rust / rust-wheel (push) Has been cancelled
chore: rebuild Admin UI bundle on rc/1.109.0
2026-11-03 15:58:57 -08:00
Yuneng Jiang
b77e4a2221
chore: update Next.js build artifacts (2026-11-03 23:55 UTC, node v24.19.0) 2026-11-03 15:55:52 -08:00
yuneng-jiang
9aa05b3e2a
Merge pull request #49945 from BerriAI/litellm_e2e_qualification_rc109
test(e2e): backport qualification repairs to rc/1.109.0
2026-11-03 13:41:20 -08:00
Yuneng Jiang
1e5cfe8ba9
test(e2e): backport qualification repairs to rc 1.109.0 2026-11-03 13:35:27 -08:00
Mateo Wang
eb505add5b
Merge pull request #49724 from BerriAI/litellm_backport_49692_rc_1_109_0
fix(bedrock): backport #49692 to rc/1.109.0
2026-11-03 20:22:48 +00:00
Yuneng Jiang
298f12dfd7
Merge remote-tracking branch 'origin/rc/1.109.0' into litellm_backport_49692_rc_1_109_0 2026-11-03 12:20:02 -08:00
Yuneng Jiang
7eb7357dda
chore: correct rc 1.109.0 subpackage patch versions 2026-11-03 12:20:02 -08:00
yuneng-jiang
26654fc154
Merge pull request #49770 from BerriAI/litellm_rc109_ledger_fault_injection
test(integration): fix rc109 ledger transaction expiry
2026-11-02 18:36:03 -08:00
Yuneng Jiang
da336da4b5
test(integration): preserve ledger transaction policy during fault injection 2026-11-02 18:29:34 -08:00
yuneng-jiang
6cd9a36ce5
Merge pull request #49754 from BerriAI/litellm_rc109_finish_integration_repairs
test(integration): finish rc/1.109.0 qualification repairs
2026-11-02 17:30:51 -08:00
Yuneng Jiang
fbcc0e75bf
test(integration): bind Messages checks to gateway credentials 2026-11-02 17:03:01 -08:00
Yuneng Jiang
9f0942ef04
test(integration): finish rc/1.109.0 qualification repairs 2026-11-02 16:39:07 -08:00
yuneng-jiang
f8c93132fb
Merge pull request #49727 from BerriAI/litellm_rc109_confirmed_product_fixes
fix: backport metadata and metric repairs to rc/1.109.0
2026-11-02 16:22:22 -08:00
yuneng-jiang
20acb3f038
Merge pull request #49746 from BerriAI/litellm_rc109_defer_malformed_gemini_count
test(integration): defer empty-count Gemini cases on rc/1.109.0
2026-11-02 16:16:09 -08:00
Yuneng Jiang
b09a68b038
test(integration): defer empty-count Gemini cases on rc/1.109.0 2026-11-02 16:01:15 -08:00
Yuneng Jiang
0c466b05ce
test: use explicit prices in cost calculation checks 2026-11-02 13:29:56 -08:00
Yuneng Jiang
a63b543044
fix(ollama): include provider declaration helper for the RC 2026-11-02 13:14:38 -08:00
Yuneng Jiang
322457c62b
fix(ollama): keep capability and pricing lookups local 2026-11-02 13:10:29 -08:00
Yuneng Jiang
4f53e29bed
fix(prometheus): retain deployment attribution on proxy failures 2026-11-02 13:05:38 -08:00
yuneng-jiang
7b223286b0
Merge pull request #49716 from BerriAI/litellm_rc_1109_remaining_integration_checks
test(integration): backport remaining qualification checks to rc/1.109.0
2026-11-02 12:43:21 -08:00
Yuneng Jiang
4eb5e1e326
test(integration): scope offline resolution to the restricted runner 2026-11-02 12:14:21 -08:00
Yuneng Jiang
5133050db6
test(integration): align remaining release qualification checks 2026-11-02 12:10:25 -08:00
mateo-berri
7d8226d965 chore: bump litellm-proxy-extras 0.4.112 -> 0.4.112.post1
litellm-proxy-extras/ changed on this line since v1.109.0-dev.2, and PyPI already has litellm-proxy-extras 0.4.112, so the release would skip publishing it and ship the line without those litellm-proxy-extras/ changes
2026-11-02 11:56:58 -08:00
mateo-berri
9e4d2dc9a4 chore: bump litellm-enterprise 0.1.81 -> 0.1.81.post1
enterprise/ changed on this line since v1.109.0-dev.2, and PyPI already has litellm-enterprise 0.1.81, so the release would skip publishing it and ship the line without those enterprise/ changes
2026-11-02 11:56:57 -08:00
zoveki
de1756a9f5 fix(bedrock)!: give Invoke and Mantle Claude the model's own default max_tokens (#49692)
* fix(bedrock): resolve Invoke Claude default max_tokens from the base model id

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* refactor(bedrock): build Invoke Claude request params without mutating

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(bedrock): type tool-search normalizer return to clear unknown-type gate

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(bedrock): resolve Invoke and Mantle Claude default max_tokens from the deployment id, ARN base_model, and Mantle row

* fix(bedrock): default Invoke Claude max_tokens from the deployment's own cap and honor AnthropicConfig

Read the called deployment's model_info.max_output_tokens before the base model's
cost row, skip the shared regional key the router fills from every deployment, and
leave the default to litellm.AnthropicConfig(max_tokens) when it is set.

* fix(bedrock): send the mapped default max_tokens on bedrock_mantle Claude chat

* fix(bedrock): bound a global AnthropicConfig max_tokens by the deployment's own cap

* test(bedrock): annotate the new Mantle default max_tokens tests with Final

* refactor(bedrock): inject the AnthropicConfig max_tokens reader into the Invoke Claude config

---------

Backport of #49692 to rc/1.109.0
Cherry-picked from 6be98d8c75 (main)

Co-authored-by: mateo <mateo@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
2026-11-02 11:46:35 -08:00
yuneng-jiang
af70233681
Merge pull request #49694 from BerriAI/litellm_rc_1109_migration_lock_test
test(integration): backport release qualification repairs to rc 1.109.0
2026-11-02 11:27:20 -08:00
Yuneng Jiang
d77199e03a
test(integration): repair stale contract fixtures 2026-11-02 11:03:32 -08:00
Yuneng Jiang
db495be502
test(integration): scope migration lock checks on rc 1.109.0 2026-11-02 10:18:07 -08:00
devin-ai-integration[bot]
ff3983c1f6
fix(wandb): set DeepSeek-V3.1 and Llama-3.1-8B max_input_tokens from the CoreWeave Forge page (#49616)
Some checks failed
unit / rust-bridge-harness (push) Blocked by required conditions
unit / auth-checks (push) Blocked by required conditions
unit / budgets (push) Blocked by required conditions
unit / custom-logging (push) Blocked by required conditions
unit / db-and-spend (push) Blocked by required conditions
unit / endpoints-and-responses (push) Blocked by required conditions
unit / enterprise-routing (push) Blocked by required conditions
unit / guardrails-hooks (push) Blocked by required conditions
unit / jwt-and-keys (push) Blocked by required conditions
unit / key-generation (push) Blocked by required conditions
unit / logging-misc (push) Blocked by required conditions
unit / mcp-oauth (push) Blocked by required conditions
unit / proxy-runtime (push) Blocked by required conditions
unit / proxy-server-core (push) Blocked by required conditions
unit / root (push) Blocked by required conditions
unit / proxy-utils (push) Blocked by required conditions
unit / ui-unit (push) Waiting to run
unit / docs (push) Waiting to run
unit / helm (push) Waiting to run
unit / OpenAI 2.20.0 compatibility (push) Blocked by required conditions
unit / OpenAI 3.0.0 compatibility (push) Blocked by required conditions
unit / OpenAI 3.25.0 compatibility (push) Blocked by required conditions
unit / redis-py 5.3.1 compatibility (push) Blocked by required conditions
unit / redis-py 6.4.0 compatibility (push) Blocked by required conditions
unit / redis-py 7.4.1 compatibility (push) Blocked by required conditions
unit / redis-py 8.0.1 compatibility (push) Blocked by required conditions
unit / coverage (push) Blocked by required conditions
unit / unit passed (push) Blocked by required conditions
GitHub Actions Security Analysis / zizmor (push) Waiting to run
Deploy main to gateway-dev / dispatch (push) Has been cancelled
Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-02 06:29:14 +00:00
yuneng-jiang
60fc121ce8
test(a2a): replace the third-party agent e2e test with an integration test (#49541)
Some checks failed
unit / auth-checks (push) Blocked by required conditions
unit / budgets (push) Blocked by required conditions
unit / custom-logging (push) Blocked by required conditions
unit / db-and-spend (push) Blocked by required conditions
unit / endpoints-and-responses (push) Blocked by required conditions
unit / enterprise-routing (push) Blocked by required conditions
unit / guardrails-hooks (push) Blocked by required conditions
unit / jwt-and-keys (push) Blocked by required conditions
unit / key-generation (push) Blocked by required conditions
unit / logging-misc (push) Blocked by required conditions
unit / mcp-oauth (push) Blocked by required conditions
unit / proxy-runtime (push) Blocked by required conditions
unit / proxy-server-core (push) Blocked by required conditions
unit / root (push) Blocked by required conditions
unit / proxy-utils (push) Blocked by required conditions
unit / ui-unit (push) Waiting to run
unit / docs (push) Waiting to run
unit / helm (push) Waiting to run
unit / OpenAI 2.20.0 compatibility (push) Blocked by required conditions
unit / OpenAI 3.0.0 compatibility (push) Blocked by required conditions
unit / OpenAI 3.25.0 compatibility (push) Blocked by required conditions
unit / redis-py 5.3.1 compatibility (push) Blocked by required conditions
unit / redis-py 6.4.0 compatibility (push) Blocked by required conditions
unit / redis-py 7.4.1 compatibility (push) Blocked by required conditions
unit / redis-py 8.0.1 compatibility (push) Blocked by required conditions
unit / coverage (push) Blocked by required conditions
unit / unit passed (push) Blocked by required conditions
GitHub Actions Security Analysis / zizmor (push) Waiting to run
LiteLLM Rust DB / db-queries (push) Has been cancelled
VS Code Extension / vscode-extension (push) Has been cancelled
Deletes the A2A e2e test that registered a third-party agent, which depended on a site the project does not control, along with its helpers and its coverage registry row. Adds an integration test where a scripted A2A agent receives a skill call as a data part and returns a data artifact, asserting the agent and the caller each get theirs unchanged
2026-10-31 18:59:04 -07:00
yuneng-jiang
1b3da63703
test: move Sail, Weave and Presidio e2e tests to integration tests (#49533)
* test: move Sail and Weave e2e tests to integration tests

The Sail service_tier and completion_window cases now run against the scripted upstream in tests/integration/pricing, asserting the outbound body and the billed rates for chat, responses and messages

The key-scoped Weave delivery cases now run against an OTLP collector in tests/integration/observability. The case where only the otel callback is configured is skipped with a BUG reason

Removes the e2e copies, the Weave read-back client, the Sail registry rows, the Weave docs paragraph and the unused devin MCP server entry from the stage mirror config

* test: move Presidio masking e2e tests to integration tests

Moving them to integration tests. The pre_call, post_call and default scope cases now run against a mock Presidio analyzer and anonymizer that follow the real wire contract, and a scripted model upstream, on chat completions, messages and responses, with and without streaming

The spend log cases check the stored response and the guardrail record with a proxy that stores prompts in spend logs. The e2e copy, its Presidio guardrail params body, its registry rows and the doc paragraphs naming the two PRESIDIO variables are removed
2026-10-31 18:31:01 -07:00
devin-ai-integration[bot]
187f936cb3
fix(proxy)!: support reload with multiple workers (#45909)
* fix(proxy): support reload with multiple workers

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): stop the reload worker pool on a broken edit instead of respawning it

Workers now load the app through a factory that exits with uvicorn's
STARTUP_FAILURE code on any import error, so the pool stops and the
reloader waits for the next save, the same as single-worker reload.
Multi-worker reload needs uvicorn>=0.50.0 for that, so older versions
keep the single-worker reload with a warning.

* test(integration): stop the reload test's proxy through the harness shutdown helper

Main's TQ010 rule rejects a raw .terminate() under tests/integration, so the multi-worker reload test now calls OwnedProxy.begin_shutdown(), which sends the same SIGTERM

* test(proxy): cover the reload worker pool end to end and edit the config the proxy loads

* docs(agents): scope the two-worker reload QA rule to uvicorn proxies that use Redis

* fix(proxy): keep the original traceback when a reloaded worker fails to import the app

* docs(agents): point both router and coordination Redis at the QA Redis and cover single-worker trees

* fix(proxy): stop the reload worker pool when the reloader exits and give reloads a longer worker healthcheck

Closing the terminal or pressing Ctrl-\ killed the reloader and left the pool parent holding the port while it respawned workers that could not start. The pool now stops once its parent reloader is gone. The reload pool also defaults the worker healthcheck to 30 seconds unless --timeout_worker_healthcheck is set, since uvicorn's 5 second default killed workers that were still booting on a reload.

* fix(proxy): watch the reloader through its process sentinel so the pool also stops on Windows

* fix(proxy): carry the graceful shutdown timeout into the reload worker pool

* fix(proxy): stop the reload worker pool on Ctrl-\ instead of waiting out a dying worker's healthcheck

* test(proxy): skip the startup-failure reload tests on uvicorn without a startup failure code

* docs(agents): keep the QA proxy rule to two workers, Redis, and reload

* fix(proxy): keep Windows on single-worker reload and pass unlisted uvicorn args to the reload pool

* fix(proxy): stop reload workers when their pool parent dies

* test(proxy): move the reload pool process tests to the integration suite

The unit test guide keeps tests/unit in-process, so the subprocess pool cases now live in tests/integration/configuration and use the harness port allocator and process helpers

* docs(agents): keep main's proof rules and inline the multi-worker QA command

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(proxy): exit reload workers as startup failures when the app factory raises

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(proxy): check the reload pool serves the overridden worker app

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: mateo <mateo@berri.ai>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
2026-11-01 00:57:32 +00:00
devin-ai-integration[bot]
a1c5829f6b
fix(bedrock): raise GovCloud West Llama 3 max output to the model card 8K (#49543)
Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-01 00:30:38 +00:00
devin-ai-integration[bot]
f4f5e2c80f
fix(cost-map): add 2026-11-04 deprecation_date to together_ai Qwen3.8-2.4T-A95B (#49542)
Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-11-01 00:28:59 +00:00
yuneng-jiang
68dbf54b09
chore(e2e): remove the unused arize_phoenix callback from the stage mirror config (#49538)
Phoenix is unused by the e2e suite and has no account behind it. Drops the callback from the stage mirror gateway config, and updates the OTEL trace test's failure message and the e2e contributing notes that still pointed at the arize_phoenix preset.
2026-10-31 17:21:06 -07:00
yucheng-berri
0f4d5c6ad0
feat(ovalix)!: scan files, tool calls and tool results (#49309)
* feat(ovalix): file and tool scanning, app discovery from the key alias

Mirror of BerriAI/litellm#34132 at 5ffc268585, rebuilt on main.

* fix(ovalix): keep inspecting requests whose key has no user

The tracker allows a checkpoint call with an empty actor without inspecting
it, so a key with no user (or a /v1/messages or /v1/responses request that
carries its own metadata object) got no Ovalix enforcement. Fall back to
"unknown" as the guardrail did before, so every request is inspected.

* refactor(ovalix): check texts without mutation and test discovery through tracker requests

- _check_texts builds its result from per-text verdicts checked newest first by _check_text
- discovery and routing cache unit tests answer the tracker routes instead of replacing private methods
- integration test adds streaming cells and a tracker outage during a concurrent burst

* fix(ovalix): resolve tool result names in one pass

Each tool result rescanned every earlier message for its call id, so a request with thousands of
tool results spent seconds in the event loop. Declarations are now indexed once per request and
each result takes the nearest earlier one by bisection

* test(ovalix): annotate new test bindings and build the burst plan with product

* fix(ovalix): drop app discovery from the key alias

A config with no application_id no longer boots in discovery mode, where
the [Name] prefix of the key alias picked the Ovalix application and so its
policy. Anyone who could rename a key could move it to a weaker app, or to
an unknown name the tracker created with its default policy. The guardrail
now needs application_id at startup again, as on main, and every checkpoint
call goes by the configured application and checkpoint ids.

Removes enable_routing_cache and fail_if_no_application, the
app_name_regex and resolve_application tracker calls, and the per-alias
routing cache. Restores main's startup check that a requested pre_call or
post_call hook has its checkpoint id.

---------

Co-authored-by: Shalom Jamil <shalom@ovalix.io>
2026-10-31 17:01:12 -07:00
Mateo Wang
901b7f762f
test(mcp): cancel disconnected HTTP tool handlers (#49436)
* test(mcp): cancel disconnected HTTP tool handlers

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(mcp): verify owned peer disconnect cleanup

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-31 16:41:49 -07:00
moe-berri
28679bb9c3
fix(chat): describe general chat and deep research on the chat home (#49531)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-31 16:39:33 -07:00
Mateo Wang
8c46b2c0d6
test(router): trace the deployment index lock in the file that owns it (#49520)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-31 16:38:53 -07:00
Kerry Lu
137fd7cd66
fix(docs): replace stale docs/proxy/enterprise links with the current docs pages (#49491)
* fix(ui): point the Spend Per entity docs link at the cost tracking page

* fix(docs): replace the remaining docs/proxy/enterprise links with current pages

* revert(terraform): leave the team tags docs link for a code-owned follow-up

---------

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-31 16:38:37 -07:00
ishaan-j-berri
6105aaa63e
Configure full Bedrock guardrail assessments (#49217) (#49470) 2026-10-31 23:37:45 +00:00