Controlling reasoning
Some models — called reasoning models — spend tokens on internal thinking before
they answer. The platform returns this thinking in the reasoning field of the
assistant message and reports its size in
usage.completion_tokens_details.reasoning_tokens. Reasoning tokens are output
tokens: they're billed as output and they count towards max_tokens.
This page explains the three request parameters that control reasoning on
POST /v1/chat/completions, and how each model on the platform responds to them.
The three controls
thinking_token_budget — an exact, platform-enforced cap on reasoning
tokens. When the model reaches the budget, reasoning ends and the model
proceeds with its answer. Use -1 or drop the parameter for no limit. The budget behaves the
same for every reasoning model, and the model can't ignore it. It's only
supported on reasoning models — other models reject requests that set it.
reasoning_effort — a graded hint (none, minimal, low, medium,
high, xhigh, max) that the platform passes to the model. Its effect depends
entirely on the model: some models honour several levels, some ignore the hint
completely, and some reject unsupported values.
chat_template_kwargs — model-specific switches passed to the model's chat
template. This is how you turn thinking off entirely on models that support a
thinking toggle. The available switches differ per model.
Per-model support
The Default column shows whether the model spends tokens on reasoning when
you don't send any of these parameters. "Budget" means thinking_token_budget,
"effort" means reasoning_effort, and the "disable switch" is sent through
chat_template_kwargs.
| Model | Default | Budget | Effort | Disable switch |
|---|---|---|---|---|
zai-org/ | Yes | Exact cap | max (default), low, high | Can't disable thinking |
google/ | Yes | Exact cap | none disables; other values have no effect | {"enable_thinking": false} |
moonshotai/ | Yes | Exact cap | none disables; other values have no effect | {"thinking": false} or {"enable_thinking": false} |
evroc/ | Yes | Exact cap | none disables; other values have no effect | {"thinking": false} or {"enable_thinking": false} |
Qwen/ | Yes | Exact cap | none disables; other values have no effect | {"enable_thinking": false} |
Qwen/ | Yes | Exact cap | xhigh (default), medium, low | {"enable_thinking": false} |
mistralai/ | No (high turns it on) | Supported, but has no effect while thinking is off | none (default) or high | Ignored |
mistralai/ | No | Not supported | none and high | Not supported |
openai/ | Yes (in content, not reasoning) | Not supported | low, medium, high | Ignored |
nvidia/ | No | Not supported | No effect | Ignored |
Common pitfalls
-
The budget is a hard cut. If the model is stopped mid-thought, it has to answer from incomplete reasoning, and the answer quality degrades. Start with a generous budget and lower it over time as you learn how much reasoning your tasks need.
-
Reasoning shares
max_tokens. If the model is still thinking whenmax_tokensis reached, the response ends withfinish_reason: "length"andcontentisnull. Raisemax_tokenstogether with any high effort setting. -
Kimi-K2.6 and
evroc/roccan produce reasoning-style text incontentwhen thinking is disabled, and the response can continue until it reachesmax_tokens(finish_reason: "length"). If you want bounded, structured behaviour, preferthinking_token_budget. -
Mistral-Medium-3.5 at
highproduces reasoning without limit untilmax_tokens. Pair it with athinking_token_budget:curl https://models.think.evroc.com/v1/chat/completions \ -H "Authorization: Bearer $EVROC_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mistralai/Mistral-Medium-3.5-128B", "messages": [{"role": "user", "content": "What weekday was 100 days before Thu Nov 5 2026?"}], "reasoning_effort": "high", "thinking_token_budget": 512, "max_tokens": 2000 }'
Examples
Turn thinking off entirely on Qwen3.8-27B (clean, structured output):
curl https://models.think.evroc.com/v1/chat/completions \
-H "Authorization: Bearer $EVROC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3.8-27B",
"messages": [{"role": "user", "content": "What weekday was 100 days before Thu Nov 5 2026?"}],
"chat_template_kwargs": {"enable_thinking": false}
}'
Cap reasoning on a model that can't disable thinking (GLM-5.3):
curl https://models.think.evroc.com/v1/chat/completions \
-H "Authorization: Bearer $EVROC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "zai-org/GLM-5.3",
"messages": [{"role": "user", "content": "What weekday was 100 days before Thu Nov 5 2026?"}],
"thinking_token_budget": 128
}'
Check how many reasoning tokens a response used with
usage.completion_tokens_details.reasoning_tokens in the response.
For the full request schema, see the Inference API reference. For the list of available models, see supported models.