litellm/tests
Daniel JB Clark e688210c3f
fix(clinepass): correct the model namespace, harden truncation detection
Addresses findings from three independent code reviews (Claude Opus 5,
GPT-5.6-sol xhigh via codex, Grok 4.6 xhigh via cursor) ahead of proposing
this branch upstream.

Correctness:

* The restored model qualifier was `clinepass/`, a namespace that does not
  exist. The catalog namespace is `cline-pass/` (hyphenated); `clinepass/` is
  LiteLLM's own routing prefix, which is stripped before the request is built.
  This failed silently because the API validates only the *shape* of a model
  id -- `totallybogus/deepseek-v4-flash` also returns HTTP 200. It is not
  inert, though: verified against the live API, `cline-pass/deepseek-v4-flash`
  resolves to `deepseek/deepseek-v4-flash` while any unrecognised namespace
  falls back to the date-pinned `deepseek/deepseek-v4-flash-0731`.

* `_correct_truncated_finish_reason` compared an aggregate
  `usage.completion_tokens` against a per-choice `max_tokens`. With `n > 1`
  that relabels naturally-finished choices as truncated: two 60-token choices
  under a cap of 100 aggregate to 120 and both became `length`. Restricted to
  single-choice responses, where the inference is sound.

* Zero, negative and `bool` caps are now rejected. `bool` subclasses `int`, so
  `max_tokens=True` was read as a cap of 1 and would relabel everything.
  Float usage/caps are now accepted rather than silently skipped.

* `_unwrap_response_envelope` reached for the private `_request` attribute
  because `httpx.Response.request` raises `RuntimeError` instead of returning
  `None`. Ask for the public attribute defensively instead.

* `get_models()` is overridden to return an empty catalog. ClinePass has no
  `/models` endpoint (404), and the inherited OpenAI implementation asked for
  it at the wrong path.

* Dropped the `async_transform_request` override. `BaseLLMHTTPHandler` builds
  the body with the synchronous `transform_request` on both the sync and async
  paths, so it was dead code -- the same shape of bug this provider shipped
  once already. Pinned with a test.

Packaging / CI:

* Added the `clinepass` entry to `provider_endpoints_support.json` and its
  backup. Without it `check_provider_folders_documented.py` fails, which is a
  required Code Quality job -- verified failing before, passing after.

* `transformation.py` did not satisfy `ruff format` under the repo's pinned
  ruff 0.15.3, which the changed-file CI gate runs. Reformatted.

* This commit replaces the previous branch tip, which had accidentally swept
  in ~435 regenerated Next.js artifacts under `litellm/proxy/_experimental/`.
  The branch is now +883/-0 across 12 files.

Honesty note on the truncation fix: re-probing the live API (streaming and
non-streaming, caps of 2000 and 4000, both namespaces) could NOT reproduce the
`stop`-instead-of-`length` misreport that motivated it. The correction is kept
as a conservative safety net and documented as such rather than as a workaround
for a currently-observable defect. Streaming is deliberately not covered; see
the docstring.

Tests: 41 pass (was 32). openai_like + cometapi regressions: 126 passed,
8 skipped.

(cherry picked from commit c2dda4fd8b7a4e1874642b25d73656292cb52468)
2026-10-03 13:55:26 -04: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
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
code_coverage_tests feat(harness): add Harness.TOOL_LOOP, a minimal in-process tool-calling loop (#44391) 2026-10-03 17:33:01 +00: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 fix(otel): name postgres service spans by operation and table (#44240) 2026-10-03 09:20:28 -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(decisions): add unified /v1/decisions endpoint for Jev-compatible providers (#44236) 2026-10-03 17:38:38 +00: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 feat(mcp)!: disable stdio MCP servers by default (#44066) 2026-10-02 10:28:04 -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 fix(auto-router): attribute router-day savings without spend logs or a session (#44226) 2026-10-02 20:56: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
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(integration): move legacy proxy, router and Redis tests into tests/integration (#44128) 2026-10-01 23:00:54 -07:00
test_litellm fix(clinepass): correct the model namespace, harden truncation detection 2026-10-03 13:55:26 -04:00
test_litellm_rust feat(traces): tracing development seed (#44363) 2026-10-03 09:59:51 +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(lens): paginate trace reads within ClickHouse limits (#44384) 2026-10-03 10:38:40 -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
_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
capturing_transport.py
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.