Reasoning

Configure reasoning parsers for models that emit thinking content
View as Markdown

Some models emit reasoning or thinking content separately from their final response. Dynamo can split that output into reasoning_content and normal assistant content by configuring --dyn-reasoning-parser on the backend worker.

This page covers parser names for the default Dynamo-native path. For a comparison of all preprocessing options (including vLLM/SGLang chat-processor swap and tokenizer delegation) and routing compatibility, see Chat Processor Options.

Prerequisites

To enable reasoning parsing, launch the backend worker with:

  • --dyn-reasoning-parser: select the reasoning parser from the supported list below
$# <backend> can be sglang, trtllm, vllm, etc. based on your installation
$python -m dynamo.<backend> --help

Some models need both a reasoning parser and a tool call parser. For supported tool call parser names, see Tool Calling.

Supported Reasoning Parsers

The table below lists the currently supported reasoning parsers in Dynamo’s registry. The Upstream name column shows where the vLLM or SGLang parser name differs from Dynamo’s — relevant when using --dyn-chat-processor vllm or sglang (see Chat Processor Options). A blank upstream column means the same name works everywhere. Dynamo-only means no upstream parser exists for this format.

Parsers marked force-reasoning emit reasoning content from token one without requiring an explicit opening tag (<think>, etc.). All others require the opening tag to be present in the model output.

Parser NameModelsUpstream nameForce-reasoningNotes
basicGeneric CoT modelsDynamo-onlyNoPlain <think>...</think>
deepseek_r1DeepSeek R1, DeepSeek V3.1, DeepSeek V3.2YesPass explicitly for V3.1/V3.2 (no alias)
glm45GLM-4.5, GLM-4.7Dynamo-onlyNoAlias for nemotron_deci. <think>...</think>
gpt_ossgpt-oss-20b / -120bDynamo-onlyNoHarmony channel reasoning format
graniteGranite 3.xNoHere's my thought process: / Here's my response:
kimiKimi K2 Instruct / ThinkingDynamo-onlyNo◁think▷...◁/think▷
kimi_k25Kimi K2.5Dynamo-onlyYes<think>...</think> with force-reasoning
minimax_append_thinkMiniMax M2 / M2.1Dynamo-onlyNoImplicit opening <think> prepended
mistralMagistralYes[THINK]...[/THINK]
nemotron3Nemotron-3 / MiniDynamo-onlyYesAlias for deepseek_r1
nemotron_deciNemotron-Super / -Ultra / -Deci, Llama-NemotronDynamo-onlyNo<think>...</think>
nemotron_nanoNemotron-NanoDynamo-onlyYesAlias for deepseek_r1
qwen3QwQ-32B, Qwen3-Think, Qwen3-CoderNo<think>...</think>
step3Step-3 / Step-3-ReasoningDynamo-onlyYes<think>...</think>

Common Parser Pairings

Some models need both parsers configured together. Common pairings include:

  • openai/gpt-oss-*: --dyn-tool-call-parser harmony --dyn-reasoning-parser gpt_oss
  • zai-org/GLM-4.7: --dyn-tool-call-parser glm47 --dyn-reasoning-parser glm45
  • moonshotai/Kimi-K2.5*: --dyn-tool-call-parser kimi_k2 --dyn-reasoning-parser kimi_k25
  • MiniMax M2.1 style outputs: --dyn-tool-call-parser minimax_m2 --dyn-reasoning-parser minimax_append_think

Tool Calling Interplay

Reasoning parsing happens before tool call parsing. If a model emits both reasoning content and tool calls, configure both parsers so Dynamo can first separate reasoning text and then parse tool calls from the remaining assistant output.