BerriAI/litellm · error · ValueError
Empty model pool for tier {tier_key}
Error message
Empty model pool for tier {tier_key} What it means
Routing guard in the complexity router's tier picker: a tier's configured value resolved to an empty model pool (empty string/list in config), so there is no model to route to for that tier.
Source
Thrown at litellm/router_strategy/complexity_router/complexity_router.py:1175
if tier_key in self.config.tiers:
return self._pick_from_tier_value(self.config.tiers[tier_key], tier_key)
if self.config.default_model:
return self.config.default_model
medium_key: Final = ComplexityTier.MEDIUM.value
if medium_key in self.config.tiers:
return self._pick_from_tier_value(self.config.tiers[medium_key], medium_key)
raise ValueError(f"No model configured for tier {tier_key} and no default_model set")
@staticmethod
def _pick_from_tier_value(model: str | list[str], tier_key: str) -> str:
if isinstance(model, str):
return model
if not model:
raise ValueError(f"Empty model pool for tier {tier_key}")
return random.choice(model)
def _tier_pools(self) -> dict[str, list[str]]:
return {tier: (models if isinstance(models, list) else [models]) for tier, models in self.config.tiers.items()}
async def _pick_model_for_tier(
self,
tier: ComplexityTier,
raw_messages: list[dict[str, Any]] | None,
resolved_messages: list[dict[str, Any]] | None,
request_kwargs: dict,
) -> str:
if not self.config.plugins:
return self.get_model_for_tier(tier)
from litellm.types.router import RoutingContext
tier_key: Final = tier.valueView on GitHub (pinned to 77b7c6c40c)
Solutions
- Add models to the tier's pool in the complexity router config.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/router_strategy/complexity_router/complexity_router.py:1175 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18).
Data as JSON: /api/errors/adc59dd740095e2a.
Report an issue: GitHub.