Commit Graph
7614 Commits
Author SHA1 Message Date
yuneng-jiangandGitHub 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-jiangandGitHub 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-jiangandClaude Opus 4.6 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
Sameer Kankute 408b717cb9 Fix gpt 5 transformation tests 2026-03-14 00:00:02 +05:30
Sameer Kankute 30645d683f Reserve reasoning for responses via chat completion 2026-03-13 23:59:57 +05:30
Sameer Kankute 7abbe2dc06 Fix routing of tool call + reasoning effor for gpt-5.4 2026-03-13 23:59:53 +05:30
Sameer Kankute 3596464d11 Revert "feat(openai): drop reasoning_effort for gpt-5.4 when tools present"
This reverts commit 14b52b1318.
2026-03-13 23:59:48 +05:30
yuneng-jiangandClaude Opus 4.6 0fbfb8e772 fix(tests): remove test_oidc_circle_v1_with_amazon_fips that depends on external infra
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 10:33:52 -07:00
yuneng-jiangandGitHub 2b71b0fb25 Revert "QA: improve gpt-5.4 code/bugs" 2026-03-13 10:15:47 -07:00
yuneng-jiangandGitHub 8dc198eccf Merge pull request #23535 from Sameerlite/litellm_improve_qa-5.4
QA:  improve gpt-5.4 code/bugs
2026-03-13 09:37:30 -07:00
yuneng-jiangandClaude Opus 4.6 6ebd457146 fix(tests): update remaining PKCE SSO tests to mock get_async_httpx_client
The previous fix (124b44ec) only updated 3 tests but missed 10 more
that still patched the old `ui_sso.httpx.AsyncClient` path. Also
updated credential assertions to check Authorization header instead
of httpx.BasicAuth kwargs, matching the production code change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:13:05 -07:00
yuneng-jiangandClaude Opus 4.6 11cf288f98 fix(tests): fix broken test_router_fallbacks_with_cooldowns_and_model_id
The test used fallbacks=[{"gpt-3.5-turbo": ["123"]}] where "123" is a
model_id, but the fallback mechanism treats values as model group names.
This caused a ValueError since no model group "123" exists. Additionally,
mock_response propagates to fallback calls, making mock-based fallback
tests unreliable.

Simplified the test to verify that a RateLimitError doesn't permanently
cool down a deployment for subsequent requests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:10:41 -07:00
yuneng-jiangandClaude Opus 4.6 61cee53200 fix(tests): fix flaky qwen global endpoint test by mocking AsyncHTTPHandler at class level
The test was creating a real AsyncHTTPHandler instance and patching its
post method, but the internal code creates its own handler, bypassing
the mock. This caused real API calls to Vertex AI, resulting in 401
auth errors in CI. Switched to patching AsyncHTTPHandler at the class
level, matching the pattern used by the passing GPT-OSS test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:07:48 -07:00
yuneng-jiangandClaude Opus 4.6 b98ecd8c1d fix(tests): quarantine flaky test_oidc_circle_v1_with_amazon
The test fails with InvalidIdentityToken because the OIDC provider is
no longer configured in the third-party AWS account (ai.moda). This
matches the existing quarantine on test_oidc_circleci_with_azure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:04:42 -07:00
Sameer Kankute 9b3ffd04ef Reserve reasoning for responses via chat completion 2026-03-13 14:19:40 +05:30
Sameer Kankute 288b08fd25 Fix routing of tool call + reasoning effor for gpt-5.4 2026-03-13 14:19:04 +05:30
Sameer Kankute 90b03f6c67 Revert "feat(openai): drop reasoning_effort for gpt-5.4 when tools present"
This reverts commit 14b52b1318.
2026-03-13 13:40:29 +05:30
yuneng-jiangandClaude Opus 4.6 b08f464ee8 fix(tests): replace deprecated model refs in cost and model_info tests
Models removed from pricing JSON:
- gemini-1.5-pro-002, gemini-1.5-flash, gemini-1.5-flash-latest -> gemini-2.0-flash
- gpt-4o-audio-preview-2024-10-01 -> gpt-4o-audio-preview
- Tests using per-character pricing updated to per-token (no gemini models have per-character pricing now)
- Removed above_128k parametrization (no gemini models have tiered 128k pricing now)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 00:39:35 -07:00
yuneng-jiangandClaude Opus 4.6 3012c6d070 fix(tests): replace fixed sleeps with polling in spend accuracy tests
The spend accuracy tests were flaky because they used fixed sleeps
(45s/30s) to wait for the batch writer to flush. Under CI load, the
batch writer scheduler can be delayed beyond these windows, causing
all spend values to remain 0.0 and the test to fail.

