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

  1. 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.