BerriAI/litellm · error · ValueError
QualityRouter: model '{name}' is listed in available_models
Error message
QualityRouter: model '{name}' is listed in available_models but has no model_info.litellm_routing_preferences What it means
Raised during QualityRouter model indexing: a model listed in available_models has no model_info.litellm_routing_preferences, so its quality tier/cost/keywords cannot be derived and it is unusable for quality routing.
Source
Thrown at litellm/router_strategy/quality_router/quality_router.py:174
`available_models`, plus side indices `_model_keywords`,
`_model_quality`, and `_model_cost`. Raises if any listed model is
missing `litellm_routing_preferences`.
"""
model_list: Final = getattr(self.litellm_router_instance, "model_list", None) or []
available: Final = set(self.config.available_models)
# Track which available models we've matched so we can error on missing.
seen: Final[dict[str, bool]] = {name: False for name in available}
tier_to_models: Final[dict[int, list[str]]] = {}
for deployment in model_list:
name = self._get_deployment_model_name(deployment)
if name is None or name not in available:
continue
raw_prefs = self._get_routing_preferences(deployment)
if raw_prefs is None:
raise ValueError(
f"QualityRouter: model '{name}' is listed in available_models "
f"but has no model_info.litellm_routing_preferences"
)
# Validate via the Pydantic model so we get a clear error for
# missing quality_tier, wrong types, etc. This also means
# `RoutingPreferences` is the single source of truth for the
# accepted shape — readers relied on raw dicts before.
try:
if isinstance(raw_prefs, RoutingPreferences):
prefs = raw_prefs
elif isinstance(raw_prefs, dict):
prefs = RoutingPreferences(**raw_prefs)
else:
# A Pydantic object of some other shape — coerce via its dict.
prefs = RoutingPreferences(
**(raw_prefs.model_dump() if hasattr(raw_prefs, "model_dump") else dict(raw_prefs))
)View on GitHub (pinned to 77b7c6c40c)
Solutions
- Add model_info.litellm_routing_preferences for the model, or remove it from available_models.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/router_strategy/quality_router/quality_router.py:174 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/0d183abba16f9685.
Report an issue: GitHub.