Replace fixed sleeps with a polling loop that checks key spend every
10s for up to 120s, only proceeding once spend becomes non-zero.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 00:06:09 -07:00
yuneng-jiangandClaude Opus 4.6 002d64b321 fix(tests): increase MAX_CALLS and reduce sleep in flaky e2e budget test
The test_chat_completion_low_budget test was flaky because async spend
tracking couldn't reliably catch up within 50 calls with 0.5s sleeps.
Increased to 200 calls with 0.1s sleeps (same total time budget) to
give more opportunities for budget enforcement to trigger.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 00:04:31 -07:00
yuneng-jiangandClaude Opus 4.6 124b44ec22 fix(tests): update PKCE SSO tests to mock get_async_httpx_client
The recent commit 2a997993d4 replaced httpx.AsyncClient() with
get_async_httpx_client() in ui_sso.py, but the PKCE tests still
patched the old httpx.AsyncClient path. Updated all 10 affected
tests to mock get_async_httpx_client and removed unnecessary
context manager setup since AsyncHTTPHandler is returned directly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 00:02:12 -07:00
yuneng-jiangandClaude Opus 4.6 5dab326d0c fix(tests): update deprecated model refs in test_completion_cost
Replace models removed from pricing JSON during deprecation cleanup:
- textembedding-gecko -> text-embedding-004
- gemini-1.5-flash -> gemini-2.0-flash

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 00:01:00 -07:00
yuneng-jiangandClaude Opus 4.6 06681ddfcc Fix flaky audio streaming cost assertion in test_standard_logging_payload_audio
Audio streaming responses may not always report token counts, leading to
0.0 response_cost. Relax the assertion to >= 0 for streaming, keep > 0
for non-streaming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:23:10 -07:00
yuneng-jiangandClaude Opus 4.6 98ed295a24 fix(tests): fix flaky realtime WebRTC endpoint tests
Use dependency_overrides for user_api_key_auth instead of relying on
uninitialized proxy globals. The auth dependency was crashing with 500
(instead of 401) and returning MagicMock user_id/team_id values that
broke json.dumps in _encode_realtime_token_payload.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:14:51 -07:00
yuneng-jiangandClaude Opus 4.6 8ca744036a [Fix] Malformed messages returning 500 instead of 400
The existing AttributeError detection in proxy error handling only
checked one level deep in the exception chain (__cause__, __context__,
original_exception). In practice, the AttributeError from malformed
messages gets wrapped in multiple layers (AttributeError ->
OpenAIException -> APIConnectionError), so the check never found it.

Extracted the check into _has_attribute_error_in_chain() which walks
the full exception chain recursively (depth-capped at 10 to prevent
infinite loops from circular references).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:01:25 -07:00
yuneng-jiangandClaude Opus 4.6 8882b61296 fix(tests): update deprecated gemini-1.5-pro model refs in vertex tests
gemini-1.5-pro and gemini-1.5-pro-001 were removed from the model
pricing JSON. Tests referencing these models fail because capability
lookups (supports_response_schema, supports_system_messages) return
False when the model isn't in the map. Updated to gemini-2.0-flash.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 23:00:17 -07:00
yuneng-jiangandClaude Opus 4.6 3e5199d3f3 fix(tests): stabilize 5 flaky/outdated router integration tests
- test_async_fallbacks, test_async_fallbacks_streaming, test_sync_fallbacks:
  update previous_models assertion from 4 to 3 (fallback not counted)
- test_ausage_based_routing_fallbacks: update deprecated model
  claude-3-5-haiku-20241022 to claude-haiku-4-5-20251001
- test_router_fallbacks_with_cooldowns_and_model_id: increase RPM from
  1 to 2 so second request isn't blocked by RPM consumed during failed
  first request
