Thinking / Reasoning
Models that support thinking output a reasoning process before generating the final answer. Different providers use different request fields to trigger thinking (thinking.type / reasoning_effort / thinkingConfig / enable_thinking), but thinking content is uniformly returned via the reasoning_content field in the response (or the thinking content block in the Anthropic Messages protocol).
For a complete list of thinking-capable models, see the Model Catalog — models with thinkingSupport: true on their card support thinking, and the thinkingLink on each card links to the corresponding section on this page.
Configuration Parameters × Provider Matrix
| Provider / Model Range | Applicable API | Trigger Parameter | Default Behavior | Can Be Fully Disabled | Thinking Intensity Control | Thinking Output Field |
|---|---|---|---|---|---|---|
| Anthropic Claude 4.x / 5.x | v1/messages / v1/chat/completions | thinking.type | Off by default; Sonnet 5 defaults to adaptive | ✅ | budget_tokens or output_config.effort | thinking content block / reasoning_content |
| Azure OpenAI GPT-5.x / o1·o3·o4 | Must use v1/responses — reasoning cannot be controlled via v1/chat/completions, and the reasoning process is not returned | reasoning.effort (see Responses API) | Determined by the model itself | Model-dependent | GPT-5.6: none / minimal / low / medium / high / xhigh / max; other models per Model Catalog | Visible only under v1/responses |
| Google Gemini 3+ | v1/chat/completions | thinkingConfig.thinkingLevel | On by default; default intensity varies by model | Cannot be disabled for some models | MINIMAL / LOW / MEDIUM / HIGH | reasoning_content (requires includeThoughts) |
| Google Gemini 2.5 | v1/chat/completions | thinkingConfig.thinkingBudget | Auto (up to 8,192 tokens) | Flash / Flash-Lite can disable; Pro cannot | -1 dynamic or explicit token budget | reasoning_content (requires includeThoughts) |
| DeepSeek V4 | v1/chat/completions / v1/messages | thinking.type + reasoning_effort | On (high) | ✅ | high / max | reasoning_content |
| Alibaba Qwen 3.x | v1/chat/completions (some models also support v1/messages) | enable_thinking | On by default for thinking models | ✅ | — | delta.reasoning_content (streaming only) |
| Doubao Seed 2.0 | v1/chat/completions | reasoning_effort | medium thinking | ✅ (minimal) | minimal / low / medium / high | delta.reasoning_content (streaming) |
| Kimi K2 thinking / Grok 4 fast reasoning | v1/chat/completions | No configuration needed | Always on | ❌ | — | reasoning_content |
"Can Be Fully Disabled" means suppressing reasoning tokens for a given request via parameters without switching models. Refer to the Model Catalog card for per-model support details.
Azure OpenAI GPT-5.6
- Applicable API:
v1/responses(recommended for reasoning); all three models also support standard chat and function calling viav1/chat/completions. - Applicable models:
turing/gpt-5.6-sol/turing/gpt-5.6-terra/turing/gpt-5.6-luna. - Model aliases:
gpt-5.6resolves toturing/gpt-5.6-solby default; the three full model names without theturing/prefix also resolve to the corresponding platform models. - Reasoning intensity:
none/minimal/low/medium/high/xhigh/max.maxis supported only by the GPT-5.6 series; the platform default assistant usesmedium.
{
"model": "turing/gpt-5.6-sol",
"input": "Analyze the major performance bottlenecks in this system design and provide verification steps.",
"reasoning": {
"effort": "max",
"summary": "auto"
}
}
max increases reasoning time and reasoning token consumption, and is suited for complex tasks that require deep verification. For routine requests, start with medium or high.
Anthropic Claude
- Official docs: Extended Thinking / Adaptive Thinking
- Applicable API:
v1/messages(native) /v1/chat/completions - Applicable models: Refer to the thinking capability indicator in Model Catalog → Claude.
Trigger Parameters
thinking.type "enabled" | "adaptive" | "disabled" (default behavior varies by model)
thinking.budget_tokens Integer 1–10000 (only valid when type="enabled", and must be < max_tokens)
thinking.display "summarized" | "omitted" (only valid in adaptive mode)
output_config.effort "low" | "medium" | "high" | "max" | "xhigh" (only valid in adaptive mode; available values depend on the model)
enabled— Manual budget mode; the reasoning token limit is controlled bybudget_tokens.adaptive— The model automatically determines reasoning depth; intensity is controlled viaoutput_config.effort.disabled— Disables thinking (default).
Model Support Matrix
| Model | type: "enabled" | type: "adaptive" |
|---|---|---|
turing/claude-sonnet-5 | ❌ Returns 400 if passed | ✅ On by default (can be disabled with disabled) |
turing/claude-opus-4.8 | ❌ Returns 400 if passed | ✅ Only supported mode (off by default, must be explicitly enabled) |
turing/claude-opus-4.7 | ❌ Returns 400 if passed | ✅ Only supported mode (off by default, must be explicitly enabled) |
turing/claude-opus-4.6 | ✅ | ✅ |
turing/claude-sonnet-4.6 | ✅ | ✅ |
turing/claude-opus-4.5 / claude-4.5-sonnet / earlier | ✅ Only supported mode | ❌ |
Breaking Changes in New Models
turing/claude-opus-4.7 / turing/claude-opus-4.8 / turing/claude-sonnet-5 introduce breaking changes compared to 4.6:
thinking.type: "enabled"is not supported. Passingenabledreturns a 400 ("thinking.type.enabled" is not supported for this model).- Reasoning intensity is controlled via
output_config.effort;budget_tokensis no longer used. output_config.effortfor Opus 4.8 only acceptslow/medium/high; passingmax/xhighmay return an upstream 500.- Default behavior differs:
Sonnet 5defaults to adaptive and can be disabled withdisabled;Opus 4.7/4.8defaults to off and requires explicitly passingthinking.type: "adaptive"to enable. - In adaptive mode,
thinking.displaydefaults toomitted(only the signature is returned, not the full body). Passsummarizedexplicitly when you need to display thinking content. - These models reject non-default sampling parameters. Do not pass
temperature/top_p/top_kin requests, as doing so may return a 400.
For a full comparison of adaptive mode and field semantics, see Provider Specifics → Anthropic Adaptive Thinking.
Example
{
"model": "turing/claude-opus-4.8",
"max_tokens": 16000,
"thinking": {
"type": "adaptive",
"display": "summarized"
},
"output_config": {
"effort": "high"
},
"messages": [
{ "role": "user", "content": "Explain why the sum of two even numbers is always even." }
]
}
Under the v1/messages protocol, the response includes a thinking content block; under v1/chat/completions, the reasoning content is populated in delta.reasoning_content.
Google Gemini
Gemini passes Google's native thinkingConfig directly through Turing's Chat Completions endpoint. This section covers only the official fields, organized by model series using either thinkingLevel or thinkingBudget.
thinkingConfig.includeThoughts only controls whether a thinking summary is returned — it is not a toggle for enabling or disabling thinking. Even without returning a thinking summary, the model may still generate and bill for thinking tokens.
Gemini 3 and Later
- Official docs: Gemini Thinking / Vertex AI GenerationConfig
- Applicable API:
v1/chat/completions - Applicable models: Refer to the Gemini 3 / 3.1 / 3.5 / 3.6 thinking models in Model Catalog → Gemini.
- Control field:
thinkingConfig.thinkingLevel - Do not mix:
thinkingLevelandthinkingBudgetcannot appear in the same Gemini 3+ request. - Responses may include a
thought_signature, which must be passed back verbatim in multi-turn conversations or function calling (see Thought Signatures below).
thinkingLevel uses Google REST/JSON-style uppercase enum values:
| Value | Use Case |
|---|---|
MINIMAL | Minimize thinking tokens; supported only by some Flash / Flash-Lite / Image models |
LOW | Simple tasks, high throughput, low latency |
MEDIUM | Moderate complexity tasks; balanced quality and latency |
HIGH | Complex reasoning, multi-step planning, code analysis, function calling, etc. |
Supported thinkingLevel values and defaults vary across Gemini 3+ models. Turing model names are defined in Model Catalog → Gemini; select based on the corresponding upstream model family:
| Upstream Model Family | Supported thinkingLevel | Default |
|---|---|---|
| Gemini 3.6 Flash | MINIMAL / LOW / MEDIUM / HIGH | MEDIUM |
| Gemini 3.5 Flash | MINIMAL / LOW / MEDIUM / HIGH | MEDIUM |
| Gemini 3.1 Pro | LOW / MEDIUM / HIGH | HIGH |
| Gemini 3.1 Flash-Lite | MINIMAL / LOW / MEDIUM / HIGH | MINIMAL |
| Gemini 3.1 Flash Image | MINIMAL / HIGH | MINIMAL |
| Gemini 3 Flash | MINIMAL / LOW / MEDIUM / HIGH | HIGH |
| Gemini 3 Pro | LOW / MEDIUM / HIGH | HIGH |
| Gemini 3 Pro Image | HIGH | HIGH |
Gemini 3 Pro / 3.1 Pro cannot disable thinking. MINIMAL is only available for some Flash / Flash-Lite / Image models.
Gemini 3 / 3.1 requires temperature to remain at its default value of 1.0. Setting it below 1.0 may cause the model to enter an infinite loop or significantly degrade reasoning performance.
{
"model": "turing/gemini-3.1-pro-latest",
"messages": [
{ "role": "user", "content": "Solve x^2 + 5x + 6 = 0 step by step." }
],
"thinkingConfig": {
"includeThoughts": true
}
}
OpenAI Python SDK usage:
response = client.chat.completions.create(
model="turing/gemini-3.6-flash",
messages=[{"role": "user", "content": "Analyze the most likely root cause in this log"}],
extra_body={
"thinkingConfig": {
"includeThoughts": True,
}
},
)
Thought Signatures (Required for Multi-Turn / Function Calling)
When using function calling or multi-turn conversations with Gemini 3+, you must pass back the thought_signature returned in the response verbatim in subsequent turns to maintain the model's reasoning state. Omitting it will return a 400.
Field Location
- Function calling response:
tool_calls[0].provider_specific_fields.thought_signature - Multi-turn conversation response:
message.provider_specific_fields.thought_signature
SDK Auto-Handling (Recommended)
# Turn 1
response_1 = client.chat.completions.create(
model="turing/gemini-3-pro-latest",
messages=[{"role": "user", "content": "Weather in Tokyo?"}],
tools=[...],
)
# Turn 2 — reuse response_1.choices[0].message directly; the SDK preserves thought_signature automatically
messages = [
{"role": "user", "content": "Weather in Tokyo?"},
response_1.choices[0].message, # Do not destructure; keep the whole object
{"role": "tool", "content": '{"temp": 30}', "tool_call_id": "..."},
]
client.chat.completions.create(
model="turing/gemini-3-pro-latest",
messages=messages,
tools=[...],
)
Manually Constructing a Message (cURL / Custom Flow)
{
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc",
"type": "function",
"function": {"name": "get_weather", "arguments": "{\"location\": \"Tokyo\"}"},
"provider_specific_fields": {
"thought_signature": "eyJ0aGlua2luZ19zdGF0ZSI6Li4ufQ=="
}
}]
}
thought_signature must not be modified — any alteration will result in a 400. Multi-turn conversations (without tools) also require preserving it; the field is located at message.provider_specific_fields.thought_signature.
For complete SDK examples, multi-turn conversation scenarios, and common errors, see Provider Specifics → Gemini Thought Signatures.
Gemini 2.5 Series
- Official docs: Gemini Thinking
- Applicable models: Refer to the Gemini 2.5 series in Model Catalog → Gemini.
Gemini 2.5 and earlier thinking models use thinkingConfig.thinkingBudget; do not pass thinkingLevel:
| Model | Available Budget | Default |
|---|---|---|
| Gemini 2.5 Flash | 0 disables thinking content, -1 dynamic, 1–24576 explicit limit | Auto (up to 8,192 tokens) |
| Gemini 2.5 Flash-Lite | 0 disables thinking content, -1 dynamic, 512–24576 explicit limit | Auto (up to 8,192 tokens) |
| Gemini 2.5 Pro | -1 dynamic, 128–32768 explicit limit | Auto (up to 8,192 tokens) |
thinkingBudget is a soft limit; actual thinking tokens may vary. 0 is only available for Flash / Flash-Lite and suppresses thought content output; the model's final answer may still contain reasoning-style text. Gemini 2.5 Pro cannot disable thinking.
{
"model": "turing/gemini-2.5-flash",
"messages": [
{ "role": "user", "content": "Solve x^2 + 5x + 6 = 0 step by step." }
],
"thinkingConfig": {
"includeThoughts": true
}
}
DeepSeek
V4 Series (Primary)
- Official docs: DeepSeek Reasoning Model / Alibaba Cloud DeepSeek-V4
- Applicable API:
v1/chat/completions/v1/messages - Applicable models: Refer to the DeepSeek V4 series in Model Catalog → DeepSeek.
Thinking is on by default and can be explicitly disabled or adjusted.
thinking.type "enabled" (default) | "disabled"
reasoning_effort "high" (default) | "max"
Legacy values "low" / "medium" → automatically mapped to "high"
Legacy value "xhigh" → automatically mapped to "max"
maxis suited for complex agent scenarios such as Claude Code and OpenCode; passing it explicitly in regular requests also takes effect.- When thinking is enabled,
temperature/top_p/presence_penalty/frequency_penaltyhave no effect (backward compatible — no error is raised).
{
"model": "deepseek-v4-pro",
"messages": [{ "role": "user", "content": "..." }],
"thinking": { "type": "enabled" },
"reasoning_effort": "max"
}
Legacy Series
turing/deepseek-r1/turing/deepseek-r1-0528— No configuration needed; deep reasoning is always on (see Always-On Thinking Models below).turing/deepseek-v3-2— Off by default; enable explicitly withthinking.type: "enabled".
Alibaba Qwen
- Official docs: Qwen Deep Thinking Mode / Qwen API Reference
- Applicable API:
v1/chat/completions(qwen3.5-plus/qwen3.6-plus·flash·maxand other primary models also supportv1/messages) - Applicable models: Refer to Qwen3 thinking models in Model Catalog → Alibaba.
enable_thinking Boolean (defaults to true for thinking models)
Pass in extra_body when using the OpenAI SDK
Qwen3 thinking models support streaming only — stream=true is required. Non-streaming requests will be rejected.
Thinking content is returned in the delta.reasoning_content field, which is a separate channel from delta.content.
- cURL
- Python
curl -N $TURING_BASE_URL/chat/completions \
-H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-14b",
"messages": [{ "role": "user", "content": "Explain the basic principles of quantum computing." }],
"stream": true,
"enable_thinking": true
}'
from openai import OpenAI
client = OpenAI(api_key=TURING_API_KEY, base_url=TURING_BASE_URL)
response = client.chat.completions.create(
model="qwen3-14b",
messages=[{"role": "user", "content": "Explain the basic principles of quantum computing."}],
stream=True,
extra_body={"enable_thinking": True}, # Set to False to disable thinking
)
for chunk in response:
delta = chunk.choices[0].delta
if getattr(delta, "reasoning_content", None):
print("[Thinking]", delta.reasoning_content, end="")
if delta.content:
print(delta.content, end="")
Doubao
- Official docs: Volcengine Doubao Seed 2.0 Pro / Volcengine API
- Applicable API:
v1/chat/completions - Applicable models: Refer to the Doubao Seed 2.0 series in Model Catalog → ByteDance.
reasoning_effort "minimal" — Disables thinking; answers directly
"low" — Lightweight thinking; prioritizes speed
"medium" (default) — Balanced mode
"high" — Deep thinking; handles complex problems
Reasoning content is returned in the delta.reasoning_content field (streaming mode). max_tokens does not apply to the thinking portion; the total output limit is controlled by max_completion_tokens (0–65536), which includes both the response and reasoning.
{
"model": "doubao-seed-2-0-pro-260215",
"messages": [{ "role": "user", "content": "..." }],
"stream": true,
"reasoning_effort": "high"
}
Always-On Thinking Models (No Configuration Required)
- Applicable API:
v1/chat/completions
These models require no parameters to activate thinking. The platform executes thinking automatically and populates the reasoning content into reasoning_content. Refer to the provider sections and thinking capability indicators in the Model Catalog for specific models:
OpenAI / Azure
- Official docs: OpenAI Reasoning / Azure OpenAI Reasoning
- Applicable API: Must use
v1/responses(v1/chat/completionsprovides no control or visibility) - Applicable models: Refer to the OpenAI / Azure reasoning models in the Response Model List.
Thinking in GPT-5.x, o1, o3, and o4 reasoning models is built into the model, but when using the v1/chat/completions protocol:
- The
reasoning_effortparameter has no effect (writing it in the request does not change thinking intensity) - Reasoning content is not returned in the response (
reasoning_contentis always empty; only the final answer is available)
To control thinking intensity and view the reasoning process, you must use the v1/responses protocol.
Use the reasoning.effort parameter to control thinking depth, and reasoning.summary to control whether the thinking summary is returned. Full value range:
reasoning.effort "none" | "minimal" | "low" | "medium" | "high" | "xhigh"
Higher values mean deeper thinking, more reasoning tokens, and higher costs
reasoning.summary "auto" | null
null means the thinking summary is not returned (reasoning tokens are still billed)
For complete configuration, incompatible fields, and response fields:
➡️ Responses API → Reasoning Mode
Stateful Thinking: GPT-5.1 / 5.2 thinking models under the Responses protocol can reuse thinking state across turns via tags: ["stateful"]. See Responses API → Stateful Thinking.
When thinking is enabled under v1/responses, parameters such as temperature / top_p will also be rejected. Reasoning token billing: Reasoning tokens are counted under output_tokens; some models have a separate output_cost_per_reasoning_token rate (see Billing & Usage).
How Thinking Content Is Returned
Quick Field Reference
| Protocol | Field | Description |
|---|---|---|
v1/chat/completions (non-streaming) | choices[].message.reasoning_content | Full thinking content |
v1/chat/completions (streaming) | choices[].delta.reasoning_content | Thinking increments (separate channel from delta.content) |
v1/messages (non-streaming, Claude) | Block with type: "thinking" in content[] array | Contains text and signature |
v1/messages (streaming, Claude) | content_block_delta event, delta.type: "thinking_delta" | Thinking increments |
| Billing | usage.completion_tokens_details.reasoning_tokens | Reasoning token count, billed as output |
Streaming Parsing Notes
reasoning_contentandcontentare two independent fields that must be accumulated separately.- Thinking content is typically returned before the final reply, but there is no guarantee that thinking finishes entirely before
contentbegins. - When setting provider-specific fields (e.g.,
thinkingConfig/enable_thinking) via the OpenAI SDK: useextra_bodyin Python, useas any/@ts-expect-errorto bypass types in Node.js, and useadditionalBodyPropertiesin Java.
Notes
- Thinking token billing — The reasoning process is billed as output tokens and shares the
max_tokenslimit with visible output. See Usage & Billing. - New Claude models reject sampling parameters — Opus 4.7 / 4.8 and Sonnet 5 reject non-default
temperature/top_p/top_k; for 4.6 and earlier models, avoid passing these parameters whenthinking.type: "enabled"/"adaptive"is set. - Qwen thinking models require streaming — Non-streaming requests will be rejected.
- Gemini uses native
thinkingConfig— UsethinkingLevelfor Gemini 3+, andthinkingBudgetfor Gemini 2.5; do not mixthinkingLevelandthinkingBudget. - Gemini 3+ multi-turn / function calling requires passing back
thought_signatureverbatim — See Gemini Thought Signatures. - DeepSeek V4 sampling parameters are ignored when thinking is enabled —
temperature/top_p/presence_penalty/frequency_penaltyhave no effect but do not raise errors. - Doubao thinking variants cannot be disabled — Model names containing "thinking" represent always-on thinking; to disable, switch to a non-thinking variant in the same series. Refer to the Model List for specific models.
Related Documentation
- Model Catalog — Check whether each model supports thinking and navigate to the corresponding section on this page
- Usage & Billing — Reasoning token billing rules
- Anthropic Messages API — Claude
thinkingcontent block and streaming events - Responses API — Complete configuration for OpenAI / Azure reasoning mode
- Gemini Thought Signatures — Gemini 3+ multi-turn conversations and function calling
- Gemini Native Parameter Passthrough —
thinkingConfig/responseSchema/safety_settings - Multimodal Input — Image / audio / video input (including Doubao vision)