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
- Remove reasoning_effort from chat_template_kwargs for gpt-oss
- To suppress reasoning output, filter/hide reasoning channels in the response or use the model's supported low effort ('low')
- 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
- Per-model allowlists for reasoning_effort
- Never send 'none' to gpt-oss; use 'low' or filter reasoning from output
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
- invalid reasoning effort: {effort!r}
- name must be provided
- GptOssForCausalLM on Intel XPU only supports bfloat16 dtype,
- No call message found for {call_id}
- Unknown input type: {response_msg['type']}
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/2aae88808a514cf8.
Report an issue: GitHub.