Reasoning
Overview
ASI:One models can reason before they answer. When reasoning is on, the model
produces a train of thought first, then writes its actual reply. You get both
back: the reasoning in reasoning_content, the answer in content.
Reasoning helps on problems with several steps, ambiguous requirements, or a
chain of logic to follow. It costs extra tokens and adds latency, so it is
something you ask for per request. Set enable_thinking explicitly on
requests where it matters, rather than leaving it to a default. See Model
support.
How you ask for reasoning depends on the endpoint:
- On
/v1/chat/completions, use the ASI:One parametersenable_thinkingandthinking_budget, described below. - On
/v1/responses, use OpenAI’s standardreasoningobject. If you are already writing against the OpenAI Responses API, nothing changes.
Turning reasoning on
Set enable_thinking to true. It is a top-level field, supported on every
ASI:One model.
cURL
Python
The OpenAI SDK does not know about enable_thinking, so pass it through
extra_body. With raw HTTP it is a normal top-level field.
Reading the reasoning
The reasoning arrives in a reasoning_content field alongside the usual
content.
On a normal response it sits on the message:
When streaming, it arrives in the delta, generally before any content deltas:
reasoning_content is null when reasoning is off. Treat it as display-only: it
is there for transparency and debugging, and you should not parse it for
structured values.
Limiting how much the model thinks
thinking_budget caps the tokens spent on reasoning. Pass a value up to
16384, or omit it to use the server-side default.
To stop the model reasoning, set enable_thinking to false. That is the switch
for turning reasoning off; thinking_budget only sizes it.
A lower budget trims latency and cost but gives the model less room on hard
problems. thinking_budget only takes effect on asi1; see
Model support.
Reasoning on the Responses API
/v1/responses also takes OpenAI’s standard reasoning object, so a client
already written against OpenAI’s API needs no changes to control reasoning here.
Each effort maps to a reasoning budget:
Any other value is rejected with a 400. That includes xhigh, which the OpenAI
SDK accepts but which would exceed the maximum budget ASI:One allows.
If you omit reasoning entirely, or send it without an effort, the request
falls back to enable_thinking and thinking_budget, so both styles work on
this endpoint and you can migrate at your own pace.
On this endpoint the reasoning comes back as a reasoning output item rather than
a reasoning_content field, with the text in that item’s content. It streams as
response.reasoning_text.delta events, followed by response.reasoning_text.done.
effort maps onto the same budget mechanism as thinking_budget, so the same
per-model support applies: on asi1 it sets the budget, and on asi1-ultra and
asi1-mini it turns reasoning on or off.
Model support
Not every parameter applies to every model.
You can send the same request body to any of the three models without branching
your code: enable_thinking works on all of them, and switching models never
turns a request into an error. Only the budget controls differ, so tune
thinking_budget on asi1 and rely on enable_thinking elsewhere.
Reasoning costs latency and tokens, so it is worth controlling per request.
Send "enable_thinking": true or false explicitly wherever the difference
matters to you rather than leaving it to a default.
Next steps
- Responses API - Where OpenAI’s
reasoningobject applies, and how reasoning streams there - Chat Completions API - Where
enable_thinkingapplies, and how reasoning streams there - Planner Mode - Break complex requests into steps executed against tools and agents
- ASI:One Models - Which model to reach for