# Reasoning

Control model-dependent reasoning without confusing internal and visible token budgets.

Reasoning is model-dependent. Check `supported_features` and `model_info` in `GET /v1/models` before sending reasoning controls.

## One total completion budget

`max_completion_tokens` in Chat Completions and `max_output_tokens` in Responses limit **all** completion tokens. Reasoning tokens and visible answer tokens share that limit. `reasoning.max_tokens` is a sub-budget; it never expands the total.

If reasoning consumes the remaining budget, the response can end with `finish_reason:"length"` and little visible text. Increase the total completion budget or reduce the reasoning effort.

## Chat Completions controls

```json
{
  "model": "qwen/qwen3.8-27b",
  "messages": [{"role": "user", "content": "Compare two retry strategies."}],
  "max_completion_tokens": 1200,
  "reasoning": {"effort": "medium", "max_tokens": 700}
}
```

Compatible controls include `reasoning.enabled`, `reasoning.effort`, `reasoning.max_tokens`, `reasoning.exclude`, and the top-level `reasoning_effort` alias. Exact efforts are published per model. Do not assume that a value accepted by one model is accepted by every reasoning model.

## Binary reasoning models

Some models expose reasoning as an on/off policy rather than a continuous token budget. For these models, `none` disables reasoning and supported non-zero efforts enable the same mode. `reasoning.max_tokens` may be unsupported. The model catalog is authoritative.

## Visibility and usage

KosCompute does not expose private chain-of-thought or reasoning summaries. Usage can report `completion_tokens_details.reasoning_tokens` in Chat Completions or `output_tokens_details.reasoning_tokens` in Responses. These counters are suitable for accounting and budget diagnostics, not for reconstructing private reasoning.

Structured output and some vision routes can disable thinking to preserve schema reliability or modality constraints. Treat this as model/route behavior, not a universal rule.
