litellm/tests/unit/test_router
chuan932 b2bbc31923 feat(router): clamp completion token budgets with per-deployment max_output_tokens_cap
Add an opt-in litellm_params.max_output_tokens_cap (int) per deployment.
At deployment time, any caller-requested output budget the request
already carries (max_tokens / max_completion_tokens / max_output_tokens)
above the cap is lowered to the cap. Smaller budgets are respected and
requests without a budget are untouched: a default remains the job of
default_litellm_params, which the cap now also bounds. Works for both
dict and pydantic deployment params; invalid cap values are ignored.

Operators fronting self-hosted OpenAI-compatible engines need a hard
output ceiling per deployment to bound queue latency and memory; router
defaults only fill in missing parameters, they cannot lower a caller
budget.

Registers the new param in the proxy credential-registry classification
tables (NotSecret), as its guard test requires of every LiteLLM_Params
field with a credential-shaped name.

Tests: tests/unit/test_router/test_max_output_tokens_cap.py (12 passing).

Signed-off-by: Chao Huan <chao.huan@nio.com>
2026-10-29 20:19:23 +08:00
..
__init__.py test: add __init__.py to every tests/unit directory phase 16 touches 2026-09-20 11:52:38 +00:00
test_enforce_model_rate_limits.py feat(router): daily_reset_time picks when deployment rpd and tpd daily limits start over (#48957) 2026-10-28 20:20:01 -07:00
test_io_token_rate_limits.py fix(token_counter): count OpenAI models newer than tiktoken's table with o200k_base (#48728) 2026-10-29 00:08:12 -07:00
test_max_output_tokens_cap.py feat(router): clamp completion token budgets with per-deployment max_output_tokens_cap 2026-10-29 20:19:23 +08:00
test_router.py feat(responses): support Codex client tool_search on Anthropic and other bridged providers (#48972) 2026-10-29 00:29:40 -07:00
test_router_callback_hook_sequence.py test: replace 61 live logging and otel tests with offline unit and integration coverage (#45362) 2026-10-08 15:55:57 -07:00
test_router_endpoints.py fix(vector-stores): keep proxy context out of provider vector store metadata (#47021) 2026-10-17 12:51:47 -07:00
test_router_fallbacks.py test: move routing, caching and callback tests out of local_testing (#45761) 2026-10-10 09:33:09 -07:00
test_router_get_deployments.py fix(count_tokens): apply context_management edits in the Gemini /v1/messages/count_tokens count (#46843) 2026-10-16 17:53:06 +00:00
test_router_helper_utils.py refactor(router): fence the router surface and document the router-core boundary (#48839) 2026-10-29 00:01:52 +00:00
test_router_max_parallel_requests.py test: move routing, caching and callback tests out of local_testing (#45761) 2026-10-10 09:33:09 -07:00
test_router_provider_endpoints.py fix(videos)!: keep model_id in proxy video ids so per-model keys resolve on status/content (#44614) 2026-10-20 05:42:59 +00:00
test_router_retries.py test: move routing, caching and callback tests out of local_testing (#45761) 2026-10-10 09:33:09 -07:00
test_router_surface_check.py refactor(router): fence the router surface and document the router-core boundary (#48839) 2026-10-29 00:01:52 +00:00
test_router_timeout.py feat(router): let a deployment set a timeout per service_tier (#47406) 2026-10-19 14:27:29 -07:00
test_router_vector_store_endpoints.py test: migrate SDK and proxy-booting legacy CircleCI tests to their tiers (#45758) 2026-10-11 00:17:21 -07:00