Summary
Thinking mode currently only works on the KServe :predict endpoint via the reasoning flag. The OpenAI chat completions endpoint always disables it, and when enabled the <think> trace comes back inline in the text instead of a separate field.
Technical notes
apply_chat_template() in the model server hardcodes enable_thinking=False — we could support vLLM's chat_template_kwargs to toggle it per request. The engine already sets reasoning_parser="qwen3" but that only applies in vLLM's own OpenAI serving layer, so we need to split the <think> block ourselves when building the response.
We should also expose vLLM's per-request thinking_token_budget (see docs), promised to the PSI team in T433470#12202348.
Acceptance criteria
- Thinking mode can be toggled per request on the OpenAI chat completions endpoint
- The thinking trace is returned as a separate field (reasoning) instead of inline text
- thinking_token_budget can be set per request