{"record":{"id":"9888b225eee41ce2","repo":"BerriAI/litellm","slug":"qualityrouter-the-following-available-models-are","errorCode":null,"errorMessage":"QualityRouter: the following available_models are not present in the router's model_list (or are missing routing preferences): {missing}","messagePattern":"QualityRouter: the following available_models are not present in the router's model_list \\(or are missing routing preferences\\): (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/router_strategy/quality_router/quality_router.py","lineNumber":206,"sourceCode":"                else:\n                    # A Pydantic object of some other shape — coerce via its dict.\n                    prefs = RoutingPreferences(\n                        **(raw_prefs.model_dump() if hasattr(raw_prefs, \"model_dump\") else dict(raw_prefs))\n                    )\n            except Exception as e:\n                raise ValueError(f\"QualityRouter: model '{name}' has invalid litellm_routing_preferences: {e}\") from e\n\n            tier_int = int(prefs.quality_tier)\n            tier_to_models.setdefault(tier_int, []).append(name)\n            self._model_keywords[name] = [str(k).lower() for k in prefs.keywords if k]\n            self._model_quality[name] = tier_int\n            self._model_cost[name] = self._get_deployment_input_cost(deployment)\n            self._model_order[name] = prefs.order\n            seen[name] = True\n\n        missing: Final = [name for name, found in seen.items() if not found]\n        if missing:\n            raise ValueError(\n                f\"QualityRouter: the following available_models are not present in \"\n                f\"the router's model_list (or are missing routing preferences): {missing}\"\n            )\n\n        # Sort each tier's model list so `_resolve_model_for_quality_tier`\n        # (which picks index [0]) honors (order ASC, cost ASC, name ASC).\n        # Quality is moot within a single tier; keep parity with the keyword\n        # tiebreak by ordering on (order, cost, name) here.\n        for models in tier_to_models.values():\n            models.sort(key=lambda n: (self._order_key(n), self._cost_key(n), n))\n\n        return tier_to_models\n\n    def _order_key(self, model_name: str) -> float:\n        \"\"\"`order` lookup as a float — unset becomes +inf so explicit wins.\"\"\"\n        order: Final = self._model_order.get(model_name)\n        return float(order) if order is not None else math.inf\n","sourceCodeStart":188,"sourceCodeEnd":224,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/router_strategy/quality_router/quality_router.py#L188-L224","documentation":"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.","triggerScenarios":"Thrown at litellm/router_strategy/quality_router/quality_router.py:206 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add the missing models to the router's model_list with routing preferences, or remove them from available_models."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}