Reasoning Effort Is an Inference-Time Systems Knob

Part 5 of 5 The Life of a Token Across the LLM Stack

In brief

In brief

Reasoning effort is a setting for each request, such as low, medium or high. It guides a trained model’s internal work before the answer. More effort can help with difficult tasks but adds tokens, latency, cost and cache time. Select effort with task-level evaluations.

  • Reasoning effort, model choice, output verbosity, and a hard token limit control different parts of an inference request.
  • More reasoning tokens add generated work. A higher effort label does not set a fixed token budget or guarantee quality.
  • Use task-level evaluations to select production effort routing. Measure quality, latency, token use and cost together.

How hidden reasoning tokens turn answer quality into a latency, cost, and capacity tradeoff.

In this example, an application programming interface (API) returns a 140-word answer. The usage record gives 1,800 generated output tokens.

A large language model (LLM) with reasoning capability may use most of those tokens for internal work before it writes the visible answer. A short answer can follow a long request.

Near a model name, low, medium and high can look like writing preferences. They guide the quantity or type of work that a trained model does at inference time. That work still runs through Transformer layers, graphics processing unit (GPU) kernels, memory and the serving scheduler.

Sebastian Raschka’s overview shows how supervised fine-tuning (SFT), reinforcement learning (RL), token costs, chat templates or hard budgets can make effort modes. I start with a model that already supports the control and examine its effects on inference.

Token count measures only part of that behavior. More tokens might explore a better approach, repeat a failed one, use a tool or get stuck. An effort mode changes model behavior. It does not set the number of steps or guarantee quality.

Reasoning effort guides the quantity of model work for a request’s answer.

The choice can change accuracy. It also changes the first useful output’s time, the request’s active time, billed tokens, context left and capacity for other requests.

1. Count generated work beyond the visible answer

A reasoning request can generate more than the text shown to the user.

A request can involve several token categories:

  • Input tokens encode the prompt, system instructions, tool definitions, and conversation state supplied to the model.
  • Reasoning tokens represent model-generated intermediate work. Different models and APIs may have different representations. The tokens may be hidden, summarized, shown as a thinking trace, or represented as opaque reasoning items.
  • Visible output tokens make the answer shown to the user.
  • Protocol and tool tokens encode function calls, structured arguments, tool results, and control messages across one or more model turns.

Providers account for these categories differently. Use these categories to compare visible content with generated work.

OpenAI’s reasoning guide says that reasoning tokens are in usage, occupy context during generation and are billed as output tokens. Their readable chain-of-thought is hidden. Open-weight models may show traces between tokens such as <think> and </think>. Autoregressive generation is necessary in the two cases.

For diagnosis, use these categories for generated tokens:

Ngenerated=Nreasoning+Nvisible+Ncontrol N_{\mathrm{generated}} = N_{\mathrm{reasoning}} + N_{\mathrm{visible}} + N_{\mathrm{control}}

These terms are not necessarily separate API fields. One agent task can also have several model calls. Tool results can become new input, with reasoning between calls.

In autoregressive generation, step t+1t+1 uses the selections from step tt. Batching shares a GPU step across requests. Speculative decoding can verify several proposed tokens together. The dependency in each request stays.

If higher effort generates more reasoning tokens, these tokens add decode work even when the final answer stays concise.

Fig. 1. An effort signal selects learned behavior, with adaptive token use rather than a fixed token count. Evaluation supplies data for future settings. A hard runtime cap separately sets a limit on generation. Full interactive figure

2. Compare learned modes with forced stopping

An effort label has an effect only if the model learned what the label means.

The string “Reasoning effort: high” can control one post-trained model. For a different model, it can be ordinary prompt text. A model must learn the mode for the signal to have its intended effect.

The table gives three mechanisms for the quantity of reasoning. They come from four reports: gpt-oss, Qwen3, Inkling and s1.

Mechanism Where the control has an effect Example Resource implication
Learned mode conditioning policy learned in post-training gpt-oss effort signal and Qwen3 mode fusion Token use stays adaptive.
Cost-conditioned learning reward for correctness with generation cost included Inkling's effort-conditioned RL The inference signal selects a learned quality/cost compromise.
Runtime intervention The generation controller stops or continues thinking. Qwen3 thinking budget and s1 budget forcing The controller changes the permitted trajectory length.

Qwen3, Section 4.3, uses thinking examples together with non-thinking examples. Its controller can insert a stop-thinking instruction at a threshold so the model answers from the accumulated trace. That is different from an arbitrary API output cap that may stop without a useful answer.

In Inkling, RL uses different effort signals and costs for each token. Higher token cost favors economical successful trajectories. gpt-oss instead gives an accessible example of a model interface with trained effort modes.

