Commit Graph
31096 Commits
Author SHA1 Message Date
Sameer KankuteandGitHub c834d7d1fe Merge branch 'main' into litellm_oss_staging_01_27_2026 2026-01-27 17:11:15 +05:30
Sameer KankuteandGitHub ea0a264a3c Merge pull request #19753 from BerriAI/litellm_oss_staging_01_26_2026
fix(proxy): support slashes in google generateContent model names (#1…
2026-01-27 17:09:12 +05:30
Sameer KankuteandGitHub 0214cb04cd Merge branch 'main' into litellm_oss_staging_01_26_2026 2026-01-27 17:00:58 +05:30
Sameer KankuteandGitHub adf6d7e1db Merge pull request #19692 from BerriAI/litellm_oss_staging_01_24_2026
Litellm oss staging 01 24 2026
2026-01-27 16:59:28 +05:30
Sameer KankuteandGitHub 9a2750f8ec Merge pull request #19617 from BerriAI/litellm_oss_staging_01_23_2026
Litellm oss staging 01 23 2026
2026-01-27 16:55:32 +05:30
Sameer Kankute f30742fe6e Fix mypy and code quality issues 2026-01-27 16:49:39 +05:30
Sameer Kankute 154ad179af Revert poetry lock 2026-01-27 16:39:56 +05:30
Sameer KankuteandGitHub bd95712a22 Merge pull request #19832 from BerriAI/litellm_fix_a2a_package
Fix: A2A Python SDK URL
2026-01-27 15:16:52 +05:30
Sameer KankuteandGitHub 13313ac2be Merge pull request #19232 from natimofeev/fix-gigachat-function-output-format
Fix: ensure function content is valid JSON for GigaChat
2026-01-27 13:02:38 +05:30
Sameer KankuteandGitHub f98eba24d4 Merge pull request #19040 from Point72/ephrimstanley/batch-list
Fix /batches to return encoded ids (from managed objects table)
2026-01-27 13:02:05 +05:30
Harshit JainandGitHub fd2f148161 fix: resolve 'does not exist' migration errors as applied in setup_database (#19281) 2026-01-26 22:11:36 -08:00
Harshit JainandGitHub a5bc98a18a fix(prometheus): safely handle None metadata in logging to prevent At… (#19691)
* fix(prometheus): safely handle None metadata in logging to prevent AttributeError

* fix: lint issues
2026-01-26 22:10:54 -08:00
Harshit JainandGitHub 885a02e6c8 fix: token calculations and refactor (#19696) 2026-01-26 22:08:17 -08:00
Cesar GarciaandGitHub e4a557d95f fix(xai): correct cached token cost calculation for xAI models (#19772)
* fix(azure): use generic cost calculator for audio token pricing

Azure audio models were charging audio output tokens at the text token
rate instead of the correct audio token rate. This resulted in costs
being ~6.65x lower than expected.

The fix replaces Azure's custom cost calculation logic with the generic
cost calculator that properly handles text, audio, cached, reasoning,
and image tokens.

Fixes #19764

* fix(xai): correct cached token cost calculation for xAI models

- Fix double-counting issue where xAI reports text_tokens = prompt_tokens
  (including cached), causing tokens to be charged twice
- Add cache_read_input_token_cost to xAI grok-3 and grok-3-mini model variants
- Detection: when text_tokens + cached_tokens > prompt_tokens, recalculate
  text_tokens = prompt_tokens - cached_tokens

xAI pricing (25% of input for cached):
- grok-3 variants: $0.75/M cached (input $3/M)
- grok-3-mini variants: $0.075/M cached (input $0.30/M)
2026-01-26 21:00:35 -08:00
Cesar GarciaandGitHub 16f456ad82 fix(azure): use generic cost calculator for audio token pricing (#19771)
Azure audio models were charging audio output tokens at the text token
rate instead of the correct audio token rate. This resulted in costs
being ~6.65x lower than expected.

The fix replaces Azure's custom cost calculation logic with the generic
cost calculator that properly handles text, audio, cached, reasoning,
and image tokens.

Fixes #19764
2026-01-26 21:00:03 -08:00
Cesar GarciaandGitHub b1968a8e33 fix(responses): update local_vars with detected provider (#19782) (#19798)
When using the responses API with provider-specific params (aws_*, vertex_*)
without explicitly passing custom_llm_provider, the code crashed with:
AttributeError: 'NoneType' object has no attribute 'startswith'

Root cause: local_vars was captured via locals() before get_llm_provider()
detected the provider from the model string (e.g., "bedrock/..."), so
custom_llm_provider remained None when processing provider-specific params.

Fix: Update local_vars["custom_llm_provider"] after get_llm_provider() call
so the detected provider is available for param processing.

Affected provider-specific params:
- aws_* (aws_region_name, aws_access_key_id, etc.) for Bedrock/SageMaker
- vertex_* (vertex_project, vertex_location, etc.) for Vertex AI
2026-01-26 20:47:35 -08:00
Cesar GarciaandGitHub 0d45b01069 fix(models): set gpt-5.2-codex mode to responses for Azure and OpenRouter (#19770)
Fixes #19754

The gpt-5.2-codex model only supports the responses API, not chat completions.
Updated azure/gpt-5.2-codex and openrouter/openai/gpt-5.2-codex entries to use
mode: "responses" and supported_endpoints: ["/v1/responses"].
2026-01-26 20:36:10 -08:00
6a54dcfa93 feat: Add model_id label to Prometheus metrics (#18048) (#19678)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-01-26 20:32:08 -08:00
Krish DholakiaandGitHub 7ba0235a50 Litellm release notes 01 26 2026 (#19838)
* docs: document new models/endpoints

* docs: cleanup

* feat: update model table

* fix: cleanup
2026-01-26 20:20:20 -08:00
Krish DholakiaandGitHub 664715b68e Litellm release notes 01 26 2026 (#19836)
* docs: document new models/endpoints

* docs: cleanup

* feat: update model table
2026-01-26 20:11:56 -08:00
yuneng-jiangandGitHub 0dea6eeea3 Merge pull request #19721 from BerriAI/litellm_ui_bulk_fix
[Fix] UI - Internal User: Bulk Add
2026-01-26 20:10:37 -08:00
yuneng-jiangandGitHub c875cfb8cb Merge pull request #19804 from BerriAI/litellm_ui_dark_mode_slider
[Feature] UI - Add Light/Dark Mode Switch for Development
2026-01-26 20:10:12 -08:00
yuneng-jiangandGitHub a97bf452f1 Merge pull request #19831 from BerriAI/litellm_ui_hide_send_feedback
[Feature] UI - Feedback Prompts: Option To Hide Prompts
2026-01-26 20:10:04 -08:00
yuneng-jiangandGitHub a7712ff8ef Merge pull request #19807 from BerriAI/litellm_ui_regen_expiry
[Fix] UI - Create Key: Expire Key Input Duration
2026-01-26 20:09:39 -08:00
Cesar GarciaandGitHub 014f783cc9 docs(readme): add OpenAI Agents SDK to OSS Adopters (#19820)
* docs(readme): add OpenAI Agents SDK to OSS Adopters

* docs(readme): add OpenAI Agents SDK logo
2026-01-26 19:24:46 -08:00
Ishaan JaffandGitHub 52d73c2c16 [Feat] Add UI for /rag/ingest API - upload docs, pdfs etc to create vector stores (#19822)
* feat: _save_vector_store_to_db_from_rag_ingest

* UI features for RAG ingest

* fix: Endpoints

* ragIngestCall

* _save_vector_store_to_db_from_rag_ingest

* fix: rag_ingest Code QA CHECK

* UI fixes unit tests
2026-01-26 19:23:43 -08:00
Sameer Kankute c70d04d85f Fix: A2A Python SDK URL 2026-01-27 08:07:36 +05:30
yuneng-jiang aa4b3ba87a Adding tests: 2026-01-26 17:53:01 -08:00
Alexsander HamirandGitHub f95572e3ed Fix broken mocks in 6 flaky tests to prevent real API calls (#19829)
* Fix broken mocks in 6 flaky tests to prevent real API calls

Added network-level HTTP blocking using respx to prevent tests from making real API calls when Python-level mocks fail. This makes tests more reliable and retryable in CI.

Changes:

- Azure OIDC test: Added Azure Identity SDK mock to prevent real Azure calls

- Vector store test: Added @respx.mock decorator to block HTTP requests

- Resend email tests (3): Added @respx.mock decorator for all 3 test functions

- SendGrid email test: Added @respx.mock decorator

All test assertions and verification logic remain unchanged - only added safety nets to catch leaked API calls.

* Fix failing OIDC secret manager tests

Fixed two test failures in test_secret_managers_main.py:

1. test_oidc_azure_ad_token_success: Corrected the patch path for get_bearer_token_provider from 'litellm.secret_managers.get_azure_ad_token_provider.get_bearer_token_provider' to 'azure.identity.get_bearer_token_provider' since the function is imported from azure.identity.

2. test_oidc_google_success: Added @patch('httpx.Client') decorator to prevent any real HTTP connections during test execution, resolving httpx.ConnectError issues.

Both tests now pass successfully.
2026-01-26 17:39:40 -08:00
c442fcd922 CI/CD: Increase retries and stabilize litellm_mapped_tests_core (#19826)
* Fix PLR0915: Extract system message handling to reduce statement count

* fix mypy

* fix: add host_progress_callback parameter to mock_call_tool in test

The test_call_tool_without_broken_pipe_error was failing because the mock function did not accept the host_progress_callback keyword argument that the actual implementation passes to client.call_tool(). Updated the mock to accept this parameter to match the real implementation signature.

* fixing flaky tests around oidc and email

* Add documentation comment to test file

* add retry

* add dependency

* increase retry

---------

Co-authored-by: yuneng-jiang <yuneng.jiang@gmail.com>
2026-01-26 17:00:18 -08:00
yuneng-jiang 9ff0daa24d Add dont ask me again option in nudges 2026-01-26 16:58:38 -08:00
mubashir1osmaniandGitHub 8908eff7b1 Fix(#19781): Unable to reset user max budget to unlimited
Fix(#19781): Unable to reset user max budget to unlimited
2026-01-26 18:37:49 -05:00
yuneng-jiangandGitHub 801e0a6ce6 Merge pull request #19819 from BerriAI/litellm_cd_fix_yj_10
[Infra] CI/CD - Fixing Flaky Tests in OIDC and Email
2026-01-26 15:29:55 -08:00
mubashir1osmaniandGitHub 5d973477e6 fix(ui): prevent clearing content filter patterns when editing guardrail
fix(ui): prevent clearing content filter patterns when editing guardrail
2026-01-26 18:29:48 -05:00
yuneng-jiang 33b4b444ac fixing flaky tests around oidc and email 2026-01-26 15:23:17 -08:00
Ishaan JaffandGitHub cec1a3c858 [Feat] CLI Auth - Add configurable CLI JWT expiration via environment variable (#19780)
* fix: add CLI_JWT_EXPIRATION_HOURS

* docs: CLI_JWT_EXPIRATION_HOURS

* fix: get_cli_jwt_auth_token

* test_get_cli_jwt_auth_token_custom_expiration
2026-01-26 14:56:17 -08:00
houdataaliandGitHub 29ee5aab5c [Feat] enable progress notifications for MCP tool calls (#19809)
* enable progress notifications for MCP tool calls

* adjust mcp test
2026-01-26 14:48:22 -08:00
colinlin-stripeandGitHub 7605062e94 Messages api bedrock converse caching and pdf support (#19785)
* cache control for user messages and system messages

* add cache createion tokens in reponse

* cache controls in tool calls and assistant turns

* refactor with _should_preserve_cache_control

* add cache control unit tests

* use simpler cache creation token count logic

* use helper function

* remove unused function

* fix unit tests
2026-01-26 13:19:56 -08:00
yuneng-jiang 56c470f064 fix key duration input 2026-01-26 12:03:33 -08:00
yuneng-jiang 9791293fb0 Add light/dark mode slider for dev 2026-01-26 11:22:14 -08:00
Alexsander HamirandGitHub f2c3a01a57 fix: make HTTPHandler mockable in OIDC secret manager tests (#19803)
* fix: make HTTPHandler mockable in OIDC secret manager tests

- Add _get_oidc_http_handler() factory function to make HTTPHandler
  easily mockable in tests
- Update test_oidc_github_success to patch factory function instead
  of HTTPHandler directly
- Update Google OIDC tests for consistency
- Fixes test_oidc_github_success failure where mock was bypassed

This change allows tests to properly mock HTTPHandler instances used
for OIDC token requests, fixing the test failure where the mock was
not being used.

* fix: patch base_llm_http_handler method directly in container tests

- Use patch.object to patch container_create_handler method directly
  on the base_llm_http_handler instance instead of patching the module
- Fixes test_provider_support[openai] failure where mock wasn't applied
- Also fixes test_error_handling_integration with same approach

The issue was that patching 'litellm.containers.main.base_llm_http_handler'
didn't work because the module imports it with 'from litellm.main import',
creating a local reference. Using patch.object patches the method on the
actual object instance, which works regardless of import style.

* fix: resolve flaky test_openai_env_base by clearing cache

- Add cache clearing at start of test_openai_env_base to prevent cache pollution
- Ensures no cached clients from previous tests interfere with respx mocks
- Fixes intermittent failures where aiohttp transport was used instead of httpx
- Test-only change with low risk, no production code modifications

Resolves flaky test marked with @pytest.mark.flaky(retries=3, delay=1)
Both parametrized versions (OPENAI_API_BASE and OPENAI_BASE_URL) now pass consistently

* test: add explicit mock verification in test_provider_support

- Capture mock handler with 'as mock_handler' for explicit validation
- Add assert_called_once() to verify mock was actually used
- Ensures test verifies no real API calls are made
- Follows same pattern as test_openai_env_base validation
2026-01-26 11:00:42 -08:00
Alexsander HamirandGitHub a8e72950db Fix test_mcp_server_manager_config_integration_with_database cancellation error (#19801)
Mock _create_mcp_client to avoid network calls in health checks.
This prevents asyncio.CancelledError when the test teardown closes
the event loop while health checks are still pending.

The test focuses on conversion logic (access_groups, description)
not health check functionality, so mocking the network call is appropriate.
2026-01-26 10:52:49 -08:00
Alexsander HamirandGitHub 4a6dcf3012 Add test for Router.get_valid_args, fix router code coverage encoding (#19797)
- Add test_get_valid_args in test_router_helper_utils.py to cover get_valid_args
- Use encoding='utf-8' in router_code_coverage.py for cross-platform file reads
2026-01-26 10:14:58 -08:00
Alexsander HamirandGitHub c0d6998384 Make test_get_users_key_count deterministic by creating dedicated test user (#19795)
- Create a test user with auto_create_key=False to ensure known starting state
- Filter get_users by user_ids to target only the test user
- Verify initial key count is 0 before creating a key
- Clean up test user after test completes
- This ensures consistent behavior across CI and local environments
2026-01-26 10:13:15 -08:00
yogeshwaran10 228aff9b9f Fix user max budget reset to unlimited
- Added a Pydantic validator to convert empty string inputs for max_budget to None, preventing float parsing errors from the frontend.
- Modified the internal user update logic to explicitly allow max_budget to be None, ensuring the value isn't filtered out and can be reset to unlimited in the database.
- Added unit tests for validation and logic.

 Closes #19781
2026-01-26 23:30:36 +05:30
Alexsander HamirandGitHub de3bbc216d refactor: extract transport context creation into separate method (#19794) 2026-01-26 09:57:53 -08:00
Harshit JainandGitHub b920be3ee7 fix: server rooth path (#19790) 2026-01-26 09:48:06 -08:00
Alexsander HamirandGitHub 8ece284ca3 bump: version 1.81.3 → 1.81.4 (#19793) 2026-01-26 09:41:25 -08:00
Ephrim Stanley 88280d9cca Fix batch creation to return the input file's expires_at attribute 2026-01-26 12:02:35 -05:00
558f01e848 fix(proxy): use return value from CustomLogger.async_post_call_success_hook (#19670)
* fix(proxy): use return value from CustomLogger.async_post_call_success_hook

Previously the return value was ignored for CustomLogger callbacks,
preventing users from modifying responses. Now the return value is
captured and used to replace the response (if not None), consistent
with CustomGuardrail and streaming iterator hook behavior.

Fixes issue with custom_callbacks not being able to inject data into
LLM responses.

* fix(proxy): also fix async_post_call_streaming_hook to use return value

Previously the streaming hook only used return values that started with
"data: " (SSE format). Now any non-None return value is used, consistent
with async_post_call_success_hook and streaming iterator hook behavior.

Added tests for streaming hook transformation.

---------

Co-authored-by: Gabriele Michelli <michelligabriele0@gmail.com>
2026-01-26 08:48:22 -08:00