litellm/tests
ryan-crabbe-berri 0235dbd7f2 fix(responses): claim a background response before the read that bills it
Every pod and uvicorn worker schedules its own CheckResponsesCost against the
shared LiteLLM_ManagedObjectTable. The poller selected eligible rows, performed
the billed retrieval, and only then marked them completed in one bulk write, so
two pollers could select the same terminal response and both record a charge
before either completion update landed.

Each row is now claimed with a compare-and-swap on batch_processed before the
read, because the read is what prices the job: aget_responses stamped with the
poll origin writes the spend log itself, so there is no later point at which to
serialize. A row whose read raised, or whose provider status is still
non-terminal, releases its claim so a later cycle retries it rather than
retiring it unbilled. That is the failure #37050 fixed on the batch side.

A pod that dies between winning the claim and billing would otherwise strand the
row: it holds a claim nobody will release and its status never reaches terminal,
so every later cycle re-selects it and loses. The updated_at arm of the claim
takes such a row back after three poll cycles, and since updated_at is @updatedAt
a healthy in-flight claim written moments ago is never stolen.

The poller now also persists the finished response onto its managed row instead
of writing status alone, so the row carries the generation's usage rather than
the stale queued copy stored at create time.

Reuses the existing batch_processed column, so no migration. It already sits on
the shared table defaulted to false and was unused by response rows.

Claude-Session: https://claude.ai/code/session_01Hn5E8Jz1LjGLFyiYxBRcBW
2026-09-15 00:37:54 +00:00
..
agent_tests
audio_tests
base_sdk_tests
basic_proxy_startup_tests
batches_tests feat(batches): enrich batch cost rows with breakdown, identity, session, and org spend 2026-09-03 17:23:53 -04:00
benchmarks
code_coverage_tests test(e2e): verify IdP readiness through real HTTP 2026-09-11 17:25:38 -07:00
documentation_tests Merge remote-tracking branch 'origin/main' into litellm_bedrock_messages_disconnect_billing 2026-08-31 08:58:37 -07:00
e2e test: decouple integration contracts from E2E coverage registry 2026-09-14 09:22:13 -07:00
enterprise fix(projects): persist explicit budget cap clears 2026-09-12 13:43:55 -07:00
guardrails_tests fix(logging): blocked requests no longer report guardrail_status=success in multi-guardrail configs (#39596) 2026-09-03 17:33:31 -07:00
image_gen_tests
integration test: preserve immutable integration observations and cleanup outcomes 2026-09-14 10:58:36 -07:00
litellm-proxy-extras fix(jwt): cascade-delete JWT key mappings when their virtual key is deleted 2026-09-09 15:39:21 -07:00
litellm_utils_tests fix(reset_budget_job): reset end users by budget link, not by user id 2026-09-10 16:57:53 -07:00
llm_responses_api_testing fix(guardrails): deliver modify_response block as valid SSE on streaming chat and Responses 2026-08-31 16:01:39 -07:00
llm_translation test: fix stale completion response fixtures 2026-09-10 17:18:56 -07:00
load_tests feat(proxy): per-worker admission control that rejects excess requests with 503 (#39352) 2026-09-03 18:19:04 -07:00
local_testing test: respect optional logging payload fields 2026-09-10 18:07:12 -07:00
logging_callback_tests Merge origin/litellm_internal_staging into litellm_spend_log_request_id_call_id 2026-09-12 21:04:25 -07:00
mcp_tests fix(mcp): reject initialize with 403 when the key grants no MCP servers (#40616) 2026-09-10 14:25:30 -07:00
multi_instance_e2e_tests
ocr_tests test(ocr): exempt native parity requests from cassette replay 2026-09-11 22:50:39 -07:00
openai_endpoints_tests test(responses): fix stale Anthropic smoke request 2026-09-11 13:56:27 -07:00
otel_tests
pass_through_tests fix(logging): key bridged /v1/messages rows on the id the caller received 2026-09-03 01:15:06 -07:00
pass_through_unit_tests feat(proxy): granular key/team access control for Claude Code marketplace plugins (#40518) 2026-09-10 14:26:09 -07:00
proxy_admin_ui_tests refactor(tests): assign the streamed id and lock poll once instead of rebinding 2026-09-03 13:49:43 -07:00
proxy_behavior test(auth): freeze prefetch cache clock so the org getter cannot miss on a slow runner 2026-09-14 18:13:49 +00:00
proxy_e2e_anthropic_messages_tests
proxy_migration_tests fix(proxy): run migrations through python -m prisma when the prisma console script is not on PATH 2026-09-09 18:17:12 -07:00
proxy_security_tests
proxy_unit_tests fix(responses): claim a background response before the read that bills it 2026-09-15 00:37:54 +00:00
router_unit_tests fix(router): record flat retry attempts and cap retries from attempted_retries 2026-09-13 01:05:51 +00:00
rust-python-harness fix(harness): skip unavailable Rust traces 2026-09-14 14:01:28 -07:00
search_tests
spend_tracking_tests
store_model_in_db_tests test(proxy): expect the sanitized unknown-model message in the spend-log error test 2026-09-11 19:18:10 -07:00
test_gateway feat(proxy): offload spend tracking to a pod-local collector sidecar (#40545) 2026-09-10 17:14:13 -07:00
test_litellm fix(responses): claim a background response before the read that bills it 2026-09-15 00:37:54 +00:00
test_litellm_rust fix(router): record flat retry attempts and cap retries from attempted_retries 2026-09-13 01:05:51 +00:00
unified_google_tests
vector_store_tests fix(vector-store): carry request metadata into the Router executor built from the router kwarg 2026-09-02 16:53:05 -07:00
windows_tests
__init__.py
_fake_openai_endpoint_server.py test(timeout): time out against the local fake endpoint instead of api.openai.com 2026-09-03 09:53:30 -07:00
_flush_vcr_cache.py
_live_test_helpers.py
_openai_record_replay_proxy.py
_vcr_conftest_common.py
_vcr_redis_persister.py
_wait_helpers.py
_ws_vcr.py
eval_swe_bench.py
fake_openai_endpoint.py
gettysburg.wav
large_text.py
openai_batch_completions.jsonl
pyrightconfig.json
README.MD
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_fallbacks.py
test_gpt5_azure_temperature_support.py
test_health.py
test_keys.py
test_litellm_proxy_responses_config.py
test_logging.conf
test_models.py test: address review notes on the chronic-test repairs 2026-09-04 10:18:15 -07:00
test_new_vector_store_endpoints.py
test_openai_endpoints.py
test_organizations.py
test_otel_thread_leak.py
test_presidio_latency.py
test_proxy_server_non_root.py
test_ratelimit.py
test_resource_cleanup.py
test_rust_python_harness.py test: address review notes on the chronic-test repairs 2026-09-04 10:18:15 -07:00
test_service_logger_otel.py
test_spend_logs.py
test_team.py
test_team_logging.py
test_team_members.py
test_users.py

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/test_litellm

This folder can only run mock tests.