sgl-project/sglang · error · ValueError

Inkling reasoning_effort must be in [0.0, 0.99]

Error message

Inkling reasoning_effort must be in [0.0, 0.99]

What it means

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.

Source

Thrown at python/sglang/srt/entrypoints/openai/serving_chat.py:650

            or last.get("reasoning_content")
        ):
            return None
        messages.pop()
        return last["content"]

    @staticmethod
    def _parse_inkling_reasoning_effort(
        value: Optional[Union[str, float]],
    ) -> Optional[float]:
        """Convert an OpenAI-style reasoning_effort to an Inkling float."""
        if value is None:
            return None
        if isinstance(value, bool):
            raise ValueError("Inkling reasoning_effort must not be a boolean")
        if isinstance(value, (int, float)):
            parsed = float(value)
            if not math.isfinite(parsed) or not 0.0 <= parsed <= 0.99:
                raise ValueError("Inkling reasoning_effort must be in [0.0, 0.99]")
            return parsed
        _EFFORT_MAP = {
            "none": 0.0,
            "minimal": 0.1,
            "low": 0.2,
            "medium": 0.7,
            "high": 0.9,
            "xhigh": 0.99,
            "max": 0.99,
        }
        if value in _EFFORT_MAP:
            return _EFFORT_MAP[value]
        try:
            parsed = float(value)
        except (ValueError, TypeError) as exc:
            raise ValueError(f"invalid Inkling reasoning_effort: {value!r}") from exc
        if not math.isfinite(parsed) or not 0.0 <= parsed <= 0.99:
            raise ValueError("Inkling reasoning_effort must be in [0.0, 0.99]")

View on GitHub (pinned to 0132848349)

Solutions

  1. Use a value <= 0.99, e.g. 0.9 for maximum
  2. Use label strings like 'high' which map internally to valid floats
  3. Clamp client-side: min(effort, 0.99)

Example fix

// before
{"reasoning_effort": 1.0}
// after
{"reasoning_effort": 0.9}
Defensive patterns

Strategy: validation

Validate before calling

if isinstance(effort, (int, float)) and not isinstance(effort, bool):
    import math
    assert math.isfinite(effort) and 0.0 <= effort <= 0.99

Type guard

def valid_inkling_number(v):
    import math
    return not isinstance(v, bool) and isinstance(v, (int, float)) and math.isfinite(v) and 0.0 <= v <= 0.99

Prevention

When it happens

Trigger: reasoning_effort=1.0 or 1 (int coerces to 1.0), -0.1, float('nan')/inf via numeric input on an Inkling model request.

Common situations: 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.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/21b75dcadaed08a3. Report an issue: GitHub.