BerriAI/litellm · error · ValueError

QualityRouter: the following available_models are not presen

Error message

QualityRouter: the following available_models are not present in the router's model_list (or are missing routing preferences): {missing}

What it means

Raised after indexing the router's model_list when configured available_models were never matched to a deployment (absent from model_list or missing routing preferences); quality routing is configured against models that do not exist.

Source

Thrown at litellm/router_strategy/quality_router/quality_router.py:206

                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))
                    )
            except Exception as e:
                raise ValueError(f"QualityRouter: model '{name}' has invalid litellm_routing_preferences: {e}") from e

            tier_int = int(prefs.quality_tier)
            tier_to_models.setdefault(tier_int, []).append(name)
            self._model_keywords[name] = [str(k).lower() for k in prefs.keywords if k]
            self._model_quality[name] = tier_int
            self._model_cost[name] = self._get_deployment_input_cost(deployment)
            self._model_order[name] = prefs.order
            seen[name] = True

        missing: Final = [name for name, found in seen.items() if not found]
        if missing:
            raise ValueError(
                f"QualityRouter: the following available_models are not present in "
                f"the router's model_list (or are missing routing preferences): {missing}"
            )

        # Sort each tier's model list so `_resolve_model_for_quality_tier`
        # (which picks index [0]) honors (order ASC, cost ASC, name ASC).
        # Quality is moot within a single tier; keep parity with the keyword
        # tiebreak by ordering on (order, cost, name) here.
        for models in tier_to_models.values():
            models.sort(key=lambda n: (self._order_key(n), self._cost_key(n), n))

        return tier_to_models

    def _order_key(self, model_name: str) -> float:
        """`order` lookup as a float — unset becomes +inf so explicit wins."""
        order: Final = self._model_order.get(model_name)
        return float(order) if order is not None else math.inf

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Add the missing models to the router's model_list with routing preferences, or remove them from available_models.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/router_strategy/quality_router/quality_router.py:206 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/9888b225eee41ce2. Report an issue: GitHub.