<!-- llms-explorer concept facts · https://llms-explorer.com/tree/reasoning-field-naming-across-servers/ · pack 2026-10-05 · ~910 tokens -->

# Reasoning field naming across servers

> vLLM RFC #27755 (opened 2025-10-29 by hmellor) proposed removing `reasoning_content` completely after PR #27752 had already switched output to `reasoning` with backwards compatibility

Parent: [Mac local LLMs: Chat templates, reasoning and tool calling](https://llms-explorer.com/tree/mac-local-llms-chat-templates-reasoning-and-tool-calling/) · 1 facets · 12 facts · page: https://llms-explorer.com/tree/reasoning-field-naming-across-servers/

## Facts

- vLLM RFC #27755 (opened 2025-10-29 by hmellor) proposed removing `reasoning_content` completely after PR #27752 had already switched output to `reasoning` with backwards compatibility — [source](https://github.com/vllm-project/vllm/issues/27755)
- vLLM PR #33402 'Remove reasoning_content' was merged on 2026-01-30 (commit c5113f6) after months of deprecation with no objection on the RFC — [source](https://github.com/vllm-project/vllm/pull/33402)
- The stated reason for the vLLM rename was OpenAI's guidance for gpt-oss: return CoT in a `reasoning` field on Chat Completions even though the official API has no such field — [source](https://github.com/vllm-project/vllm/issues/27755)
- OpenAI's raw-CoT guide tells Chat Completions implementers to follow OpenRouter: `reasoning` on the message, `reasoning` on stream deltas, and omit it when the request sets `reasoning: {exclude: true}` — [source](https://cookbook.openai.com/articles/gpt-oss/handle-raw-cot)
- The same guide says previous reasoning should be accepted back on later requests as `reasoning` and handled per the Harmony replay rules — [source](https://cookbook.openai.com/articles/gpt-oss/handle-raw-cot)
- OpenRouter accepts `reasoning_content` as an input alias that behaves identically to `reasoning` — [source](https://openrouter.ai/docs/use-cases/reasoning-tokens)
- OpenRouter also defines `message.reasoning_details` (array, also in `delta.reasoning_details`) for encrypted or summarised reasoning types; it must be passed back unmodified, while models that return plain strings can use `reasoning` — [source](https://openrouter.ai/docs/use-cases/reasoning-tokens)
- A vLLM RFC participant (Riatre, 2025-10-31) pointed out that the OpenRouter convention OpenAI cites uses `reasoning_details` for replay, so a `reasoning`-only rename may need a second migration; the RFC left input-side replay out of scope (bbrowning, 2025-10-30) — [source](https://github.com/vllm-project/vllm/issues/27755)
- llama.cpp discussion #15362 (aldehir, 2025-08-16) asked for a configurable reasoning field because several clients, including OpenAI's own gpt-oss test, expect `reasoning` while llama-server emits `reasoning_content` — [source](https://github.com/ggml-org/llama.cpp/discussions/15362)
- In #15362 ggerganov suggested sending both `reasoning` and `reasoning_content` until the community converged; mostlygeek objected that two keys would confuse the API and proposed a flag such as `--reasoning-format openai` instead — [source](https://github.com/ggml-org/llama.cpp/discussions/15362)
- Ollama's native API uses `message.thinking` (chat) and `thinking` (generate), and `think` accepts true, false, null or a model-defined level string taken from `/api/show` `thinking.values`; numbers are not supported — [source](https://docs.ollama.com/capabilities/thinking)
- Inferred: a client written for the 2025 llama.cpp and vLLM convention (`reasoning_content`) now needs to read three keys (`reasoning_content`, `reasoning`, `thinking`) and write back the one each server's template reads; no server in the sources documents accepting all three on input. — source: `asserted`
