sgl-project/sglang · error · ValueError

Harmony does not support reasoning effort {reasoning_effort}

Error message

Harmony does not support reasoning effort {reasoning_effort}

What it means

For gpt-oss (Harmony-format) models, SGLang rejects reasoning_effort='none' popped from chat_template_kwargs. The Harmony format has no 'none' effort level — disabling reasoning must be done via other means.

Source

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

            return None

        return (
            "Model only supports text input; "
            f"received unsupported content type '{media_type}'."
        )

    def _convert_to_internal_request(
        self,
        request: ChatCompletionRequest,
        raw_request: Request = None,
    ) -> tuple[GenerateReqInput, ChatCompletionRequest]:
        reasoning_effort = (
            request.chat_template_kwargs.pop("reasoning_effort", None)
            if request.chat_template_kwargs
            else None
        )
        if self.is_gpt_oss and reasoning_effort == "none":
            raise ValueError(
                f"Harmony does not support reasoning effort {reasoning_effort}"
            )

        if reasoning_effort is not None:
            request.reasoning_effort = reasoning_effort

        if request.stream:
            if request.return_prompt_token_ids:
                raise ValueError(
                    "return_prompt_token_ids is not supported with streaming. "
                    "Please set stream=false when using return_prompt_token_ids=true."
                )
            if request.return_token_ids:
                raise ValueError(
                    "return_token_ids is not supported with streaming on "
                    "/v1/chat/completions. Please set stream=false when using "
                    "return_token_ids=true."
                )

View on GitHub (pinned to 0132848349)

Solutions

  1. Remove reasoning_effort from chat_template_kwargs for gpt-oss
  2. To suppress reasoning output, filter/hide reasoning channels in the response or use the model's supported low effort ('low')
  3. Use a supported Harmony effort level such as 'low', 'medium', 'high'

Example fix

// before
{"chat_template_kwargs": {"reasoning_effort": "none"}}
// after
{"chat_template_kwargs": {"reasoning_effort": "low"}}
Defensive patterns

Strategy: validation

Validate before calling

if model_is_gpt_oss:
    kwargs = req.pop("chat_template_kwargs", None) or {}
    kwargs.pop("reasoning_effort", None) if kwargs.get("reasoning_effort") == "none" else None

Type guard

def safe_gpt_oss_effort(e): return e != "none"

Try / catch

except ValueError as e: if 'does not support reasoning effort' in str(e): retry with 'low'

Prevention

When it happens

Trigger: POST /v1/chat/completions against a gpt-oss model with chat_template_kwargs={"reasoning_effort": "none"}.

Common situations: Porting prompts tuned for other models where effort 'none' disables thinking; clients sending 'none' uniformly to skip reasoning; misreading the effort label set.

Related errors


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