litellm/tests/local_testing
minijeong-log 9f68081f6d
feat: Add built-in migration lock to prevent concurrent Prisma migrate deploy (#14440)
* feat: prisma migrate deploy with lock
Author: Mini Jeong <mini.jeong@navercorp.com>

* fix: use redis cache from proxy server
Author: Mini Jeong <mini.jeong@navercorp.com>

* fix: add type checks and fix unit tests for migration lock

- Add DATABASE_URL validation in _create_baseline_migration() and _resolve_all_migrations()
- Fix MyPy type errors by adding None checks before using database_url in subprocess calls
- Add _resolve_all_migrations mock to failing unit tests to prevent filesystem errors
- Apply Black formatting to modified files

Fixes:
- MyPy type errors: database_url could be None when passed to subprocess
- Unit test failures: _resolve_all_migrations tried to create directories in read-only /test path

* fix: resolve MyPy type error in vertex_ai vertex_llm_base

Fix MyPy type checking error where vertex_api_version parameter type
was incompatible with function signature expectation.

* fix: Return 403 exception when calling GET responses api

* fix: added new step into rotate master key function for processing credentials table

* Add redisvl in requirements.txt

* fix: fixed the issue of handling root paths when processing Discovery protected resource metadata and authorization server metadata URLs.

* fix: added additional grant type into oauth_authorization_server response for fixing mcp auth register bad request issue

* fix: added RFC RECOMMENDED property(scopes_supported) to protected resource and authorization server metadata

* fix: removed initialize the tool name to MCP server name mapping(oauth2) on startup for avoiding 401 error

* fix: upgraded mcp sdk depency version for fixing ClosedResourceError

* Use already configured opentelemetry providers

Users that instrument using opentelemetry-instrument can now setup exporters as per their environment.

* Handle all protocols for all telemetry

* Add more tests

* feat(mcp): parallelize tool fetching from multiple MCP servers (#18627)

* feat(mcp): parallelize tool fetching from multiple MCP servers

Replace sequential tool fetching with asyncio.gather() to reduce
client timeouts when using multiple MCP servers.

Changes:
- mcp_server_manager.py: list_tools() now fetches tools in parallel
- server.py: _get_tools_from_mcp_servers() now fetches tools in parallel

Real-world impact (7 MCP servers example):
- Sequential: ~4.5+ seconds (exceeds typical 5-second client timeouts)
- Parallel: ~1.2 seconds (max of all servers)

Fixes #18626

* fix: copy oauth2_headers to avoid shared dict mutation in parallel tasks

* feat: add display_name, model_vendor, and model_version metadata

* added the option of adding langsmith tenant id in the env (#18623)

* fix(router): Validate routing_strategy at startup to fail fast with helpful error. (#18624)

Invalid routing_strategy values (e.g., "simple" instead of "simple-shuffle") previously failed silently, causing confusing "No deployments available" errors downstream. This change adds upfront validation in routing_strategy_init() to:

- Check if the provided strategy matches valid string values or RoutingStrategy enum
- Raise a clear ValueError listing valid options if invalid
- Fail fast at startup instead of at request time

Fixes behavior reported in #11330 where users had to debug cryptic errors.

Valid strategies: simple-shuffle, least-busy, usage-based-routing, latency-based-routing, cost-based-routing, usage-based-routing-v2

Co-authored-by: Flibbert E. Gibbitz <flibbertygibbitz@runelabs.ai>

* Add libsndfile to database Docker image for audio processing (#18612)

The litellm-database Docker image was missing the libsndfile system
library, which is required by the soundfile Python package for audio
file processing. This caused failures when using audio transcription
endpoints that attempt to calculate audio duration.

This adds libsndfile to the runtime dependencies in Dockerfile.database,
consistent with Dockerfile.alpine which already includes this library.

* Fix: Map Gemini cached_tokens to Langfuse cache_read_input_tokens (#18614)

* Fix: Map Gemini cached_tokens to Langfuse cache_read_input_tokens

Fixes #18520

## Problem
Langfuse integration was not capturing cached tokens from Gemini models.
Gemini returns cached tokens in `usage.prompt_tokens_details.cached_tokens`,
but Langfuse only read from top-level `usage.cache_read_input_tokens`
(which only Anthropic populates).

## Solution
Updated langfuse.py to check both locations:
1. First check top-level cache_read_input_tokens (for Anthropic)
2. Then check prompt_tokens_details.cached_tokens (for Gemini, OpenAI, others)

This ensures all providers' cached tokens are properly reported to Langfuse.

## Changes
- Modified litellm/integrations/langfuse/langfuse.py (lines 742-761)
- Added 3 unit tests in tests/test_litellm/integrations/langfuse/test_gemini_cached_tokens.py
- All existing Langfuse tests still pass (11/11)

## Testing
- test_cached_tokens_extraction: Verifies Gemini cached_tokens extraction
- test_cached_tokens_not_present: Backward compatibility (no cached_tokens)
- test_cached_tokens_is_zero: Edge case when cached_tokens = 0

* Refactor: Extract cache token logic into helper function

Address review feedback from @officer47p

- Created _extract_cache_read_input_tokens() helper function
- Reduces code bloat in _log_langfuse_v2 method
- Improves testability and reusability
- All tests still passing (11/11)

* Adding Role Mappings

* Fixing Edit SSO Settings Modal

* feat: add user_mcp_management_mode for view_all visibility

* Fixing tests

* fix: missing mcp_allow_all_ui.png

* docs: add user_mcp_management_mode

* Align responses API streaming hooks with chat pipeline

* Clarify responses API streaming context

* Address review comments

* feat: Add GigaChat provider support (#18564)

* feat: Add GigaChat provider support

Add native support for GigaChat API (Sber AI, Russia's leading LLM).

Supported features:
- Chat completions (sync/async)
- Streaming (sync/async)
- Function calling / Tools
- Structured output via JSON schema (emulated through function calls)
- Image input (base64 and URL)
- Embeddings

Closes #18515

* fix: resolve mypy type errors in GigaChat handler

- Fix _prepare_file_data return type (use 3-tuple for cleaner type flow)
- Add type annotations for lists in _process_content_parts methods
- Add type annotations in _collapse_user_messages
- Use ChatCompletionToolCallChunk for proper tool_use typing
- Add type: ignore[override] for astreaming async generator

* refactor(gigachat): migrate to BaseConfig pattern

* fix: remove unused imports

* fix: resolve mypy type errors

* fix: mypy type errors

* refactor: address review feedback for GigaChat provider

- Remove singleton pattern, reuse litellm HTTPHandler
- Move constants/errors to transformation files, delete common_utils.py
- Add models to model_prices_and_context_window.json
- Fix ssl_verify not passed to HTTP client for embeddings

* docs: update GigaChat documentation with ssl_verify requirement

* Revert "Add redisvl in requirements.txt"

* Put reasoning summary behind feat flag

* fix: model eol

* fix: anthropic claude-3-opus-20240229 EOL

* Revert "fix: model eol"

This reverts commit 5aa1665d79.

* Fix: ImportError: qualifire package is required for QualifireGuardrail. Install it with: pip install qualifire

* fix: test_secret_manager_failure_does_not_block_email

* fix: test_update_ui_settings_allowlisted_value

* fix: test_aaamodel_prices_and_context_window_json_is_valid

* fix: test_all_models_have_display_name

* fix: async def test_bedrock_apply_guardrail_blocked()

* fix: test_databricks_embeddings[True]

* fix:test_anthropic_beta_header

* fix:test_api_error_handling

* fix:mypy mcp management

* Revert "feat(model_cost): add display_name, model_vendor, and model_version metadata to model entries"

* [Feat] New API Endpoint - Responses API (v1/responses/compact) (#18697)

* init transform_compact_response_api_request

* init acompact_responses

* init async_compact_response_api_handler in llm http handler

* init transform_compact_response_api_request for openai

* init acompact_responses

* fix acompact_responses

* add OAI Compact API

* docs responses API Compact

* code qa checks

* test_openai_compact_responses_api

* fix mypy linting

* fix: remove display name

* Add the LITELLM_REASONING_AUTO_SUMMARY in doc

* fix model map

* [UI] - Feat add request provider form on UI (#18704)

* add request provider form

* fix link to github

* add button

* fix link

* fix(streaming): normalize status code extraction to prevent 4xx errors from triggering mid-stream fallback (#18698)

在流式处理错误时,添加状态码标准化逻辑,确保 4xx 客户端错误直接抛出而不是被包装成 MidStreamFallbackError。

- 新增 _normalize_status_code 函数用于从异常对象提取状态码
- 优先从异常的 status_code 属性获取,其次从 response.status_code 获取
- 当映射异常或原始异常的状态码在 400-499 范围内时,直接抛出映射异常
- 添加单元测试验证 Vertex AI 400 错误正确抛出为 BadRequestError
- 确保流式处理中的客户端错误能够正确传播,而不会触发回退机制

---------

Co-authored-by: Eric84626 <lixiannan@gmail.com>
Co-authored-by: Eric84626 <97266539+Eric84626@users.noreply.github.com>
Co-authored-by: Sameer Kankute <sameer@berri.ai>
Co-authored-by: mangabits <1457532+mangabits@users.noreply.github.com>
Co-authored-by: Costa Tsaousis <costa@tsaousis.gr>
Co-authored-by: Nik <nikolas.garza5@gmail.com>
Co-authored-by: Shivam Rawat <161387515+shivamrawat1@users.noreply.github.com>
Co-authored-by: FlibbertyGibbitz <seth@evenkeelconsultingllc.com>
Co-authored-by: Flibbert E. Gibbitz <flibbertygibbitz@runelabs.ai>
Co-authored-by: Cesar Garcia <128240629+Chesars@users.noreply.github.com>
Co-authored-by: yuneng-jiang <yuneng.jiang@gmail.com>
Co-authored-by: Yuta Saito <uc4w6c@bma.biglobe.ne.jp>
Co-authored-by: LingXuanYin <3546599908@qq.com>
Co-authored-by: YutaSaito <36355491+uc4w6c@users.noreply.github.com>
Co-authored-by: 0717376 <103773680+0717376@users.noreply.github.com>
Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
Co-authored-by: Kris Xia <xiajiayi0506@gmail.com>
Co-authored-by: Krish Dholakia <krrishdholakia@gmail.com>
2026-01-06 23:46:24 +05:30
..
.litellm_cache
auto_router [Feat] Backend Router - Add Auto-Router powered by semantic-router (#12955) 2025-07-24 18:32:56 -07:00
example_config_yaml fix tests 2025-10-25 10:19:24 -07:00
test_configs fix tests 2025-10-25 10:19:24 -07:00
test_model_response_typing
adroit-crow-413218-bc47f303efc9.json vertex testing use pathrise-convert-1606954137718 2025-01-05 14:00:17 -08:00
azure_fine_tune.jsonl
azure_speech.mp3 [Feat] Add Azure AVA TTS integration (#15749) 2025-10-20 16:52:23 -07:00
batch_job_results_furniture.jsonl
cache_unit_tests.py fix: use fastuuid helper (#14903) 2025-09-25 15:47:01 -07:00
conftest.py [Perf] Improvements for Async Success Handler (Logging Callbacks) - Approx +130 RPS (#13905) 2025-08-23 13:13:23 -07:00
create_mock_standard_logging_payload.py [Bug Fix]: Errors in LiteLLM When Using Embeddings Model with Usage-Based Routing (#7390) 2024-12-23 17:42:24 -08:00
data_map.txt
eagle.wav
example.jsonl VertexAI non-jsonl file storage support (#9781) 2025-04-09 14:01:48 -07:00
gettysburg.wav
large_text.py
model_cost.json
openai_batch_completions_router.jsonl
openai_batch_completions.jsonl
speech_vertex.mp3
stream_chunk_testdata.py
test_acompletion_fallbacks.py (core sdk fix) - fix fallbacks stuck in infinite loop (#7751) 2025-01-13 19:34:34 -08:00
test_acompletion.py Complete o3 model support (#8183) 2025-02-02 22:36:37 -08:00
test_acooldowns_router.py fix tests 2025-10-25 10:19:24 -07:00
test_add_function_to_prompt.py
test_add_update_models.py fix: use fastuuid helper (#14903) 2025-09-25 15:47:01 -07:00
test_aim_guardrails.py Fix aim security guardrail tests (#17499) 2025-12-04 13:29:20 -08:00
test_alangfuse.py Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
test_amazing_vertex_completion.py test_async_vertexai_response_basic 2025-11-01 10:58:48 -07:00
test_anthropic_prompt_caching.py remove prompt caching headers as the support has been removed 2026-01-02 11:08:35 +05:30
test_arize_ai.py Merge branch 'main' into litellm_arize_dynamic_logging 2025-03-18 22:13:35 -07:00
test_arize_phoenix.py ArizePhoenixConfig 2025-11-22 09:28:37 -08:00
test_assistants.py _add_azure_related_dynamic_params 2025-10-25 11:11:36 -07:00
test_async_fn.py test_completion_cost_databricks_embedding 2025-10-25 11:47:03 -07:00
test_auth_utils.py fix(proxy): extract model from vertex ai passthrough url pattern (#18097) 2025-12-17 11:10:14 +05:30
test_azure_content_safety.py
test_azure_openai.py test_aaaaazure_tenant_id_auth 2025-10-25 12:26:06 -07:00
test_azure_perf.py fix tests 2025-10-25 10:19:24 -07:00
test_basic_python_version.py test_package_dependencies 2025-11-22 11:20:40 -08:00
test_batch_completion_return_exceptions.py
test_batch_completions.py test fix: gcp deprecated gemini-1.5-flash 2025-08-06 08:43:45 -07:00
test_blocked_user_list.py
test_braintrust.py [Performance] Improve LiteLLM Python SDK RPS by +200 RPS (#13839) 2025-08-20 21:46:33 -07:00
test_budget_manager.py
test_caching_handler.py fix: use fastuuid helper (#14903) 2025-09-25 15:47:01 -07:00
test_caching_ssl.py fix tests 2025-10-25 10:19:24 -07:00
test_caching.py fix: mark test_caching_with_reasoning_content as flaky and handle InternalServerError (#17603) 2025-12-06 09:41:09 -08:00
test_class.py fix tests 2025-10-25 10:19:24 -07:00
test_completion_cost.py Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
test_completion_with_retries.py fix(main.py): fix retries being multiplied when using openai sdk (#7221) 2024-12-14 11:56:55 -08:00
test_completion.py feat: Add built-in migration lock to prevent concurrent Prisma migrate deploy (#14440) 2026-01-06 23:46:24 +05:30
test_config.py fix tests 2025-10-25 10:19:24 -07:00
test_cost_calc.py test(test_cost_calc.py): fix test to handle llm api errors 2024-12-24 16:49:02 -08:00
test_custom_api_logger.py
test_custom_callback_input.py claude-sonnet-4-5-20250929 fix 2025-10-31 18:20:52 -07:00
test_custom_llm.py feat(custom_llm): add image_edit and aimage_edit support (#17999) 2025-12-15 14:16:36 -08:00
test_custom_logger.py Adjusted based on comments 2025-11-07 15:02:41 -08:00
test_disk_cache_unit_tests.py
test_dual_cache.py fix: use fastuuid helper (#14903) 2025-09-25 15:47:01 -07:00
test_dynamic_rate_limit_handler.py fix: use fastuuid helper (#14903) 2025-09-25 15:47:01 -07:00
test_dynamodb_logs.py
test_embedding.py fix: Add none to encoding_format instead of omitting it 2025-12-16 13:23:15 +05:30
test_exceptions.py Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
test_file_types.py
test_function_call_parsing.py
test_function_calling.py fix img URL for tests 2025-11-22 09:41:15 -08:00
test_function_setup.py Add test for removal of thought signature 2025-12-23 14:56:42 +05:30
test_gcs_bucket.py Fix CI: Revert security scan changes and add GitGuardian ignore rules (#18358) 2025-12-22 17:03:53 -08:00
test_gcs_cache_unit_tests.py Add GCS bucket caching support (#13122) 2025-08-04 16:09:33 -07:00
test_gemini_reasoning_content.py Add thought signature for non tool call requests 2026-01-02 12:31:31 +05:30
test_get_llm_provider.py fix: test_default_api_base for ragfow 2025-12-04 21:49:33 +05:30
test_get_model_file.py
test_get_model_info.py test whitelisted models 2025-06-28 14:46:16 -07:00
test_get_optional_params_embeddings.py fix: fix test 2025-09-18 23:37:38 -07:00
test_get_optional_params_functions_not_supported.py
test_google_ai_studio_gemini.py
test_guardrails_ai.py
test_helicone_integration.py fix tests 2025-10-25 10:19:24 -07:00
test_http_parsing_utils.py test_http_parsing_utils.py 2025-07-10 18:20:41 -07:00
test_img_resize.py fix: Support WebP image format and avoid token calculation error (#7182) 2024-12-12 14:32:39 -08:00
test_lakera_ai_prompt_injection.py Merge pull request #9222 from BerriAI/litellm_snowflake_pr_mar_13 2025-03-13 21:35:39 -07:00
test_langchain_ChatLiteLLM.py
test_langsmith.py fix: use fastuuid helper (#14903) 2025-09-25 15:47:01 -07:00
test_least_busy_routing.py test: fixes because azure deactivated our account 2025-10-25 15:10:45 -07:00
test_litellm_max_budget.py
test_literalai.py
test_llm_guard.py [Refactor] Move LLM Guard, Secret Detection to Enterprise Pip packagea (#10782) 2025-05-13 09:42:22 -07:00
test_load_test_router_s3.py fix tests 2025-10-25 10:19:24 -07:00
test_loadtest_router.py fix tests 2025-10-25 10:19:24 -07:00
test_logfire.py
test_logging.py
test_longer_context_fallback.py
test_lowest_cost_routing.py fix tests 2025-10-25 10:19:24 -07:00
test_lowest_latency_routing.py fix tests 2025-10-25 10:19:24 -07:00
test_lunary.py
test_max_tpm_rpm_limiter.py
test_mem_leak.py
test_mem_usage.py fix tests 2025-10-25 10:19:24 -07:00
test_mock_request.py test_router_mock_request_with_mock_timeout_with_fallbacks 2025-09-27 13:57:43 -07:00
test_model_alias_map.py test_model_alias_map 2025-09-01 17:59:40 -07:00
test_model_max_token_adjust.py
test_multiple_deployments.py
test_ollama_local_chat.py
test_ollama_local.py
test_ollama.py [Fix] CI/CD - litellm_mapped_tests_llms | litellm_mapped_tests_core | caching_unit_tests (#18197) 2025-12-18 08:49:23 -08:00
test_openai_moderations_hook.py test_streaming_response 2025-10-31 19:10:38 -07:00
test_opik.py OpikLogger: fix the bug with not incorrect attachment to existing trace & refactor (#15529) 2025-11-05 16:29:50 -08:00
test_pass_through_endpoints.py Revert "[Fix] Security - Remove example API keys with high entropy (#18255)" 2025-12-20 20:48:11 +05:30
test_profiling_router.py
test_prometheus_service.py test_router_with_caching 2025-09-27 11:38:08 -07:00
test_prompt_caching.py claude-sonnet-4-5-20250929 fix 2025-10-31 18:20:52 -07:00
test_prompt_injection_detection.py fix tests 2025-10-25 10:19:24 -07:00
test_promptlayer_integration.py
test_provider_specific_config.py fix tests 2025-10-25 10:19:24 -07:00
test_pydantic_namespaces.py
test_pydantic.py
test_redis_batch_optimizations.py [Perf] Alexsander fixes round 2 - Oct 18th (#15695) 2025-10-18 11:12:00 -07:00
test_register_model.py Revert "test_update_model_cost_map_url" 2025-12-22 12:41:30 +05:30
test_router_auto_router.py test fix claude-sonnet-4-5-20250929 2025-10-28 19:05:13 -07:00
test_router_batch_completion.py test fix 2025-09-01 17:04:47 -07:00
test_router_budget_limiter.py claude-sonnet-4-5-20250929 fix 2025-10-31 18:20:52 -07:00
test_router_caching.py fix tests 2025-10-25 10:19:24 -07:00
test_router_client_init.py test fix 2025-10-25 16:46:29 -07:00
test_router_cooldown_handlers.py fix tests 2025-10-25 10:19:24 -07:00
test_router_custom_routing.py
test_router_debug_logs.py fix tests 2025-10-25 10:19:24 -07:00
test_router_fallback_handlers.py (Feat) - return x-litellm-attempted-fallbacks in responses from litellm proxy (#8558) 2025-02-15 14:54:23 -08:00
test_router_fallbacks.py test_router_fallbacks_with_custom_model_costs 2025-10-31 19:23:08 -07:00
test_router_get_deployments.py fix tests 2025-10-25 10:19:24 -07:00
test_router_init.py fix tests 2025-10-25 10:19:24 -07:00
test_router_max_parallel_requests.py
test_router_pattern_matching.py (code quality) run ruff rule to ban unused imports (#7313) 2024-12-19 12:33:42 -08:00
test_router_retries.py claude-sonnet-4-5-20250929 fix 2025-10-31 18:20:52 -07:00
test_router_timeout.py fix tests 2025-10-25 10:19:24 -07:00
test_router_utils.py test_router_get_deployment_credentials_with_provider 2025-11-22 10:46:12 -08:00
test_router_with_fallbacks.py
test_router.py test fix claude-sonnet-4-5-20250929 2025-10-28 19:05:13 -07:00
test_rules.py
test_sagemaker.py test: mock sagemaker tests 2025-03-21 16:21:18 -07:00
test_scheduler.py
test_secret_detect_hook.py [Refactor] Move LLM Guard, Secret Detection to Enterprise Pip packagea (#10782) 2025-05-13 09:42:22 -07:00
test_simple_shuffle.py
test_spend_calculate_endpoint.py test fix 2025-09-01 17:04:47 -07:00
test_stream_chunk_builder.py test_stream_chunk_builder_litellm_usage_chunks 2025-08-07 15:22:52 -07:00
test_streaming.py feat: Add built-in migration lock to prevent concurrent Prisma migrate deploy (#14440) 2026-01-06 23:46:24 +05:30
test_supabase_integration.py
test_team_config.py
test_text_completion.py [LLM Translation] Fix Realtime API endpoint for no intent (#13476) 2025-08-14 16:24:14 -07:00
test_timeout.py fix tests 2025-10-25 10:19:24 -07:00
test_together_ai.py
test_tpm_rpm_routing_v2.py fix tests 2025-10-25 10:19:24 -07:00
test_traceloop.py test: skip redundant test 2025-02-10 22:13:58 -08:00
test_ui_sso_helper_utils.py
test_unit_test_caching.py fix: use fastuuid helper (#14903) 2025-09-25 15:47:01 -07:00
test_update_spend.py test_batch_update_spend 2025-04-01 07:12:29 -07:00
test_validate_environment.py
test_wandb.py
user_cost.json
vertex_ai.jsonl
vertex_batch_completions.jsonl (feat) add Vertex Batches API support in OpenAI format (#7032) 2024-12-04 19:40:28 -08:00
vertex_key.json ci/cd update vertex acct 2025-01-05 13:43:32 -08:00
whitelisted_bedrock_models.txt Add supports_pdf_input: true to Claude 3.7 bedrock models (#9917) 2025-05-01 14:56:54 -07:00