A learned low mode can use more tokens on a difficult item. A hard cap only sets a limit on generation. s1 uses budget forcing at runtime. It ends thinking at a maximum budget. To extend thinking, it suppresses the end-of-thinking token and appends “Wait”. Its ablations compare budget forcing with other length controls, such as token-count conditioning and rejection sampling. In those tests, budget forcing gave the best control and scaling. Excessive continuation can loop, and context stays finite.

Training changes the reasoning paths that a model tends to select and the time when it stops. Runtime controls determine which paths may continue. Token use and quality still depend on the task.

Static comparison: learned effort modes and token-cost training shape model behavior. Runtime controls separately stop or extend generation.
Fig. 2. SFT and effort-conditioned RL teach behavior. Runtime controls stop or extend generation. An interface label alone cannot identify the training recipe.

3. Model, effort, limits and verbosity

These API controls have effects on cost or response length in different ways:

Control What changes What it does not guarantee
Model choice Weights, architecture, capability, price, and often speed A larger model is not always cheaper at lower effort or better on each task.
Reasoning effort The learned policy for allocating internal work A fixed reasoning-token count or monotonic quality improvement
Hard output limit Maximum generated tokens allowed for the request A graceful transition from unfinished reasoning to a correct answer
Verbosity Desired detail in the visible answer Less internal reasoning or lower total inference cost

Model choice selects the machine. Effort guides its approach to the task. A token limit puts a limit on total generation. Verbosity changes the visible answer’s detail.

These controls can change independently. A high-effort model can give a short answer after substantial internal work. A low-effort model can give a long visible report because the requested format has much detail. A request can also reach its hard output limit during reasoning and give no useful visible answer at all.

The API syntax is specific to the provider. In OpenAI's Responses API, a request can set effort as follows:

const response = await client.responses.create({
  model: "gpt-5.6",
  reasoning: { effort: "medium" },
  input: "Review this rollout plan for failure modes."
});

console.log({
  answer: response.output_text,
  reasoningTokens:
    response.usage.output_tokens_details.reasoning_tokens
});

The example uses the gpt-5.6 alias. As of July 2026, this alias routed to GPT-5.6 Sol (snapshot gpt-5.6-sol). Its model page documents medium as the default effort. Supported labels and defaults depend on the model.

Examine usage and the label together. Two medium-effort requests may use different quantities of reasoning as the model adapts to each task.

Static control map: model choice, effort, output cap and verbosity have effects on different parts of a request in parallel.
Fig. 3. Model choice, effort, output limits and verbosity control different parts of a request. Brief answers can follow long reasoning, and a cap can stop generation before a correct answer.

4. Examine internal generation across the stack

You can use the same four views from the earlier chapters to examine internal generation.

In the token view, each reasoning token is an autoregressive decision. Subsequent steps use it, even when the application cannot read it.

In the compute view, these steps run Transformer blocks and kernels. Architecture, batching, speculation and provider implementation determine their execution cost.

In the memory view, working context and cached state are necessary for generation. OpenAI documents context use by reasoning tokens. If a self-hosted model emits a normal-token thinking trace, it uses the sequence’s key/value (KV) cache path. A hosted provider may compress, discard or persist internal state differently. Its undocumented allocation stays unknown.

In the request view, reasoning, tool calls/results and answer generation keep work active. Longer requests can keep cache longer and use more decode iterations. They can also widen completion-time distributions.

Fig. 4. This request example has lanes for visible output, model work, tool waits and retained history. Until the answer, the user may see only an optional preamble. A tool wait is different from active model computation. Longer work can keep state longer. Full interactive figure

A tool-free request can use the series introduction’s latency breakdown:

Trequest≈Tqueue+Tprefill+Treasoning+Tvisible+Tstream T_{\mathrm{request}} \approx T_{\mathrm{queue}} + T_{\mathrm{prefill}} + T_{\mathrm{reasoning}} + T_{\mathrm{visible}} + T_{\mathrm{stream}}

For an agent, add tool execution and the model turns around it:

Tagent≈Tqueue+∑k=1K(Tmodel,k+Ttool,k) T_{\mathrm{agent}} \approx T_{\mathrm{queue}} + \sum_{k=1}^{K} \left( T_{\mathrm{model},k} + T_{\mathrm{tool},k} \right)

The equations give causes of latency. Real systems overlap serialization, scheduling, networking, tool work and GPU execution. Some models interleave visible output with reasoning. The equations still show that a short answer can come from a long request.

Measure first useful output separately

Traditional streaming metrics assume the first token is useful output. A reasoning model can make that assumption incorrect in several ways.

An API may hide the reasoning trace, so the first token of the visible answer arrives only after substantial model work. A different system may stream a short preamble, do more reasoning, call a tool, and then continue. An open-weight model may stream its thinking trace even though the product UI subsequently collapses it.

