Commit Graph

35392 Commits

Author SHA1 Message Date
yuneng-jiang
d049d35612 [Fix] Drop unnecessary timeout param from get_async_httpx_client call
The default timeout (600s) from AsyncHTTPHandler is sufficient.
Removes the explicit timeout param to keep the call simple.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 12:26:25 -07:00
yuneng-jiang
fbad073a1f [Fix] Use cached async HTTP client in Vantage destination
Replace per-request `httpx.AsyncClient` with `get_async_httpx_client`
to avoid the +500ms latency penalty from creating new clients per
request. Updates tests to mock the cached client factory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 12:23:40 -07:00
yuneng-jiang
8be79c965c [Docs] Add Vantage environment variables to config_settings reference
The documentation test checks that all env vars used in code are
documented. The Vantage integration added 5 new env vars without
updating the reference table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 12:16:19 -07:00
yuneng-jiang
6abdf5adde [Fix] Responses bridge variable mismatch and outdated CI tests
Fix genuine regression in responses_api_bridge_check where the second
call assigned to `model_info` instead of `responses_api_model_info`,
preventing gpt-5.4 + tools + reasoning_effort from routing to the
Responses API bridge.

Also update outdated tests:
- Vantage tests: match "csv" file key and use supported column names
- Anthropic caching test: add "type": "custom" to expected tool payload
- Claude Agent SDK test: remove non-deterministic LLM content assertion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 12:12:35 -07:00
yuneng-jiang
24ae5cc397
Merge pull request #23542 from Harshit28j/litellm_silent_metrics_v2
fix: silent metrics race condition
2026-03-14 10:15:36 -07:00
yuneng-jiang
4897faafc0
Merge pull request #23333 from Harshit28j/litellm_FOCUS_preserve-summary
Add Vantage integration for FOCUS CSV export
2026-03-14 10:15:05 -07:00
Harshit28j
d72a34dbe2 add docs and export fixes 2026-03-14 22:19:56 +05:30
yuneng-jiang
36c076d56c
Merge pull request #23550 from Sameerlite/litellm_azure-model-router-cost-breakdown
feat(azure): Azure Model Router cost breakdown in UI + additional_costs from hidden_params
2026-03-14 09:39:04 -07:00
yuneng-jiang
dd1a3e15e1
Merge pull request #23526 from Sameerlite/litellm_anthropic-guardrail-tools
fix(anthropic): preserve native tool format when guardrails convert tools for Anthropic Messages API
2026-03-14 09:38:43 -07:00
yuneng-jiang
fcbfcf7dea
Merge pull request #23533 from Sameerlite/litellm_fix_responses_bridge_gpr-5.4
Fix _supports_reasoning_effort_level for responses bridge
2026-03-14 09:38:22 -07:00
Sameer Kankute
6c3e036648
Merge branch 'main' into litellm_fix_responses_bridge_gpr-5.4 2026-03-14 21:43:17 +05:30
Harshit Jain
dc6f68b431
Update tests/test_litellm/test_router_silent_experiment.py
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-14 16:47:56 +05:30
Harshit28j
01ed0e0ebf fix: ensure metadata isolation for silent model metrics 2026-03-14 16:32:18 +05:30
Joe Reyna
25ee2fb3f9
fix(security): bump tar to 7.5.11 and tornado to 6.5.5 (#23602)
* fix(security): bump tar to 7.5.11 and tornado to 6.5.5

- tar >=7.5.11: fixes CVE-2026-31802 (HIGH) in node-pkg
- tornado >=6.5.5: fixes CVE-2026-31958 (HIGH) and GHSA-78cv-mqj4-43f7 (MEDIUM) in python-pkg

Addresses vulnerabilities found in ghcr.io/berriai/litellm:main-v1.82.0-stable Trivy scan.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: document tar override is enforced via Dockerfile, not npm

* fix: revert invalid JSON comment in package.json tar override

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 23:08:14 -07:00
xianzongxie-stripe
81474c17fe
Handle response.failed, response.incomplete, and response.cancelled (#23492)
* Handle response.failed, response.incomplete, and response.cancelled terminal events in background streaming

Previously the background streaming task only handled response.completed and
hardcoded the final status to "completed". This missed three other terminal
event types from the OpenAI streaming spec, causing failed/incomplete/cancelled
responses to be incorrectly marked as completed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude

* Remove unused terminal_response_data variable

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude

* Address code review: derive fallback status from event type, rewrite tests as integration tests

1. Replace hardcoded "completed" fallback in response_data.get("status")
   with _event_to_status lookup so that response.incomplete and
   response.cancelled events get the correct fallback if the response
   body ever omits the status field.

2. Replace duplicated-logic unit tests with integration tests that
   exercise background_streaming_task directly using mocked streaming
   responses and assert on the final update_state call arguments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude

* Remove dead mock_processor and unused mock_response parameter from test helper

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude

* Remove FastAPI and UserAPIKeyAuth imports from test file

These types were only used as Mock(spec=...) arguments. Drop the spec
constraints and remove the top-level imports to avoid pulling FastAPI
into test files outside litellm/proxy/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude

* Log warning when streaming response has no body_iterator

If base_process_llm_request returns a non-streaming response (no
body_iterator), log a warning since this likely indicates a
misconfiguration or provider error rather than a successful completion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 23:02:09 -07:00
Pradyumna Yadav
a94b961c18
fix: auto-fill reasoning_content for moonshot kimi reasoning models in multi-turn tool calling (#23580) 2026-03-13 22:48:45 -07:00
Awais Qureshi
c7ba7948bc
PR #22867 added _remove_scope_from_cache_control for Bedrock and Azur… (#23183)
* PR #22867 added _remove_scope_from_cache_control for Bedrock and Azure AI but omitted Vertex AI. This applies the same pattern to VertexAIPartnerModelsAnthropicMessagesConfig."

* PR #22867 added _remove_scope_from_cache_control for Bedrock and Azure AI but omitted Vertex AI. This applies the same pattern to VertexAIPartnerModelsAnthropicMessagesConfig."

* PR #22867 added _remove_scope_from_cache_control to AzureAnthropicMessagesConfig
 but missed VertexAIPartnerModelsAnthropicMessagesConfi Rather than duplicating the method again, moved it up to the base AnthropicMessagesConfig so all providers
  inherit it, and removed the now-redundant copy from the Azure AI subclass.

* PR #22867 added _remove_scope_from_cache_control to AzureAnthropicMessagesConfig
 but missed VertexAIPartnerModelsAnthropicMessagesConfi Rather than duplicating the method again, moved it up to the base AnthropicMessagesConfig so all providers
  inherit it, and removed the now-redundant copy from the Azure AI subclass.

---------

Co-authored-by: Krish Dholakia <krrishdholakia@gmail.com>
2026-03-13 22:41:25 -07:00
Ethan T.
7bb2d78394
fix: add getPopupContainer to Select components in fallback modal to fix z-index issue (#23516)
The model dropdown menus in the Add Fallbacks modal were rendering behind
the modal overlay because Ant Design portals Select dropdowns to document.body
by default. By setting getPopupContainer to attach the dropdown to its parent
element, the dropdown inherits the modal's stacking context and renders above
the modal.

Fixes #17895
2026-03-13 21:58:58 -07:00
RoomWithOutRoof
a0a951b34f
fix: forward extra_headers to HuggingFace embedding calls (#23525)
Fixes #23502

The huggingface_embed.embedding() call was not receiving the headers
parameter, causing extra_headers (e.g., X-HF-Bill-To) to be silently
dropped. Other providers (openrouter, vercel_ai_gateway, bedrock) already
pass headers correctly. This fix adds headers=headers to match the
behavior of other providers.

Co-authored-by: Jah-yee <sparklab@outlook.com>
2026-03-13 21:54:43 -07:00
Harshit28j
550ef1eeea fix: test coverage 2026-03-14 10:01:40 +05:30
Harshit28j
9379f24ef1 fix: req changes by greptile on test coverage 2026-03-14 09:58:35 +05:30
Shivam Rawat
2405e0d400
Merge pull request #23592 from BerriAI/docs_per_model_tpm_rpm_for_teams
added doc
2026-03-13 17:35:43 -07:00
shivam
546ecfb084 added doc 2026-03-13 17:24:15 -07:00
yuneng-jiang
6549b4583f
Merge pull request #23591 from BerriAI/litellm_internal_dev_03_12_2026
[Infra] Merge internal dev branch to main
2026-03-13 16:43:35 -07:00
yuneng-jiang
811ce13ad4
Merge pull request #23590 from BerriAI/litellm_refactor_update_key_fn
[Refactor] Extract validation from update_key_fn to fix PLR0915 lint
2026-03-13 16:33:34 -07:00
yuneng-jiang
1d403e9bd8 refactor(key_management): extract validation logic from update_key_fn to fix PLR0915
Extract permission checks and constraint validation from update_key_fn
into _validate_update_key_data helper to reduce statement count below
the 50-statement limit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 16:29:28 -07:00
yuneng-jiang
85e5ef45d3
Merge pull request #23589 from BerriAI/litellm_fix_responses_background_cost_tests
[Fix] Update Outdated test_responses_background_cost Assertions
2026-03-13 16:23:44 -07:00
yuneng-jiang
3aeca22031 fix(test): update test_responses_background_cost assertions for pagination and stale cleanup
Tests were outdated after #23472 added pagination (take/order) to find_many
and stale-row cleanup via update_many. Updated assertions to match new call
signatures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 16:18:15 -07:00
yuneng-jiang
dca231e3f6
Merge pull request #23557 from BerriAI/litellm_ui_key_org-2
[Feature] Allow Setting organization_id on Key Update
2026-03-13 16:10:35 -07:00
yuneng-jiang
818c097ca9 Fix self-exclusion hash mismatch and missing throughput field checks
The self-exclusion filter compared raw key strings against SHA-256
hashed tokens from the DB, so keys were never excluded and
double-counting persisted. Now hash data.key before comparison.

Also add tpm_limit_type/rpm_limit_type to _throughput_fields_changed
guard, fall back to existing_key_row.team_id for team limit checks
(matching the org pattern), and add team self-exclusion test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 15:59:23 -07:00
yuneng-jiang
1038a119ce Skip org limit check when non-throughput fields are updated
Only run org validation (get_org_object + _check_org_key_limits) when
the update actually touches throughput-related fields (tpm_limit,
rpm_limit, or organization_id). Previously, any update to a key
belonging to an org would trigger the check, which would fail with a
400 if the org had been deleted — blocking unrelated field changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 15:38:42 -07:00
yuneng-jiang
133471f882 Fix double-counting bug in org/team key limit checks on update
When updating a key, _check_org_key_limits and _check_team_key_limits
would include the key being updated in the find_many results, causing
its current limits to be counted twice (once from the DB query, once
from the new requested limits). This caused false 400 errors on valid
limit adjustments.

Fix: exclude the key being updated (by matching token) from the
allocated totals before checking limits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 15:27:56 -07:00
yuneng-jiang
0b3dc00440 Merge remote-tracking branch 'origin' into litellm_internal_dev_03_12_2026 2026-03-13 15:11:49 -07:00
yuneng-jiang
0e44c460b5
Merge pull request #23584 from BerriAI/litellm_release_day_03_12_2026
[Infra] Merge Release Day Branch with Main
2026-03-13 14:31:27 -07:00
yuneng-jiang
f351bbdb36 [Fix] Derive SPEND_PER_REQUEST dynamically in spend accuracy tests
Instead of hardcoding SPEND_PER_REQUEST (which broke when the model
changed from gpt-3.5-turbo-0301 to gpt-3.5-turbo), make a single
calibration request first, poll for its spend, and use that as the
per-request cost. Fails fast with pytest.fail() after 5 retries if
calibration cannot determine the cost.

Also fixes a bug in test_basic_spend_accuracy where the user spend
assertion error message referenced user_info['info'] instead of
user_info['user_info'].

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:27:06 -07:00
yuneng-jiang
f5662eeb8a [Fix] Update otel and spend tracking test configs to use gpt-3.5-turbo
Same deprecated model fix as proxy_server_config.yaml — these two CI
configs also referenced gpt-3.5-turbo-0301 which has no pricing data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:08:36 -07:00
yuneng-jiang
3ec7c2a81e [Fix] Fail fast when team member spend not flushed in time
Increase wait timeout to 90s and pytest.fail() instead of silently
continuing, so the failure message points at the real cause.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 12:40:17 -07:00
yuneng-jiang
e2779639c0 [Fix] Fix test_users_in_team_budget using model with no pricing data
gpt-3.5-turbo-0301 was removed from the model cost map, so every call
had response_cost=0 and team member spend never increased. The wait
helper also returned True after 3s regardless of whether spend updated.

- Switch fake-openai-endpoint to gpt-3.5-turbo (has pricing in cost map)
- Remove premature early-return in wait_for_team_member_spend_update

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 12:35:20 -07:00
yuneng-jiang
4e70254d56 [Fix] Increase _delete_file retry budget to reduce flakiness
Increase max_retries from 6 to 9 and retry_delay from 10s to 20s
(180s total wait, up from 60s) to give batch cost tracking more time
to finish before cleanup attempts file deletion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 12:32:55 -07:00
yuneng-jiang
57865ec96e Revert "[Fix] Populate _hidden_params.model_id in batch terminal-state shortcut path"
This reverts commit ca2033036f.
2026-03-13 12:21:39 -07:00
yuneng-jiang
ca2033036f [Fix] Populate _hidden_params.model_id in batch terminal-state shortcut path
The terminal-state DB shortcut in retrieve_batch returned a LiteLLMBatch
with empty _hidden_params, causing the managed_files hook to skip encoding
output_file_id into a unified ID. This adds the same model_id extraction
from unified_batch_id that the non-terminal path already has.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 12:14:58 -07:00
yuneng-jiang
5b755db329 [Fix] Correct mypy fixes for realtime_api and presidio
- realtime_api/main.py: Revert param types to Dict, explicitly construct
  RealtimeSessionConfig/RealtimeExpiresAfter before passing to
  RealtimeClientSecretRequest
- presidio.py: Move type:ignore[override] to def line where mypy reports it

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 12:10:27 -07:00
yuneng-jiang
1f71578de2 [Fix] Add flaky reruns to test_e2e_managed_batch
The test_e2e_managed_batch test intermittently fails during cleanup
when deleting the input file — the batch cost tracking hasn't finished
processing yet (batch_processed=true not set), causing a 400 error.
This is a timing race condition unrelated to batch retrieval logic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 11:57:22 -07:00
yuneng-jiang
e40ebf262a Revert "[Fix] Populate _hidden_params.model_id in batch terminal-state shortcut path"
This reverts commit 1642a2f7ac.
2026-03-13 11:57:22 -07:00
yuneng-jiang
25e161a0fa fix(tests): remove test_completion_bedrock_claude_sts_oidc_auth and test_completion_bedrock_httpx_command_r_sts_oidc_auth that depend on external infra
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 11:53:53 -07:00
yuneng-jiang
efe6ddfc68
Merge pull request #23577 from Sameerlite/litellm_gpt54-tools-reasoning-routing
feat(openai): route gpt-5.4+ tools+reasoning to Responses API
2026-03-13 11:49:46 -07:00
Sameer Kankute
7dce61ce48 fix(tests): update TestGPT5ReasoningEffortPreservation for dict normalization
Made-with: Cursor
2026-03-14 00:13:16 +05:30
yuneng-jiang
a6ab172db0 [Fix] Use type:ignore instead of Union return type for realtime endpoint
The Union[RealtimeClientSecretResponse, Response] annotation breaks
FastAPI's response model generation. Revert to the original annotation
and suppress mypy on the error-path return instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 11:42:26 -07:00
yuneng-jiang
57397e0d26
Merge pull request #23576 from Sameerlite/litellm_gpt54-tools-reasoning-routing
Litellm gpt54 tools reasoning routing
2026-03-13 11:38:50 -07:00
yuneng-jiang
1642a2f7ac [Fix] Populate _hidden_params.model_id in batch terminal-state shortcut path
The terminal-state DB shortcut in retrieve_batch returned a LiteLLMBatch
with empty _hidden_params, causing the managed_files hook to skip encoding
output_file_id into a unified ID. This adds the same model_id extraction
from unified_batch_id that the non-terminal path already has.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 11:38:09 -07:00