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.

ModelDefaultBudgetEffortDisable switch
zai-org/GLM-5.3YesExact capmax (default), low, highCan't disable thinking
google/gemma-4-26B-A4B-itYesExact capnone disables; other values have no effect{"enable_thinking": false}
moonshotai/Kimi-K2.6YesExact capnone disables; other values have no effect{"thinking": false} or {"enable_thinking": false}
evroc/rocYesExact capnone disables; other values have no effect{"thinking": false} or {"enable_thinking": false}
Qwen/Qwen3.6-35B-A3B-FP8YesExact capnone disables; other values have no effect{"enable_thinking": false}
Qwen/Qwen3.8-27BYesExact capxhigh (default), medium, low{"enable_thinking": false}
mistralai/Mistral-Medium-3.5-128BNo (high turns it on)Supported, but has no effect while thinking is offnone (default) or highIgnored
mistralai/Voxtral-Small-24B-2507NoNot supportednone and highNot supported
openai/gpt-oss-120bYes (in content, not reasoning)Not supportedlow, medium, highIgnored
nvidia/Llama-3.3-70B-Instruct-FP8NoNot supportedNo effectIgnored

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 when max_tokens is reached, the response ends with finish_reason: "length" and content is null. Raise max_tokens together with any high effort setting.

  • Kimi-K2.6 and evroc/roc can produce reasoning-style text in content when thinking is disabled, and the response can continue until it reaches max_tokens (finish_reason: "length"). If you want bounded, structured behaviour, prefer thinking_token_budget.

  • Mistral-Medium-3.5 at high produces reasoning without limit until max_tokens. Pair it with a thinking_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.