Capabilities
Reasoning
Some models can spend extra tokens working through a problem before they answer. What you may ask for depends on the model — there is no single set of levels that works everywhere.
Read this before you hardcode a level
Reasoning is not a uniform parameter. Roughly half the chat models on xKiro ignore it completely, and the ones that support it accept different sets of values — max is valid on some and meaningless on others. Sending a level a model does not have is safe (xKiro adjusts it, see below), but assuming it took effect is not.
How to ask#
Both dialects reach the same control. What you send is an intent; xKiro translates it into whatever the model that ends up serving your request actually understands.
{ "reasoning_effort": "high" }{ "thinking": { "type": "adaptive" } } // model decides the depth
{ "thinking": { "type": "enabled", "budget_tokens": 16000 } } // a token budget
{ "thinking": { "type": "disabled" } } // offBudgets become levels
When a request carrying budget_tokens is served by a model that expresses reasoning as a level rather than a budget, the budget is converted:
| Field | Type | Description |
|---|---|---|
0 | → none | A zero budget means no reasoning. |
≤ 6,000 | → low | A short pass. |
≤ 13,000 | → medium | Balanced. |
≤ 24,000 | → high | Deep. |
> 24,000 | → xhigh | Very deep. |
Support is per model#
Every model declares which control it has and which values it accepts. The shapes currently in the catalog:
| Field | Type | Description |
|---|---|---|
No control at all | 31 of 65 chat models | Reasoning parameters are ignored entirely. Covers the Qwen family, most MiniMax models, Xiaomi, and several Mistral models. Sending reasoning_effort to these changes nothing and costs nothing. |
low · medium · high · xhigh · max | graded | The full scale. GPT-5.6 (sol / terra / luna), Claude Fable 5, Opus 4.7, Opus 4.8, Opus 5, Sonnet 5. |
low · medium · high · xhigh | graded | No max. GPT-5.4, GPT-5.4-mini, GPT-5.5. |
low · medium · high · max | graded | No xhigh. Claude Sonnet 4.6, Claude Opus 4.6. |
low · medium · high | graded | Claude Haiku 4.5 — expressed internally as a token budget. |
none · minimal · low · medium · high · xhigh · max | graded, with off | The widest scale, and the only one with minimal. GLM-5.2. |
none · high | two positions | Mistral Medium 3.5, Mistral Small. Off, or on — nothing in between. |
off · on | two positions | GLM 4.5 through 5.1, the DeepSeek family, the NVIDIA Nemotron family. A switch, not a dial. |
adaptive · disabled | two positions | MiniMax M3. Either the model decides, or reasoning is off. |
Defaults differ too — and several default to ON
Defaults across the catalog include none, off, disabled, low, medium, high and xhigh. GPT-5.5 and Claude Opus 4.7 default to xhigh; Opus 5, Opus 4.8, Sonnet 5 and Fable 5 default to high. If you send no reasoning parameter at all, those models still reason — and you still pay for it.
Finding out for your model
The catalog in the dashboard lists the control and accepted values per model. Treat it as the source of truth: the table above is a snapshot, and models are added and revised without a documentation deploy.
Four intents, and why they differ#
This is the part that trips people up most, so it is worth stating precisely.
| Field | Type | Description |
|---|---|---|
field omitted | no opinion | The model applies its own default — which, per the warning above, is frequently ON. Nothing is sent upstream on your behalf. |
none / disabled | explicitly off | Reasoning is turned off wherever the model can express that. Models declaring none, off or disabledreceive exactly that value; others get their adapter's own way of switching thinking off. |
adaptive | model decides | You want reasoning but not a fixed depth. Resolves to the model's declared default level. |
low … max | explicit depth | Used as-is when the model declares that level; otherwise adjusted downward. |
Omitting is not disabling
These are different requests with different bills. To turn reasoning off, say so: "reasoning_effort": "none" or thinking: { "type": "disabled" }. Leaving the field out lets each model do whatever it defaults to.
Levels a model does not have#
Nothing is rejected for this reason, and nothing is ever quietly upgraded. The rules, in order:
- Above the model's range → step down to the nearest level it has. Asking for
maxon GPT-5.4, which stops atxhigh, givesxhigh— not the model default, which would be lower than you asked for. - Below the model's lowest level → nothing is sent. Rounding up would cost more than you asked for, so the model runs on its own default instead.
- Two-position models get the obvious answer. Any positive level turns the switch on;
noneturns it off. There is no way to ask for "a bit" of thinking on those models. - Unrecognised values fall back to the model default. A typo does not silently disable reasoning, and is never forwarded upstream — some providers return
400for an unknown level. - Models with no control ignore the field. No error, no cost, no effect.
What this means when routing substitutes a model
If your request is served by a different model (see Overview), your reasoning intent is re-resolved against the model that actually runs. A request that asked for max may therefore run at xhigh, or on a two-position model simply run with thinking on. The intent is preserved as closely as the substitute allows; it is never escalated.
Reading the reasoning#
Where a model exposes its thinking, it arrives alongside the answer: thinking content blocks on Messages, and reasoning_content on the delta in Chat Completions. Not every model returns it, and some return only a summary.
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta as
| { content?: string; reasoning_content?: string }
| undefined;
if (delta?.reasoning_content) showThinking(delta.reasoning_content);
if (delta?.content) showAnswer(delta.content);
}Absent reasoning output does not mean absent reasoning
Some models reason without exposing it. Judge whether reasoning is active by the output token count and the latency, not by whether you can read the thinking.
Cost and latency#
- Reasoning tokens are billed as output tokens. On the same prompt, a high level can cost several times what a low one does.
- Time to first visible token grows with depth, because the model reasons before it writes. Use streaming so the wait is visible rather than blank.
- Sampling parameters are dropped while reasoning is active — reasoning models reject
temperatureandtop_p, so xKiro removes them rather than letting the provider fail the request. - If a model defaults to reasoning and you do not need it, turning it off explicitly is one of the largest single savings available.
