Reasoning
Several models expose a separate reasoning (thinking) step. When it runs, the response carries the reasoning in reasoning_content on the message and a reasoning_tokens count under usage, alongside the normal content.
The control differs by model family, so the table below is the quick reference. The sections that follow show each family in full.
GLM 5.3, GLM 5.3-Flash
On
reasoning_effort: "none" or chat_template_kwargs: {"enable_thinking": false}
reasoning_effort: "low" or "high"; omitted uses maximum depth
GLM 5.2
On
chat_template_kwargs: {"enable_thinking": true / false}
reasoning_effort: "high" or "max"
GLM 5.1, GLM 5-Turbo
On
chat_template_kwargs: {"enable_thinking": true / false}
No effort levels
DeepSeek V4 (Flash, Pro)
Off
chat_template_kwargs: {"thinking": true}
reasoning_effort: "high" or "max"
MiniMax M3
On (adaptive)
chat_template_kwargs: {"thinking_mode": "disabled"}
Modes only, no effort levels
Kimi K2.7 Code
On (always)
Not toggleable
None
Qwen 3.8
On (always)
Not toggleable
reasoning_effort: "xhigh" (default), "medium", "low"
DeepSeek V4 reasoning is off by default on TensorX. Enable it per request with chat_template_kwargs: {"thinking": true}.
GLM 5.3 and GLM 5.3-Flash
Both models use maximum reasoning depth by default.
Measured on z-ai/glm-5.3 with max_tokens: 400, asking for a short Python function:
Request
reasoning_tokens
finish_reason
content
No effort set (defaults to max)
402
length
empty
reasoning_effort: "low"
1
stop
returned normally
reasoning_effort: "high"
4
stop
returned normally
reasoning_effort: "medium"
402
length
empty
chat_template_kwargs: {"enable_thinking": false}
0
stop
returned normally
Use one of these controls:
Set
reasoning_effortto"low"or"high"to retain reasoning with a lower depth.Leave
max_tokensunset unless the application requires an explicit response budget. QueryGET /v1/model/infofor the model'smax_output_tokensbefore setting one.Turn thinking off with
chat_template_kwargs: {"enable_thinking": false}.
reasoning_effort mapping
SGLang handles "none" before the chat template and disables thinking. The template has explicit depth branches for "low" and "high". Other accepted effort values use the maximum-depth branch, which is also the default when the parameter is omitted. Values outside the API's accepted enum are rejected during request validation.
"low"
Low
"high"
High
"none"
Thinking disabled
"minimal", "medium", "xhigh", "max", or omitted
Max
Turning thinking off
The key must go inside chat_template_kwargs. A top-level enable_thinking is not part of the OpenAI schema and is ignored, which looks like the parameter doing nothing.
Multi-turn: clear_thinking
On a multi-turn conversation these models replay the reasoning from previous assistant turns back into the prompt by default, which is what makes long tool-calling loops coherent. It also means your prompt grows faster than the visible message text suggests.
Set clear_thinking: true when prior reasoning should not be included in subsequent prompts.
GLM 5.3-Flash is multimodal and accepts images on the same endpoint. Reasoning behaves identically on image requests.
GLM (5.2, 5.1, 5-Turbo)
GLM models think by default. Turn thinking off with enable_thinking: false inside chat_template_kwargs:
On GLM 5.2, reasoning_effort has two effective levels, "high" and "max". It is passed at the top level (OpenAI-standard):
"high" gives shorter reasoning, "max" gives the deepest. "low" and "medium" are accepted but map to "high". To skip reasoning entirely, use reasoning_effort: "none" or enable_thinking: false. GLM 5.1 and GLM 5-Turbo support on/off but not effort levels.
DeepSeek V4 (Flash, Pro)
DeepSeek V4 models default to non-thinking mode. Enable reasoning with thinking: true inside chat_template_kwargs:
Once thinking is on, control the depth with reasoning_effort, passed at the top level. There are two effective levels, "high" and "max":
"high" is the standard depth, "max" reasons the longest. "low" and "medium" are accepted but map to "high". reasoning_effort has no effect unless thinking: true is also set.
MiniMax M3
MiniMax M3 has three reasoning modes, set with thinking_mode inside chat_template_kwargs:
"enabled": always reason."adaptive": the model decides when to reason. This is the default."disabled": no reasoning, direct answer.
M3 uses thinking_mode, not thinking or enable_thinking, and the value is one of the three modes above. It does not take graded reasoning_effort levels, so use the modes to control reasoning.
Kimi K2.7 Code
Kimi models reason by default and cannot be toggled off. There is no enable_thinking or thinking flag to set. reasoning_content is always populated.
Qwen 3.8
Qwen 3.8 thinks on every request. Unlike the other families, reasoning cannot be switched off. The model rejects any attempt:
chat_template_kwargs: {"enable_thinking": false}returns400 Disabling thinking is not supported.reasoning_effort: "none"returns the same error.
Depth is controlled with the standard top-level reasoning_effort, but the accepted values differ from other models on the platform:
"xhigh"
Default. Asks the model to validate assumptions and weigh alternatives. Most thorough, most output tokens
"medium"
No additional reasoning-depth steering
"low"
Asks the model to keep thinking brief and reach the conclusion directly
Reasoning arrives in reasoning_content, with no <think> tags left in content. When streaming, reasoning arrives as delta.reasoning_content deltas before the content deltas begin.
Reasoning tokens are billed as output tokens. They are counted inside completion_tokens and reported separately as usage.reasoning_tokens.
Last updated
Was this helpful?

