Reasoning Wire Formats
Use reasoning wire settings when a provider-neutral reasoning.enabled or
reasoning.effort value must be translated into a provider-specific request.
This is especially useful for local servers, gateways, and models whose effort
ladder differs from LLxprt Code's generic ladder.
The four settings on this page are supported. They persist when you save a profile. Provider APIs and model restrictions can change, so verify model value sets against the linked provider documentation before relying on them.
As of: 2026-08-20
Owner: the LLxprt Code maintainers
Configure a local OpenAI-compatible server
A custom Chat Completions endpoint is treated conservatively under auto.
Select openai when the server accepts top-level reasoning_effort:
{
"version": 1,
"provider": "openai",
"model": "local-reasoning-model",
"modelParams": {},
"ephemeralSettings": {
"base-url": "http://127.0.0.1:8000/v1",
"requires-auth": false,
"responses-mode": "chat",
"reasoning.enabled": true,
"reasoning.effort": "high",
"reasoning.effortWireFormat": "openai"
}
}
The reasoning portion of the Chat Completions request is:
{
"reasoning_effort": "high"
}
Without the explicit selector, an unknown custom Chat endpoint receives no reasoning field and LLxprt Code logs a warning. LLxprt Code does not probe the server or send several reasoning representations to discover which one works.
Supported settings
Selectors
| Setting | Valid values | Default | Profile |
|---|---|---|---|
reasoning.effortWireFormat |
auto, openai, openai-responses, anthropic, anthropic-budget, openrouter, gemini, template-kwargs, none |
auto |
yes |
reasoning.enabledWireFormat |
auto, openai, openai-responses, openrouter, thinking, gemini, template-kwargs, none |
auto |
yes |
reasoning.effortMap |
JSON object described in Effort maps | none | yes |
reasoning.enabledMap |
JSON object described in Enablement maps | none | yes |
A selector must also be compatible with the active transport. An incompatible explicit selector fails before the request is sent.
Effort selector matrix
The request fragments below show an emitted high effort, except for the
numeric Anthropic budget example.
| Selector | Compatible transport | Request fragment |
|---|---|---|
auto |
Any supported transport | Uses the automatic selection table |
openai |
OpenAI-compatible Chat | { "reasoning_effort": "high" } |
openai-responses |
OpenAI Responses and Codex | { "reasoning": { "effort": "high" } } |
anthropic |
Native Anthropic | { "output_config": { "effort": "high" } } |
anthropic-budget |
OpenAI Chat or Anthropic | { "thinking": { "type": "enabled", "budget_tokens": 8192 } } |
openrouter |
OpenAI Chat for OpenRouter | { "reasoning": { "effort": "high" } } |
gemini |
Native Gemini | Gemini-owned thinkingConfig |
template-kwargs |
OpenAI-compatible Chat | { "chat_template_kwargs": { "reasoning_effort": "high" } } |
none |
Any supported transport | No effort field; logs a warning when effort was configured |
anthropic-budget requires either reasoning.budgetTokens or a numeric entry
in reasoning.effortMap. LLxprt Code does not convert a generic effort to a
token budget by formula.
Enablement selector matrix
| Selector | Compatible transport | Request fragment or behavior |
|---|---|---|
auto |
Any supported transport | Uses the automatic selection table |
openai |
OpenAI-compatible Chat | { "reasoning_effort": "none" } when false maps to "none" |
openai-responses |
OpenAI Responses and Codex | { "reasoning": { "effort": "none" } } when false maps to "none" |
openrouter |
OpenAI Chat for OpenRouter | { "reasoning": { "enabled": true } } or { "reasoning": { "enabled": false } } |
thinking |
OpenAI Chat or Anthropic | { "thinking": { "type": "enabled" } }, adaptive, or disabled, subject to model support |
gemini |
Native Gemini | Gemini-owned thinkingConfig |
template-kwargs |
OpenAI-compatible Chat | { "chat_template_kwargs": { "enable_thinking": true } } |
none |
Any supported transport | No enablement field; logs a warning unless emitted effort already represents reasoning.enabled=true |
The openai and openai-responses enablement selectors require a string map
when enablement cannot be represented by an emitted effort. For example,
"false": "none" expresses disablement on an API that accepts none as its
effort value.
Automatic selection
| Active API or Chat host | Effort format | Enablement format |
|---|---|---|
Official OpenAI Chat, api.openai.com |
openai |
none |
| OpenAI Responses and Codex | openai-responses |
none |
OpenRouter Chat, openrouter.ai |
openrouter |
openrouter |
| Z.AI or BigModel Chat | openai |
thinking |
| Unknown OpenAI-compatible Chat endpoint | none |
none |
| Native Anthropic | anthropic |
thinking |
| Native Gemini | gemini |
gemini |
Subdomains of the listed Chat hosts are recognized. Missing or malformed base URLs are treated as unknown. Unknown endpoints stay conservative because some OpenAI-compatible servers reject reasoning fields they do not implement. Choose a selector in a profile when you know the server's accepted shape.
Maps
Effort maps
reasoning.effortMap is a JSON object with zero or more of these keys:
minimallowmediumhighxhighmax
Each value must be one of:
- a non-empty string for a string-valued effort format;
- an integer of at least
1024foranthropic-budget; nullto omit that effort deliberately and log a warning.
For string-valued formats, a missing key passes the generic effort through
unchanged. This partial map changes minimal to low; low, medium, high,
xhigh, and max retain their original strings:
{
"version": 1,
"provider": "openai",
"model": "custom-reasoning-model",
"modelParams": {},
"ephemeralSettings": {
"base-url": "https://gateway.example.com/v1",
"responses-mode": "chat",
"reasoning.enabled": true,
"reasoning.effort": "minimal",
"reasoning.effortWireFormat": "openai",
"reasoning.effortMap": {
"minimal": "low"
}
}
}
A higher-precedence map replaces the lower-precedence map as one value. Entries
are not merged. If an alias supplies six entries and a profile supplies only
minimal, the effective map contains only the profile's minimal entry.
Enablement maps
reasoning.enabledMap is a JSON object with optional true and false keys.
Each value must be a non-empty string, a boolean, or null.
The selected format further restricts the mapped value:
| Format | Accepted mapped values |
|---|---|
openai, openai-responses |
non-empty strings |
thinking |
non-empty strings accepted by the active provider and model |
openrouter, template-kwargs |
booleans |
gemini |
booleans or LOW, MEDIUM, HIGH |
none |
values are not emitted |
A missing enablement key uses the selected format's default behavior. A null
entry deliberately omits the control and logs a warning.
Exact request shapes
The fragments in this section omit unrelated request fields such as model and
messages.
OpenAI Chat
With reasoning.effortWireFormat=openai:
{
"reasoning_effort": "high"
}
The official OpenAI Chat host selects this effort shape under auto. Unknown
custom hosts do not.
OpenAI Responses and Codex
With reasoning.effortWireFormat=openai-responses:
{
"reasoning": {
"effort": "high"
}
}
For GPT-5.6 Responses models that require the Responses API, LLxprt Code changes
the generic minimal value to the wire value none. Existing Responses summary
and encrypted-reasoning controls continue to use the same reasoning request
object.
OpenRouter Chat
When reasoning is enabled and effort is present, effort represents enablement:
{
"reasoning": {
"effort": "high"
}
}
When reasoning is disabled, effort is omitted:
{
"reasoning": {
"enabled": false
}
}
Z.AI and DeepSeek Chat
A Chat endpoint that accepts coordinated thinking and effort uses separate
selectors, reasoning.enabledWireFormat=thinking and
reasoning.effortWireFormat=openai:
{
"thinking": {
"type": "enabled"
},
"reasoning_effort": "high"
}
With reasoning.enabled=false, a supported map can emit
thinking.type=disabled; the effort field is omitted.
Native Anthropic adaptive thinking
Claude Opus 5 aliases select thinking enablement and anthropic effort:
{
"thinking": {
"type": "adaptive",
"display": "summarized"
},
"output_config": {
"effort": "high"
}
}
If reasoning.includeInResponse is false, adaptive thinking uses
"display": "omitted". reasoning.enabled=false emits
{ "thinking": { "type": "disabled" } } only on models that support disabled
thinking, and effort is omitted.
Explicit Anthropic budget
A legacy model with budgeted thinking needs a direct budget or a numeric
map. This example uses a direct reasoning.budgetTokens value:
{
"thinking": {
"type": "enabled",
"budget_tokens": 8192
}
}
A numeric map can produce the same request:
{
"reasoning.effortMap": {
"high": 8192
}
}
The numeric map is valid only with
reasoning.effortWireFormat=anthropic-budget.
reasoning.budgetTokens is direct and takes precedence over a mapped budget.
Gemini 3
Gemini 3 uses thinking levels. The default generic mapping is minimal and
low to LOW, medium to MEDIUM, and high, xhigh, and max to HIGH:
{
"thinkingConfig": {
"includeThoughts": true,
"thinkingLevel": "HIGH"
}
}
An effort map can provide LOW, MEDIUM, or HIGH directly. Gemini 3 does not
use reasoning.maxTokens; LLxprt Code warns if it is configured.
Gemini 2
Gemini 2 uses a token budget rather than a thinking level:
{
"thinkingConfig": {
"includeThoughts": true,
"thinkingBudget": -1
}
}
-1 asks Gemini to choose the budget. Set reasoning.maxTokens for a specific
budget. reasoning.enabled=false emits a zero budget on Gemini 2. Generic effort
does not convert to a Gemini 2 token budget and is omitted with a warning.
Template kwargs
vLLM and other template-driven servers can receive both controls inside
chat_template_kwargs:
{
"chat_template_kwargs": {
"enable_thinking": true,
"reasoning_effort": "high"
}
}
Unrelated template options are preserved during the merge.
Profile examples
vLLM chat_template_kwargs
Use this shape when the served chat template reads both kwargs:
{
"version": 1,
"provider": "openai",
"model": "served-reasoning-model",
"modelParams": {
"chat_template_kwargs": {
"tokenize": false
}
},
"ephemeralSettings": {
"base-url": "http://127.0.0.1:8000/v1",
"requires-auth": false,
"responses-mode": "chat",
"reasoning.enabled": true,
"reasoning.effort": "high",
"reasoning.enabledWireFormat": "template-kwargs",
"reasoning.effortWireFormat": "template-kwargs"
}
}
The unrelated tokenize sibling remains in chat_template_kwargs.
OpenRouter
The built-in alias already supplies both openrouter selectors. This profile
makes the selected policy visible:
{
"version": 1,
"provider": "openrouter",
"model": "provider/reasoning-model",
"modelParams": {},
"ephemeralSettings": {
"auth-key-name": "openrouter-prod",
"reasoning.enabled": true,
"reasoning.effort": "high",
"reasoning.enabledWireFormat": "openrouter",
"reasoning.effortWireFormat": "openrouter"
}
}
Anthropic and Claude Opus 5
{
"version": 1,
"provider": "anthropic",
"model": "claude-opus-5",
"modelParams": {},
"ephemeralSettings": {
"auth-key-name": "anthropic-prod",
"reasoning.enabled": true,
"reasoning.effort": "high",
"reasoning.enabledWireFormat": "thinking",
"reasoning.effortWireFormat": "anthropic",
"reasoning.effortMap": {
"minimal": "low"
},
"reasoning.enabledMap": {
"true": "adaptive",
"false": "disabled"
}
}
}
Codex GPT-5.6
The built-in codex alias ships these reasoning defaults for GPT-5.6 Sol,
Terra, and Luna. The explicit profile below makes the selected policy visible:
{
"version": 1,
"provider": "codex",
"model": "gpt-5.6-sol",
"modelParams": {},
"ephemeralSettings": {
"reasoning.effort": "medium",
"reasoning.effortWireFormat": "openai-responses",
"reasoning.summary": "auto"
}
}
The reasoning portion of the Responses request is:
{
"reasoning": {
"effort": "medium",
"summary": "auto"
}
}
The generic minimal effort becomes the wire value none for these GPT-5.6
Responses models.
Z.AI GLM-5.3
The zai alias uses its Anthropic-compatible endpoint, and glm-5.3 is the
alias default model. The profile below mirrors the shipped GLM-5.3 defaults:
{
"version": 1,
"provider": "zai",
"model": "glm-5.3",
"modelParams": {},
"ephemeralSettings": {
"auth-key-name": "zai-prod",
"reasoning.enabled": true,
"reasoning.effort": "high",
"reasoning.enabledWireFormat": "thinking",
"reasoning.effortWireFormat": "anthropic",
"reasoning.effortMap": {
"minimal": "low",
"low": "low",
"medium": "high",
"high": "high",
"xhigh": "max",
"max": "max"
},
"reasoning.enabledMap": {
"true": "enabled"
}
}
}
The reasoning portion of the Anthropic request is:
{
"thinking": {
"type": "enabled"
},
"output_config": {
"effort": "high"
}
}
No budget_tokens value is fabricated for GLM models; the thinking type is
the only enablement field.
Kimi K3 and Kimi for Coding K2.7
The built-in kimi alias selects different shapes per model. For kimi-k3:
{
"version": 1,
"provider": "kimi",
"model": "kimi-k3",
"modelParams": {},
"ephemeralSettings": {
"auth-key-name": "kimi-prod",
"reasoning.enabled": true,
"reasoning.effort": "max",
"reasoning.enabledWireFormat": "openai",
"reasoning.effortWireFormat": "openai",
"reasoning.effortMap": {
"minimal": "low",
"low": "low",
"medium": "high",
"high": "high",
"xhigh": "max",
"max": "max"
}
}
}
The reasoning portion of the Chat request carries only top-level effort:
{
"reasoning_effort": "max"
}
For kimi-for-coding (K2.7), the alias instead selects enablement-only
thinking:
{
"version": 1,
"provider": "kimi",
"model": "kimi-for-coding",
"modelParams": {},
"ephemeralSettings": {
"auth-key-name": "kimi-prod",
"reasoning.enabled": true,
"reasoning.effortWireFormat": "none",
"reasoning.enabledWireFormat": "thinking",
"reasoning.enabledMap": {
"true": "enabled"
}
}
}
The reasoning portion of the Chat request is:
{
"thinking": {
"type": "enabled"
}
}
K2.7 emits no effort field; an attempted disablement is suppressed with a warning because the shipped map has no supported disable value.
Deliberate suppression with none
Use none when you want the model or server to use its own reasoning defaults:
{
"version": 1,
"provider": "openai",
"model": "server-managed-reasoning-model",
"modelParams": {},
"ephemeralSettings": {
"base-url": "http://127.0.0.1:8080/v1",
"requires-auth": false,
"responses-mode": "chat",
"reasoning.enabled": true,
"reasoning.effort": "high",
"reasoning.enabledWireFormat": "none",
"reasoning.effortWireFormat": "none"
}
}
This is deliberate suppression, not silent fallback. LLxprt Code logs a warning for each configured generic control that produces no wire value.
Precedence and explicit native parameters
Each selector and map is resolved independently in this order, highest first:
- An explicit profile or session value
- The last matching model default from the active provider alias
- The provider alias default
autofor selectors, or no map for maps
Later matching model rules win. Explicit profile values survive provider and model switches. Maps replace as a whole rather than merging entries.
Explicit native reasoning fields in modelParams remain authoritative. If a
native reasoning field collides with automatic translation, LLxprt Code leaves
the explicit field unchanged and adds no competing representation. Collisions
include:
reasoningthinkingreasoning_effortparse_reasoningon OpenAI-compatible Chatchat_template_kwargs.reasoning_effortchat_template_kwargs.enable_thinkingoutput_config.effort- native Gemini
thinkingConfig
Unrelated nested siblings are merged where the provider supports merging. For
example, chat_template_kwargs.tokenize and output_config.service_hint remain
when translated reasoning adds a sibling field.
LLxprt Code emits only the selected representation. It does not send OpenAI, Anthropic, and OpenRouter reasoning shapes together.
Disablement, suppression, and warnings
reasoning.enabled=false suppresses generic effort. If the selected format and
model support a disable form, LLxprt Code emits it. If no disable form exists,
LLxprt Code omits effort and logs a warning.
A warning is also logged when:
autocannot identify a safe format for an unknown Chat endpoint;- a selector is explicitly
none; - a selected map entry is
null; anthropic-budgethas no direct or mapped numeric budget;- a configured generic control cannot be represented by the selected format or model.
The warning identifies the provider, model, selected format, and omitted generic setting without printing credentials. Invalid maps and transport-incompatible selectors fail before network I/O.
Alias policy and provider capabilities
A built-in alias records defaults for known models. It does not claim that every model exposed by that provider accepts the same fields or values. Provider APIs may support controls that LLxprt Code does not enable by default. You can use a profile selector when the active transport supports the shape and the provider documents the model behavior.
Model-agnostic local aliases, including LM Studio and llama.cpp, do not set an
effort selector. The model served at the endpoint determines whether openai,
template-kwargs, or none is appropriate.
Shipped model restrictions
Each row separates the request shape the alias selects from the model value restrictions the same rule encodes.
| Alias or model | Request shape | Accepted model values |
|---|---|---|
Claude Opus 5, anthropic/claudecode |
Native thinking.type plus output_config.effort |
Enabled maps to adaptive, disabled maps to disabled; generic minimal maps to low |
| Codex GPT-5.6 Sol, Terra, and Luna | Responses reasoning.effort |
Alias default is medium; generic minimal becomes wire none for these GPT-5.6 Responses models |
| OpenAI GPT-5.6 family | Chosen transport owns the shape: Responses translation when routing selects Responses; a custom Chat endpoint needs a Chat-compatible selector chosen in a profile | Same GPT-5.6 Responses minimal to none policy when served over Responses |
| Kimi K3 and K3 256K | Top-level reasoning_effort; no thinking object |
Accepted ladder is low, high, max; generic values map to that three-value ladder; alias default is max for K3 and high for K3 256K |
| Kimi for Coding K2.7 | thinking.type=enabled only; no effort field |
Disablement has no supported wire value in the shipped map, so it is omitted with a warning |
| Z.AI GLM-5.3 | The zai alias default model on its Anthropic-compatible endpoint: thinking.type plus output_config.effort |
Generic minimal/low map to low, medium/high to high, xhigh/max to max; disablement is omitted with a warning |
| Z.AI GLM-5.2 | The zai alias uses thinking.type plus output_config.effort |
Explicit minimal map emits native minimal on the wire; low/medium/high map to high, xhigh/max to max; enabled and disabled are both supported |
| DeepSeek V4 family | thinking.type plus top-level reasoning_effort |
Generic minimal/low map to low, medium/high/xhigh to high, and max stays max |
| Fireworks MiniMax M3 | Top-level reasoning_effort; no Anthropic-style thinking field is added |
Disabled maps to effort none |
For Z.AI's OpenAI-compatible Chat endpoint, select openai effort and thinking
enablement to get the coordinated Chat shape shown above. Endpoint protocol
choice changes the field location even when the model effort ladder is the same.
Provider references
Provider documentation changes over time. These links describe the request shapes and model restrictions used for the settings and defaults above:
- OpenAI Chat API
- OpenAI Responses API
- OpenRouter reasoning parameters
- Anthropic extended thinking
- Anthropic effort
- Z.AI GLM-5.3
- Z.AI reasoning parameters
- Z.AI Coding Plan models
- Kimi K3 reasoning controls
- vLLM reasoning outputs and template kwargs
- Fireworks reasoning controls
- Fireworks Chat Completions API
- DeepSeek thinking mode