For production measurement, record these different times:

  • Time to first event
  • Time to first visible token
  • Time to the first useful content in the answer
  • Time to final answer
  • Time spent waiting on tools

A first event can make the UI feel responsive while total task latency stays unchanged. Measure that presentation benefit. Do not treat it as cheaper reasoning.

Schedule long requests alongside short ones

A small group of requests that generate tens of thousands of tokens can have effects on cache, batches and admission. This is possible even when most low-effort requests complete quickly. Capacity depends on that distribution and its average.

A continuous-batching scheduler can put long and interactive requests in the same batches, isolate queues or use asynchronous capacity. Each has a tradeoff between utilization, fairness and latency. High-effort traffic becomes a workload class at scale.

Calculate cache size over time

Use the hypothetical model from the synthesis chapter: self-hosted full attention. It uses 128 KiB of KV for each retained position and a 4096-token prompt. Keep its illustrative decode interval of 40 ms for each generated position. The model does not include prefill, pauses, tools, prefix sharing or compression.

Generating 512 retained positions keeps the request decoding for 20.48 seconds and ends with 576 MiB of KV cache that belongs to this request alone. The decode time for 4096 generated positions is 163.84 seconds. The final cache size is 1 GiB. The final answer could be equally short in the two cases. The retained reasoning positions make the difference.

A useful quantity is cache occupancy integrated over time. With constant interval Δt\Delta t, prompt length S0S_0, generated length NgN_g, and cache bytes for each position qKVq_{\mathrm{KV}},

AKV≈qKVΔt(S0Ng+Ng22). A_{\mathrm{KV}}\approx q_{\mathrm{KV}}\Delta t \left(S_0N_g+\frac{N_g^2}{2}\right).

This continuous-growth approximation gives the byte-seconds. The requests use 10.88 and 122.88 GiB·s: about 11.3 times the area for eight times the generation. Retained prompt history and a growing suffix give the relation between token cost and capacity over time.

For a stable decode workload of admitted requests, Little's law uses the admission rate λ\lambda (requests/s) and mean active time E[W]E[W]. The mean number of active requests is Rˉ=λE[W]\bar R=\lambda E[W]. In the same way, the mean size of the private decode cache is λE[AKV]\lambda E[A_{\mathrm{KV}}]. These are averages. They do not guarantee capacity during bursts or make an overloaded queue stable. Observed traces are necessary for variable decode time and cache retention.

This model is for an ordinary self-hosted sequence. Hosted reasoning uses generation resources, but unknown cache compression, discard or retention prevents calculation of the same curve from API usage alone.

5. Compare accepted results with resource cost

The papers ask different questions about quality gained from more work. Compare their mechanisms and limits before you treat their benchmark scores as one scaling curve.

Question Source and intervention What it shows Limits
Can a fixed model use a larger sequential budget? s1, budget-forcing ablations Controlled continuation can give better results in its math tests. Gains flatten. Excessive continuation can repeat. Context is finite.
Does training create more useful reasoning behavior? DeepSeek-R1, R1-Zero training trajectory Correctness rewards accompany longer, more capable trajectories. A change of checkpoints does not isolate a causal benefit from length alone.
Does one model benefit equally on all tasks? Qwen3, budget curves and long-context evaluation Tested reasoning tasks benefit. Retrieval can fare worse in thinking mode. Budget, task and sampling protocol matter.
Can a better selection signal decrease generated work? Think Deep, Not Just Long, Think@n and prefix-length ablation Layerwise prediction revision can guide early sample selection. Internal activations are necessary. It reports token savings, not latency.

Think Deep measures where intermediate-layer token predictions converge toward the final-layer distribution. That is an internal prediction statistic, not a direct semantic grade of a written trace. Its 48-sample, 50%-retention experiments include tests of early selection on mathematical/scientific benchmarks. Appendix analysis also cautions against comparing the ratio across models or effort modes. Projecting intermediate states and scoring candidates also has a runtime cost that a deployment must include. A closed API with only usage data cannot implement that measurement directly.

I distinguish buying more work from allocating work better. A longer attempt extends one history. Parallel attempts make several histories. Early selection and verification add their own computation. Include the cost of each part. Compare results with the same task acceptance rule.

A long failed attempt may reflect uncertainty or repetition. Token count measures cost, not value. The value is in the result: a corrected error, a passed test or a correct answer.

For production, express the objective for each completed task:

utility(e)=quality(e)−λc cost(e)−λl latency(e)−λf failure(e) \mathrm{utility}(e) = \mathrm{quality}(e) - \lambda_c\,\mathrm{cost}(e) - \lambda_l\,\mathrm{latency}(e) - \lambda_f\,\mathrm{failure}(e)

