{"record":{"id":"baa0b6bae82df503","repo":"BerriAI/litellm","slug":"weights-must-sum-to-1-0-got-quality-q-cost-v","errorCode":null,"errorMessage":"weights must sum to 1.0, got quality={q} + cost={v} = {q + v}","messagePattern":"weights must sum to 1\\.0, got quality=(.+?) \\+ cost=(.+?) = (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/types/router.py","lineNumber":980,"sourceCode":"    CODE_GENERATION = \"code_generation\"\n    CODE_UNDERSTANDING = \"code_understanding\"\n    TECHNICAL_DESIGN = \"technical_design\"\n    ANALYTICAL_REASONING = \"analytical_reasoning\"\n    WRITING = \"writing\"\n    FACTUAL_LOOKUP = \"factual_lookup\"\n    GENERAL = \"general\"\n\n\nclass AdaptiveRouterWeights(BaseModel):\n    quality: float = Field(default=0.7, ge=0.0, le=1.0)\n    cost: float = Field(default=0.3, ge=0.0, le=1.0)\n\n    @field_validator(\"cost\")\n    @classmethod\n    def _weights_sum_to_one(cls, v, info):\n        q: Final = info.data.get(\"quality\", 0.7)\n        if abs(q + v - 1.0) > 0.001:\n            raise ValueError(f\"weights must sum to 1.0, got quality={q} + cost={v} = {q + v}\")\n        return v\n\n\nclass AdaptiveRouterConfig(BaseModel):\n    available_models: list[str]\n    weights: AdaptiveRouterWeights = Field(default_factory=AdaptiveRouterWeights)\n\n\nclass AdaptiveRouterPreferences(BaseModel):\n    \"\"\"model_info.adaptive_router_preferences — declared by each model.\"\"\"\n\n    model_config = ConfigDict(use_enum_values=False)\n\n    quality_tier: int = Field(ge=1, le=3)\n    strengths: list[RequestType] = Field(default_factory=list)\n","sourceCodeStart":962,"sourceCodeEnd":996,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/types/router.py#L962-L996","documentation":"Field validator on AdaptiveRouterWeights.cost: quality + cost must equal 1.0 within a 0.001 tolerance. The supplied weights sum to something else, so the adaptive router cannot interpret them as a trade-off split and validation fails.","triggerScenarios":"Thrown at litellm/types/router.py:980 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Adjust quality and cost weights so they sum to 1.0 (e.g. quality=0.7, cost=0.3)."],"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-14T00:17:10.932Z"}