From ee09339efa8e549fca5366035b493df51bbc7144 Mon Sep 17 00:00:00 2001 From: Tin Chi Lo Date: Sat, 1 Aug 2026 00:57:06 -0700 Subject: [PATCH] docs(complexity_router): the servability check covers the defaulted tier too --- litellm/router_strategy/complexity_router/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/litellm/router_strategy/complexity_router/README.md b/litellm/router_strategy/complexity_router/README.md index 8a9600e56be..4056ede7e8c 100644 --- a/litellm/router_strategy/complexity_router/README.md +++ b/litellm/router_strategy/complexity_router/README.md @@ -144,7 +144,9 @@ complexity_router_config: Set `default_tier: SIMPLE` to keep unmatched traffic on the cheapest tier, which is how the router behaved before this setting existed. -`default_tier` names which tier no-signal traffic is classified as; it is resolved to a model by the same chain as any classified tier, so it can be served by its own entry in `tiers`, by `default_model`, or by the MEDIUM tier. A `default_tier` you set explicitly has to be servable by one of those, and the config is rejected at load time when it is not, rather than failing on the first unmatched request. With routing plugins configured that chain stops at the tier's own models, since a model the plugins never vetted must not serve, so the tier itself has to name one. +`default_tier` names which tier no-signal traffic is classified as; it is resolved to a model by the same chain as any classified tier, so it can be served by its own entry in `tiers`, by `default_model`, or by the MEDIUM tier. It has to be servable by one of those whether you set it or take the default, and the config is rejected at load time when it is not, rather than failing on the first unmatched request. A partial `tiers` map is unaffected, since the proxy always derives a `default_model` from the MEDIUM-then-SIMPLE tier and the chain terminates there. + +With routing plugins configured that chain stops at the tier's own models, since a model the plugins never vetted must not serve. So a plugin config has to give `default_tier` models in `tiers`, or point it at a tier that has them; `default_model` will not stand in. The check is on the individual dimensions, not on the weighted score, because contributions cancel. `"hi, quick python question"` scores zero with three dimensions firing (short prompt, a simple indicator, a code keyword); it has real evidence of being simple and stays SIMPLE. Prompts shorter than the `simple` token threshold or longer than the `complex` one also fire `tokenCount`, so they score normally and are outside this path.