litellm/tests
Pujitha Paladugu 3325ea487f
fix(prompt-management): compose vector store retrieval with anthropic cache control hook
Motivation:
With litellm.enable_anthropic_prompt_caching on, Logging.get_custom_logger_for_prompt_management
picked exactly one prompt-management hook per request via first-match-wins branching. The
AnthropicCacheControlHook branch, seeded by main.py's maybe_seed_default_injection_points, matched
before the vector store branch, so a model configured with vector_store_ids never ran its
knowledge-base retrieval. vector_store_ids was never popped from the request params and was
serialized straight into the provider body, which rejects it (e.g. Bedrock's "vector_store_ids:
Extra inputs are not permitted"). The same starvation applies whenever a model carries explicit
cache_control_injection_points, independent of the flag.

Approach:
Logging.async_get_chat_completion_prompt now also runs the vector store hook, ahead of the selected
AnthropicCacheControlHook, whenever the registry has vector stores to run for the request. Vector
store retrieval runs first so it can inject knowledge-base context and pop vector_store_ids before
the cache-control hook stamps breakpoints onto the augmented messages. Extracted the singleton
lookup and callback registration for the vector store hook into a small
_get_vector_store_pre_call_hook helper shared by the existing selector and the new composition path.
The sync get_chat_completion_prompt path is untouched: VectorStorePreCallHook only implements the
async variant, so vector store retrieval was already async-only before this change.

Validation:
Added test_prompt_hooks_compose_vector_search_with_anthropic_cache_control to
tests/test_litellm/litellm_core_utils/test_litellm_logging.py. It seeds
cache_control_injection_points the same way main.py does, registers a vector store, and asserts the
search hook is awaited, vector_store_ids and cache_control_injection_points are both consumed, the
retrieved context is prepended to the messages, and the cache_control breakpoint still lands on the
trailing user message. Confirmed the test fails on the pre-fix code (search mock never awaited) and
passes after the fix.

Ran:
- uv run pytest tests/test_litellm/litellm_core_utils/test_litellm_logging.py -v (303 passed, 1
  pre-existing failure unrelated to this change: TestAnthropicPassthroughCustomPricing::
  test_completion_cost_receives_custom_pricing_args fails on a clean tree too, from a missing
  orjson dependency in this sandbox)
- uv run pytest tests/test_litellm/integrations/test_anthropic_cache_control_hook.py
  tests/test_litellm/integrations/vector_store_integrations/test_vector_store_pre_call_hook.py -q
  (234 passed, 2 pre-existing failures unrelated to this change: both fail identically on a clean
  tree from a missing websockets dependency in this sandbox)
- make lint (ruff, ruff-strict-gate, type-discipline-gate, test-quality-gate, type-check-gate,
  basedpyright, circular-import check): all checks passed with no new budget regressions

Report: https://github.com/BerriAI/litellm/issues/40908
Signed-off-by: Pujitha Paladugu <10557236+pujitha24@users.noreply.github.com>
Assisted-by: claude-sonnet-5 (via Claude Code)
2026-10-04 06:50:03 -07:00
..
_support fix(params): validate stream_chunk_size once, before any provider call (#43222) 2026-09-26 23:01:20 +00:00
agent_tests
audio_tests test: remove 130 legacy tests owned by stronger unit proofs (#44157) 2026-10-02 10:18:50 -07:00
base_sdk_tests fix(mcp): explain missing public client dependencies 2026-09-19 19:52:13 -07:00
basic_proxy_startup_tests
batches_tests test(e2e): move live-provider legacy tests into tests/e2e (#44120) 2026-10-02 00:02:18 -07:00
benchmarks feat(tokenizer): preserve Python defaults with opt-in Rust dispatch (#42174) 2026-09-22 04:41:11 +00:00
code_coverage_tests feat(sdk): add run_tool_loop and arun_tool_loop helpers (#44381) 2026-10-03 20:10:30 -07:00
documentation_tests fix(s3_v2): upload fresh events first, drop terminal failures and hour-old retries by default, opt-in adaptive concurrency (#43022) 2026-09-26 14:58:28 -07:00
e2e test(ci): fix six CircleCI test regressions on main (#44429) 2026-10-03 20:55:01 -07:00
guardrails_tests test(e2e): move live-provider legacy tests into tests/e2e (#44120) 2026-10-02 00:02:18 -07:00
harness_e2e feat: add litellm.agent() to run claude code, codex, opencode and deep agents through the ai gateway (#43885) 2026-10-01 22:27:49 +00:00
image_gen_tests test: remove 130 legacy tests owned by stronger unit proofs (#44157) 2026-10-02 10:18:50 -07:00
integration feat(mcp): hand listed-tool description and input schema to pre-call hooks per caller (#41162) 2026-10-04 00:53:58 -07:00
litellm_utils_tests fix(ci): stop stale CI reds, keep unit tests off the host env, retry CyberArk policy conflicts (#43294) 2026-09-26 09:25:13 -07:00
llm_responses_api_testing test: remove 130 legacy tests owned by stronger unit proofs (#44157) 2026-10-02 10:18:50 -07:00
llm_translation test: remove 130 legacy tests owned by stronger unit proofs (#44157) 2026-10-02 10:18:50 -07:00
load_tests
local_testing test: repair stale and polluting tests red on scheduled main CI (#44229) 2026-10-02 21:32:17 +00:00
logging_callback_tests fix(proxy): emit postgres service spans only on real DB reads in auth cache helpers (#44148) 2026-10-03 09:20:27 -07:00
mcp_tests fix(mcp): preserve upstream tool schemas and parameter headers (#44425) 2026-10-03 15:00:43 -07:00
multi_instance_e2e_tests
ocr_tests refactor(ocr): remove the Python OCR execution path and require the Rust route (#43081) 2026-09-24 18:18:50 -07:00
openai_endpoints_tests test: remove 130 legacy tests owned by stronger unit proofs (#44157) 2026-10-02 10:18:50 -07:00
otel_tests test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
pass_through_tests
pass_through_unit_tests feat: add Bespoke Nimble gateway and OSS classifier support (#44246) 2026-10-02 19:37:08 -07:00
proxy_admin_ui_tests
proxy_behavior feat(lens): coordinate worker releases and bundled installs (#44428) 2026-10-03 16:33:45 -07:00
proxy_e2e_anthropic_messages_tests
proxy_migration_tests fix(proxy-extras): bound the lock waits of the partitioned SpendLogs index build (#44109) 2026-10-01 18:28:50 -07:00
proxy_security_tests refactor(proxy): rename the local development override to dangerously_permit_weak_or_unset_master_key so the name says exactly what it permits 2026-09-19 18:53:14 -07:00
proxy_unit_tests ci: move tests/proxy_unit_tests to tests/unit/proxy and run the proxy-db shards from litellm-tests (#42903) 2026-09-24 22:59:11 +00:00
router_unit_tests fix(ci): stop stale CI reds, keep unit tests off the host env, retry CyberArk policy conflicts (#43294) 2026-09-26 09:25:13 -07:00
rust-python-harness refactor(ocr): remove the Python OCR execution path and require the Rust route (#43081) 2026-09-24 18:18:50 -07:00
search_tests fix(cost-map): retirement dates, chatgpt reasoning flags, bing pricing, bedrock mantle and mythos, azure gpt-5.6 alias, anthropic batch rates, new nebius, openrouter and xai rows (#42951) 2026-09-25 19:12:36 -07:00
spend_tracking_tests test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
store_model_in_db_tests test(ci): fix six CircleCI test regressions on main (#44429) 2026-10-03 20:55:01 -07:00
test_litellm fix(tracing): preserve spend identity and gateway correlation (#44421) 2026-10-03 16:00:49 -07:00
test_litellm_rust feat: improve Lens dev seeding and live UI (#44468) 2026-10-04 01:03:11 +00:00
unified_google_tests test: remove 130 legacy tests owned by stronger unit proofs (#44157) 2026-10-02 10:18:50 -07:00
unit fix(prompt-management): compose vector store retrieval with anthropic cache control hook 2026-10-04 06:50:03 -07:00
vector_store_tests
windows_tests fix(packaging): keep wheel paths under Windows MAX_PATH for Store Python (#43903) 2026-09-30 22:20:36 +00:00
__init__.py
_fake_openai_endpoint_server.py
_flush_vcr_cache.py
_live_test_helpers.py
_openai_record_replay_proxy.py
_process_helpers.py test: count a zombie grandchild as gone in the migrate deploy timeout test (#42570) 2026-09-22 14:59:26 -07:00
_vcr_conftest_common.py fix(tests): stop VCR recording and replaying a test's own localhost upstream (#43346) 2026-09-26 15:49:39 -07:00
_vcr_redis_persister.py
_wait_helpers.py
_ws_vcr.py
AGENTS.md ci(tests): wire tests/unit into CircleCI and drain legacy unit shards green 2026-09-20 07:05:42 +00:00
capturing_transport.py test(vcr): guard leaked cassette patches and make injected-transport embedding tests immune (#42542) 2026-09-22 14:20:18 -07:00
eval_swe_bench.py
fake_openai_endpoint.py
gettysburg.wav
large_text.py
openai_batch_completions.jsonl
pyrightconfig.json
README.MD test: finish the non-proxy half of tests/test_litellm (#43281) 2026-09-25 22:43:41 -07:00
test_anthropic_compaction_usage.py
test_budget_management.py
test_callbacks_on_proxy.py
test_debug_warning.py
test_default_encoding_non_root.py
test_end_users.py test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
test_fallbacks.py test(e2e): move live-provider legacy tests into tests/e2e (#44120) 2026-10-02 00:02:18 -07:00
test_gpt5_azure_temperature_support.py
test_health.py
test_keys.py test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
test_litellm_proxy_responses_config.py
test_logging.conf
test_models.py test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
test_new_vector_store_endpoints.py
test_openai_endpoints.py test: remove 130 legacy tests owned by stronger unit proofs (#44157) 2026-10-02 10:18:50 -07:00
test_otel_thread_leak.py
test_presidio_latency.py
test_proxy_server_non_root.py
test_ratelimit.py test(proxy): delete the legacy proxy test tree and shard tests/unit/proxy by glob (#44018) 2026-10-01 11:40:45 -07:00
test_resource_cleanup.py
test_rust_python_harness.py test: fix stale and state-leaking tests red on scheduled CircleCI (#43266) 2026-09-25 19:10:20 -07:00
test_service_logger_otel.py
test_spend_logs.py test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
test_team.py test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
test_team_logging.py
test_team_members.py test(proxy): move management_endpoints, management_helpers and guardrails tests into tests/unit/proxy (#44003) 2026-10-01 10:52:03 -07:00
test_users.py test(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
white_100x100.png test: stop CI tests from downloading tokenizer files and images (#43257) 2026-09-25 19:27:48 -07:00

In total litellm runs 1000+ tests

[02/20/2025] Update:

To make it easier to contribute and map what behavior is tested,

we've started mapping the litellm directory in tests/unit

This folder can only run mock tests.