mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
A complexity-router setting placed beside complexity_router_config, or inside a tier entry's litellm_params, is read by nobody: the router loads its settings only from litellm_params.complexity_router_config. It does not stay inert. The alias-marker forwarding and the per-tier param spread carry every unrecognized key onto the outbound request, and all_litellm_params only knows the outer names, so the key reaches the provider as an unknown body field and every call through that model group fails with an error naming an internal config key. Guard the whole set, derived from ComplexityRouterConfig.model_fields so a field added later is covered, and scoped to complexity-router deployments because the names only mean this there (embedding_model is a legitimate flat param on an s3_vectors vector store). Scope is read from the same merged field view the naming check is judged on, so a router named only by its default model is in scope and a field added to the required-field table is covered without another edit. The write endpoints reject with a 400 naming the keys and where they belong, config.yaml refuses to start for the same reason max_agentic_loops does, and a tier entry is judged by the config model itself. An already-stored deployment keeps loading, so an upgrade cannot take a running gateway down over a row that was written before the gate existed. |
||
|---|---|---|
| .. | ||
| adaptive_router | ||
| test_auto_router.py | ||
| test_base_routing_strategy.py | ||
| test_budget_limiter_hotpath.py | ||
| test_complexity_router.py | ||
| test_lar1_routing.py | ||
| test_litellm_encoder.py | ||
| test_lowest_latency.py | ||
| test_quality_router.py | ||
| test_router_routing_groups.py | ||
| test_router_routing_plugins.py | ||
| test_router_tag_regex_routing.py | ||
| test_router_tag_routing.py | ||
| test_savings_baseline.py | ||