litellm/tests/llm_translation
devin-ai-integration[bot] 805bb6888b
test: make 38 legacy live base-class translation tests offline (#45351)
* test: make 38 legacy live base-class translation tests offline

* test: tighten offline base-class translation test assertions

* test: cover remaining nova invoke and xai base copies offline

* test: assert outbound bodies, restore dropped providers and fix shared tool dict mutation in base chat translation tests

* test: assert outbound thinking bodies and streamed thinking blocks across anthropic and bedrock converse

* test: restore volcengine/voyage max_retries and openai timestamp_granularities coverage, assert rerank id/meta/cost and scope the interactions transport fixture

* test: call the raw provider helper for thinking stream cases

* test: flatten thinking blocks before collecting signatures

---------

Co-authored-by: yuneng <yuneng@berri.ai>
2026-10-08 23:18:25 +00:00
..
fixtures test fix 2025-10-16 18:00:46 -07:00
interactions test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
realtime test: delete 34 legacy tests already covered by e2e (#45340) 2026-10-08 09:43:56 -07:00
reasoning_effort_grid test(reasoning-effort-grid): bump the cell count for the four new Fable 5.1 cells 2026-09-01 18:28:33 +00:00
test-skill [Feat] New API - Claude Skills API (Anthropic) (#17042) 2025-11-24 15:01:40 -08:00
test_llm_response_utils test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_skills_data Remove Apache 2 license from SKILL.md (#22322) 2026-02-27 19:33:55 -08:00
base_audio_transcription_unit_tests.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
base_embedding_unit_tests.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
base_llm_unit_tests.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
base_rerank_unit_tests.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
conftest.py test(vcr): guard leaked cassette patches and make injected-transport embedding tests immune (#42542) 2026-09-22 14:20:18 -07:00
databricks_config.template.txt test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
dog.wav (feat) Support audio param in responses streaming (#6312) 2024-10-18 19:16:14 +05:30
duck.png fix vertex ai multimodal embedding translation (#9471) 2025-03-24 23:23:28 -07:00
gettysburg.wav Litellm dev 12 25 2025 p2 (#7420) 2024-12-25 18:35:34 -08:00
guinea.png fix vertex ai multimodal embedding translation (#9471) 2025-03-24 23:23:28 -07:00
log.xt Litellm dev 04 05 2025 p2 (#9774) 2025-04-07 21:02:52 -07:00
Readme.md test: delete 34 legacy tests already covered by e2e (#45340) 2026-10-08 09:43:56 -07:00
test_a2a.py test: drop the cwd-relative sys.path.insert calls from the test suite (#37802) 2026-08-22 09:25:58 -07:00
test_anthropic_completion.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_azure_agents.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_azure_ai.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_azure_o_series.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_azure_openai.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_bedrock_agentcore.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_bedrock_completion.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_bedrock_embedding.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_bedrock_gpt_oss.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_bedrock_invoke_tests.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_bedrock_llama.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_bedrock_moonshot.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_bedrock_nova_embedding.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_bedrock_nova_json.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_cloudflare.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_cohere.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_cometapi_chat_transformation.py test: move whole-unit legacy test files into tests/unit and delete dead skips (#44807) 2026-10-07 05:02:28 +00:00
test_compression.py test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
test_databricks.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_deepgram.py test: drop the cwd-relative sys.path.insert calls from the test suite (#37802) 2026-08-22 09:25:58 -07:00
test_deepseek_completion.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_elevenlabs.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_evals_api.py test: delete 73 legacy tests covered by e2e, unable to fail, or dead in CI (#45195) 2026-10-07 17:11:36 -07:00
test_fireworks_ai_translation.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_gemini.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_gpt4o_audio.py refactor: expose core private helpers under public names (#44871) 2026-10-07 00:05:27 +00:00
test_groq.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_hosted_vllm_embedding_e2e.py test: drop the cwd-relative sys.path.insert calls from the test suite (#37802) 2026-08-22 09:25:58 -07:00
test_huggingface_chat_completion.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_jina_ai.py test: drop the cwd-relative sys.path.insert calls from the test suite (#37802) 2026-08-22 09:25:58 -07:00
test_json_providers.py test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
test_lambda_ai.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_litellm_proxy_provider.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_mistral_api.py test: delete 73 legacy tests covered by e2e, unable to fail, or dead in CI (#45195) 2026-10-07 17:11:36 -07:00
test_mistral_audio_transcription_transformation.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_nvidia_nim.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_openai.py test: delete 73 legacy tests covered by e2e, unable to fail, or dead in CI (#45195) 2026-10-07 17:11:36 -07:00
test_openai_o1.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_openrouter.py refactor: expose core private helpers under public names (#44871) 2026-10-07 00:05:27 +00:00
test_optional_params.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_ovhcloud_audio_transcription_transformation.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_ovhcloud_chat_transformation.py test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
test_prompt_caching.py test: drop the cwd-relative sys.path.insert calls from the test suite (#37802) 2026-08-22 09:25:58 -07:00
test_prompt_factory.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_replicate.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_rerank.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_router_llm_translation_tests.py test: delete 73 legacy tests covered by e2e, unable to fail, or dead in CI (#45195) 2026-10-07 17:11:36 -07:00
test_skills_api.py refactor: expose core private helpers under public names (#44871) 2026-10-07 00:05:27 +00:00
test_text_completion.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_together_ai.py test: make 38 legacy live base-class translation tests offline (#45351) 2026-10-08 23:18:25 +00:00
test_triton.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_unit_test_bedrock_invoke.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_v0.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_vcr_classification.py test: move the unit half of 126 mixed legacy files into tests/unit (#45090) 2026-10-07 14:07:43 -07:00
test_vertex_ai_image_generation_transformation.py test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
test_xai.py test: delete 73 legacy tests covered by e2e, unable to fail, or dead in CI (#45195) 2026-10-07 17:11:36 -07:00
test_xiaomi_mimo.py test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00

Unit tests for individual LLM providers.

Name of the test file is the name of the LLM provider - e.g. test_openai.py is for OpenAI.

Redis-backed VCR cache

Every test in this directory is auto-decorated with @pytest.mark.vcr (via conftest.py). The first time a test runs we hit the live provider and record the HTTP exchange into Redis under litellm:vcr:cassette:<test_id>. Every subsequent run within 24h replays from Redis without touching the network. The 24h TTL means each new day's first run records again, so upstream API drift surfaces within a day.

The persister, header scrubbing, and 2xx-only filtering are defined in tests/_vcr_redis_persister.py. Files that already use respx (which patches the same httpx transport vcrpy does) are excluded from the auto-marker — see _RESPX_CONFLICTING_FILES in conftest.py.

Requests to localhost, 127.0.0.1, or 0.0.0.0 are never recorded or replayed (ignore_localhost in vcr_config_dict()): a server the test process starts itself on an ephemeral port is not a provider, and a cassette entry for it would replay against whichever later test lands on that port

The same VCR cache is used by other test directories that exercise live provider APIs. The reusable conftest plumbing lives in tests/_vcr_conftest_common.py and is wired into:

  • tests/llm_translation/
  • tests/audio_tests/
  • tests/batches_tests/
  • tests/guardrails_tests/
  • tests/image_gen_tests/
  • tests/litellm_utils_tests/
  • tests/local_testing/ (covers local_testing_part1, local_testing_part2, litellm_router_testing, litellm_assistants_api_testing, langfuse_logging_unit_tests)
  • tests/logging_callback_tests/
  • tests/pass_through_unit_tests/
  • tests/router_unit_tests/
  • tests/unified_google_tests/

Test directories that run LiteLLM proxy in Docker (e.g. build_and_test, proxy_logging_guardrails_model_info_tests, proxy_store_model_in_db_tests) are intentionally not included: VCR.py patches the in-process httpx transport, so it cannot intercept the LLM calls that originate inside the Docker container.

Required environment

CASSETTE_REDIS_URL — separate Redis instance from the application Redis (REDIS_URL/REDIS_HOST) so test cassettes are not flushed by proxy tests. Provider credentials (ANTHROPIC_API_KEY, OPENAI_API_KEY, AWS_*, etc.) are needed only on cache-miss (the daily re-record), not on replay.

Flushing the cache

When you want the next run to re-record immediately instead of waiting for the 24h TTL:

make test-llm-translation-flush-vcr-cache

Disabling VCR

Skip the cache entirely (every call goes live, no recording):

LITELLM_VCR_DISABLE=1 uv run pytest tests/llm_translation/test_<file>.py