{"record":{"id":"21b75dcadaed08a3","repo":"sgl-project/sglang","slug":"inkling-reasoning-effort-must-be-in-0-0-0-99","errorCode":null,"errorMessage":"Inkling reasoning_effort must be in [0.0, 0.99]","messagePattern":"Inkling reasoning_effort must be in \\[0\\.0, 0\\.99\\]","errorType":"validation","errorClass":"ValueError","httpStatus":400,"severity":"error","filePath":"python/sglang/srt/entrypoints/openai/serving_chat.py","lineNumber":650,"sourceCode":"            or last.get(\"reasoning_content\")\n        ):\n            return None\n        messages.pop()\n        return last[\"content\"]\n\n    @staticmethod\n    def _parse_inkling_reasoning_effort(\n        value: Optional[Union[str, float]],\n    ) -> Optional[float]:\n        \"\"\"Convert an OpenAI-style reasoning_effort to an Inkling float.\"\"\"\n        if value is None:\n            return None\n        if isinstance(value, bool):\n            raise ValueError(\"Inkling reasoning_effort must not be a boolean\")\n        if isinstance(value, (int, float)):\n            parsed = float(value)\n            if not math.isfinite(parsed) or not 0.0 <= parsed <= 0.99:\n                raise ValueError(\"Inkling reasoning_effort must be in [0.0, 0.99]\")\n            return parsed\n        _EFFORT_MAP = {\n            \"none\": 0.0,\n            \"minimal\": 0.1,\n            \"low\": 0.2,\n            \"medium\": 0.7,\n            \"high\": 0.9,\n            \"xhigh\": 0.99,\n            \"max\": 0.99,\n        }\n        if value in _EFFORT_MAP:\n            return _EFFORT_MAP[value]\n        try:\n            parsed = float(value)\n        except (ValueError, TypeError) as exc:\n            raise ValueError(f\"invalid Inkling reasoning_effort: {value!r}\") from exc\n        if not math.isfinite(parsed) or not 0.0 <= parsed <= 0.99:\n            raise ValueError(\"Inkling reasoning_effort must be in [0.0, 0.99]\")","sourceCodeStart":632,"sourceCodeEnd":668,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/entrypoints/openai/serving_chat.py#L632-L668","documentation":"Raised when a numeric reasoning_effort for an Inkling model is non-finite or outside [0.0, 0.99]. Inkling models encode reasoning depth as a fraction of the budget; 1.0, negatives, NaN, or inf are invalid.","triggerScenarios":"reasoning_effort=1.0 or 1 (int coerces to 1.0), -0.1, float('nan')/inf via numeric input on an Inkling model request.","commonSituations":"Porting effort='max' semantics to 1.0; assuming an OpenAI-style 0-1 inclusive scale where 1.0 means maximum; off-by-one in normalized client configs.","solutions":["Use a value <= 0.99, e.g. 0.9 for maximum","Use label strings like 'high' which map internally to valid floats","Clamp client-side: min(effort, 0.99)"],"exampleFix":"// before\n{\"reasoning_effort\": 1.0}\n// after\n{\"reasoning_effort\": 0.9}","handlingStrategy":"validation","validationCode":"if isinstance(effort, (int, float)) and not isinstance(effort, bool):\n    import math\n    assert math.isfinite(effort) and 0.0 <= effort <= 0.99","typeGuard":"def valid_inkling_number(v):\n    import math\n    return not isinstance(v, bool) and isinstance(v, (int, float)) and math.isfinite(v) and 0.0 <= v <= 0.99","tryCatchPattern":null,"preventionTips":["Treat the Inkling scale as [0, 0.99]; use 0.9 for maximum","Clamp: min(max(effort, 0.0), 0.99)"],"tags":["inkling","reasoning","parameter-out-of-range","sglang"],"backgroundTag":"parameter-out-of-range","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}