Here ee is the effort setting, and the coefficients represent the product's actual priorities. An offline code review can tolerate minutes if it catches a dangerous migration bug. A voice interface cannot tolerate that delay. A customer-support classification should not spend high-effort tokens proving an obvious label. A research agent may justify them when a weak answer would waste hours of human work.

Token price alone is also incomplete. A smaller model at higher effort may compete with a larger model at lower effort for some tasks. The smaller model can still be slower if it generates a much longer trace. A larger model may solve the same item with a smaller number of tokens. It may have a higher price for each token. Which combination wins is empirical.

Optimize cost for each accepted result with a latency objective.

6. Select an effort level with task evaluations

I would select a small effort-routing policy from representative task evaluations, or evals. I would not give each request medium or high effort by default.

Divide the workload into classes that have different failure costs:

Workload class Starting point What to examine
Extraction, formatting, simple classification none or low Schema validity, latency, false positives
Bounded drafting or direct code edits low Instruction following, test pass rate, retries
Multi-step analysis and tool use medium Task completion, tool errors, reasoning tokens
Difficult debugging, planning, or review high Defect discovery, support for each finding, tail latency
Rare asynchronous tasks with quality as the priority Highest supported mode Marginal gain over high, total cost, timeouts

These are evaluation starting points. A simple-looking request can hide a hard domain constraint, and a long prompt can ask for a trivial lookup. Prompt length alone is a poor router.

For each workload class, run the same tasks across adjacent effort levels. Record these measurements:

  • Task success or grader score
  • Visible answer correctness and completeness
  • Reasoning and total generated tokens
  • Time to first useful output and total wall time
  • Tool-call count, retries, and tool failures
  • Incomplete or timed-out responses
  • Cost for each accepted result
Fig. 5. Offline evals use the same acceptance rule. Online verification may cause a supported retry at higher effort if the remaining budget is sufficient. Failed attempts add cost and latency. Full interactive figure

Select the lowest effort on the quality/latency/cost Pareto frontier. A setting is on that frontier when no other setting is better on one objective without being worse on another. If high has twice the cost of medium with no improvement in accepted outcomes, its larger budget bought no gain.

Escalation can help when task difficulty is not easy to predict. A system can try a cheaper pass. It can find a failed test, missing evidence, a low verifier score or explicit uncertainty. It can then retry at higher effort. That decreases computation when the first pass works.

It also has a cost. A failed low-effort attempt uses tokens and wall time before the expensive attempt starts. For predictably difficult tasks or strict deadlines, a higher starting level that is appropriate can have a lower cost than a sequence of modes.

Select effort with outcome signals: verifier results, failed tests, unresolved constraints, tool state and remaining latency budget. Message length or words such as “analyze” are weak substitutes.

Record effort in traces and dashboards. Latency or cost can increase after a model update. The label shows which of these three caused the change:

  • Requests became slower at the same effort.
  • The router sent more traffic to higher modes.
  • The model used more reasoning tokens within a mode.

Without the label, all three look like one rising average.

Use effort as part of serving policy

Effort starts as a model input and changes the generated work that kernels execute. Context and cache may stay live longer. The engine shares capacity with shorter traffic. The product pays for generation and waiting.

Select effort for the task, failure cost, deadline, model and surrounding workload.

I would pay for higher effort when evaluations show an improvement worth its cost.

Key takeaways

  • Reasoning effort selects behavior learned during post-training. Token use still adapts for each task, and untrained models read the label as plain prompt text.
  • Model choice, reasoning effort, hard output limits, and visible-answer verbosity control different parts of a request.
  • Hidden reasoning still causes generated work, context pressure, active request time, and billed output tokens.
  • Higher effort can give better results on hard tasks, but gains are task-dependent and may saturate. Judge quality by accepted results, not token length.
  • I recommend that production systems select effort from evals. I recommend that systems measure quality, latency, token use, failures and cost together for each accepted task.

Series navigation

Citation

Use this citation:

Ji, Wenbo. “Reasoning Effort Is an Inference-Time Systems Knob”. fusheng-ji.github.io (July 2026). https://fusheng-ji.github.io/blog/posts/reasoning-effort-inference-systems/

Or use the BibTeX entry:

@article{ji2026reasoningeffortinferencesystems,
  title = {Reasoning Effort Is an Inference-Time Systems Knob},
  author = {Ji, Wenbo},
  journal = {fusheng-ji.github.io},
  year = {2026},
  month = {July},
  url = {https://fusheng-ji.github.io/blog/posts/reasoning-effort-inference-systems/}
}

References


Note: This blog was drafted and polished with assistance from ChatGPT, based on my reading of the cited reasoning-model reports and API documentation.

Updated 

Related notes