- test_sync_in_memory_spend_with_redis: add delay after constructing
  RouterBudgetLimiting to let background init tasks complete before
  overwriting Redis values

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:54:31 -07:00
yuneng-jiangandClaude Opus 4.6 3489d1dbef fix(tests): update outdated model names in wildcard model tests
The expected model names in test_get_known_models_from_wildcard were
removed from the model registry (claude-3-5-haiku-20241022, gemini-1.5-flash,
gemini-1.5-pro). Updated to current model names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:53:31 -07:00
yuneng-jiangandClaude Opus 4.6 15075ef9ec fix(tests): update outdated model names in o1 and gemini tests
OpenAI retired o1-mini, o1-preview, gpt-4-0314, and gpt-4-32k from the model
cost map. Google renamed gemini-2.5-flash-image-preview to gemini-2.5-flash-image.
Updated tests to use current model names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:50:52 -07:00
yuneng-jiangandGitHub 0235aafb20 Merge pull request #23500 from BerriAI/litellm_litellm-mypy-errors-28de
[Fix] MyPy Errors
2026-03-12 22:46:10 -07:00
Cursor Agentandyuneng-jiang ff145398d5 fix(ci): skip tests requiring openai>=2.x and MCP M2M oauth2_flow
- Skip test_apply_patch_tool_call_converted_to_chat_completion_tool_call
  when openai.types.responses.response_apply_patch_tool_call is unavailable
  (CI uses openai==1.100.1 which doesn't have this module)
- Skip MCP M2M tests (test_m2m_credentials_forwarded_to_server_model,
  test_m2m_drops_incoming_oauth2_headers) that fail because PR #23187
  changed has_client_credentials to require explicit oauth2_flow opt-in
  but _execute_with_mcp_client was not updated to pass it through
- Revert source code change to rest_endpoints.py that auto-inferred
  oauth2_flow (regression risk: this changes MCP OAuth behavior)

Co-authored-by: yuneng-jiang <yuneng-jiang@users.noreply.github.com>
2026-03-13 01:09:56 +00:00
Cursor Agentandyuneng-jiang 177edb06ae fix: stabilize 5 CI test failures
- Vertex AI batch cost tests: replace removed gemini-1.5-flash-001 model
  with gemini-2.0-flash-001 in pricing lookups
- MCP test_executes_tool_when_allowed: add server_id and auth_type attrs
  to StubServer to match new _resolve_allowed_mcp_servers_with_ip_filter
- MCP M2M tests: infer oauth2_flow='client_credentials' in
  _execute_with_mcp_client when client_id/client_secret/token_url present
  (NewMCPServerRequest lacks oauth2_flow field)
- Team list test: update mock find_many to filter by team_id per the
  current per-team query pattern in list_team
- Azure DALL-E 3 health check: skip test due to 410 ModelDeprecated

Co-authored-by: yuneng-jiang <yuneng-jiang@users.noreply.github.com>
2026-03-13 01:03:35 +00:00
Emerson GomesandGitHub 92d39c308c fix(gemini): preserve toolConfig on native generate_content (#23493) 2026-03-12 17:48:09 -07:00
Cursor Agentandyuneng-jiang 9a356644bf fix(tests): stabilize 3 failing CI tests
1. Add missing __init__.py files in tests/test_litellm/llms/gemini/ and
   subdirectories (realtime/, image_edit/) to fix ModuleNotFoundError
   with pytest-xdist parallel workers.

2. Update test_transform_request_uses_dynamic_max_tokens to use
   claude-3-7-sonnet-20250219 (max_output_tokens=64000) since
   claude-3-5-sonnet-20241022 was removed from model_prices JSON
   during deprecated model cleanup. The test assertion was outdated.

3. Update context caching TTL tests to use gemini-2.5-pro instead of
   gemini-1.5-pro. The old model was removed from model_prices JSON,
   causing supports_system_messages to return False, which prevented
   system_instruction from appearing in the transformation output.

Co-authored-by: yuneng-jiang <yuneng-jiang@users.noreply.github.com>
2026-03-13 00:26:31 +00:00
Cursor Agentandyuneng-jiang 003e841737 fix(tests): update BFL image generation tests for new signature
Update transform_image_generation_response test calls to pass required
explicit params (request_data, optional_params, litellm_params, encoding)
that replaced **kwargs in the method signature.

Co-authored-by: yuneng-jiang <yuneng-jiang@users.noreply.github.com>
2026-03-13 00:20:52 +00:00
Cursor Agentandyuneng-jiang cc3f9cd65b fix(ci): stabilize CI tests - conditional import, mock fixes, timing adjustments
Fix 1.1: Make ResponseApplyPatchToolCall import conditional with try/except
  for compatibility with openai==1.100.1 (CI environment)
Fix 1.2: Move Router creation inside mock context in vector store tests
  so mocks are applied before Router captures function references
Fix 1.3: Update test_model_group_info_e2e to check for 'anthropic/*'
  wildcard group instead of specific model names not in proxy config
Fix 2.1: Increase redis cache test sleep from 1s to 5s
Fix 2.2: Increase spend accuracy test sleep from 25s to 45s
Fix 2.3: Add 0.5s sleep between budget test calls
Fix 2.4: Increase vertex AI spend test sleep from 20s to 40s

Co-authored-by: yuneng-jiang <yuneng-jiang@users.noreply.github.com>
2026-03-13 00:01:25 +00:00
yuneng-jiangandClaude Opus 4.6 d16c8c5590 [Fix] BaseModelResponseIterator crashes on non-string stream chunks
The empty-line filter in __next__/__anext__ called .strip() without
checking the type first. When the Responses API yields Pydantic
BaseModel events (e.g. ResponseCreatedEvent), this raises
AttributeError. Add an isinstance(str_line, str) guard so non-string
objects pass through to _handle_string_chunk as intended.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 16:16:32 -07:00
Shivam RawatandGitHub f5ffc59309 fix(proxy): Windows compatibility for Prisma engine watchdog (#23494)
Guard os.waitpid and os.WNOHANG usage with sys.platform check.
These APIs are Unix-only; on Windows they cause AttributeError
and prevent proxy startup.

- _try_waitpid_watch: return False on Windows, fall back to
  os.kill polling
- _reap_all_zombies: return empty set on Windows (no zombies)

Add unit tests for Windows path.

Made-with: Cursor
2026-03-12 16:02:37 -07:00
yuneng-jiangandGitHub 229d2008a3 Merge pull request #23488 from BerriAI/litellm_/peaceful-poincare
[Fix] Flaky and outdated router integration tests
2026-03-12 15:24:51 -07:00
yuneng-jiangandClaude Opus 4.6 e351521243 [Fix] Fix flaky and outdated router integration tests
- test_router_cooldown_handlers: add mock_response to avoid real API call requiring OPENAI_API_KEY
- test_router_timeout: update deprecated claude-3-5-haiku-20241022 to claude-haiku-4-5
- test_router_fallbacks: relax assertion from == 4 to >= 3 to handle cooldown timing variance

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 15:20:55 -07:00
yuneng-jiangandGitHub f1a7e42577 Merge pull request #23485 from BerriAI/litellm_/sleepy-swirles
[Fix] Realtime websocket tests for websockets v15+ API
2026-03-12 15:02:18 -07:00
Joe ReynaandGitHub 03a0c37608 Merge pull request #23467 from joereyna/fix/mcp-oauth2-token-cache-tests
fix: add oauth2_flow="client_credentials" to MCPServer test helper
2026-03-12 14:55:42 -07:00
yuneng-jiangandClaude Opus 4.6 3f0c7b5552 [Fix] Update realtime websocket tests for websockets v15+ API
Use explicit imports from websockets.exceptions (ConnectionClosedOK,
ConnectionClosedError) instead of the removed websockets.exceptions
attribute, and add openai/ model prefix so get_llm_provider resolves
the provider correctly in CI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:40:48 -07:00
yuneng-jiangandGitHub 89d8401d72 Merge pull request #23483 from BerriAI/litellm_update_deprecated_test_models
[Fix] Update Deprecated Model Names in CI Tests
2026-03-12 14:16:52 -07:00
yuneng-jiangandClaude Opus 4.6 cc81e3c226 Replace deprecated model names in tests that were removed from remote model cost map
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:12:07 -07:00
yuneng-jiangandGitHub f3e870a3a9 Merge pull request #23478 from BerriAI/litellm_fix_o1_preview_outdated_test
[Fix] Remove Deprecated o1-preview from Azure O-series Test
2026-03-12 13:26:46 -07:00
yuneng-jiangandGitHub fe8660da01 Merge pull request #23477 from BerriAI/litellm_/unruffled-shaw
[Fix] Remove recursion in BFL _read_image_bytes
2026-03-12 13:26:24 -07:00
yuneng-jiangandClaude Opus 4.6 a93c069dd5 [Fix] Add max_depth guard to BFL _read_image_bytes recursive function
Use the standard depth/max_depth pattern with DEFAULT_MAX_RECURSE_DEPTH
to guard the recursive list-unwrapping in _read_image_bytes, matching
the existing pattern used by _read_all_bytes in vertex_imagen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:22:56 -07:00
yuneng-jiangandClaude Opus 4.6 fb65384a76 [Fix] Remove deprecated o1-preview from O-series test and deduplicate is_o_series check
o1-preview is deprecated and not in the model registry with supports_reasoning=True,
causing the Azure O-series config test to fail. Also removed a duplicate is_o_series
assignment in utils.py.

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