Skip to content

Commit 86a875c

Browse files
authored
spec(SAMPLE-REASONING): W3 runs before W2, on measured recipe demand (#605) (#616)
FOLLOWING_AGENTS_PROTOCOL The work breakdown numbered its waves without demand data. The recipe-surface sweep supplies it and inverts the order. Across the 157 official recipes, --reasoning-parser is passed 76 times over 20 distinct values. We resolve 15; the other 61 abort startup with "unknown reasoning parser". W3 -- the engine-backed adapters -- covers 43 of those 76 uses. W2 covers 18, and four of its names (ernie45, granite, cohere_command3/4) have ZERO recipe demand. qwen3 alone is 18 uses. qwen3 is also what the published Qwen3.5 and Qwen3.6 recipes pass to models we already ship token-exact and gated, so the engine currently serves the model and rejects its own recipe's flag. Spec only, no code and no row-state change. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
1 parent bd3b755 commit 86a875c

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

.agents/specs/reasoning-parsers.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,45 @@ RED-first.
176176
- **W3** — the engine-backed reasoning adapters (`qwen3`/`mimo`, `gemma4`,
177177
`glm45/47`, `seed_oss`, `deepseek_v4`, `nemotron_v3`, `inkling`) as reasoning
178178
faces over the already-landed `TOOLS-STREAMING-PARSER` engine.
179+
180+
### Ordering amendment 2026-08-13 — W3 runs BEFORE W2 (#605)
181+
182+
The waves above were numbered without demand data. The recipe-surface sweep
183+
supplies it, and it inverts the order.
184+
185+
Measured over `vllm-project/recipes` @ `86c7777aa699482ef1ebd0c5da9fc540ccc00a40`
186+
(157 official model recipes), `--reasoning-parser` is passed **76 times across 20
187+
distinct values**. We resolve 15 of those uses; the other **61 abort startup** with
188+
`unknown reasoning parser`.
189+
190+
| Wave | Recipe uses it covers | Notable |
191+
|---|---:|---|
192+
| **W3** (engine-backed adapters) | **43 / 76** | `qwen3` 18, `glm45` 11, `gemma4` 6, `deepseek_v4` 2, `nemotron_v3` 3, `inkling` 2 |
193+
| W2 (remaining text families) | 18 / 76 | `kimi_k2` 4, `poolside_v1` 4, `hy_v3` 2, `step3p5` 2, `minimax_m3` 1 |
194+
|| 0 | `ernie45`, `granite`, `cohere_command3/4`, `openai_gptoss`**zero recipe demand**, all in W2 |
195+
196+
`qwen3` alone (18 uses) outweighs every W2 name combined except `kimi_k2` and
197+
`poolside_v1`. It is also the parser the published Qwen3.5 and Qwen3.6 recipes pass
198+
to models **we already ship token-exact and gated** — so today the engine serves
199+
the model and rejects its own recipe's flag.
200+
201+
**Therefore: W3 runs first, and within W3 the first brick is
202+
`Qwen3ParserReasoningAdapter`** (upstream `vllm/reasoning/qwen3_engine_reasoning_parser.py`,
203+
re-exported from `vllm/parser/engine/registered_adapters.py`), which serves BOTH
204+
`qwen3` and `mimo``vllm/reasoning/__init__.py:87` registers `mimo` onto the same
205+
class, so two names land for one port. `glm45` and `glm47` share
206+
`Glm47MoeParserReasoningAdapter` the same way (`__init__.py:55,59`).
207+
208+
Three names belong in W3 and were missing from its list:
209+
210+
- `nano_v3` (1 recipe use) — add to W3.
211+
- `kimi_k3` (1) and `ling3` (1) — **post-pin**; they are not in the registry at
212+
`5559679229bc961848b121ccdeaa8fa5d79bec98`. Recorded here so they are not
213+
rediscovered; they land with the next pin advance, not before.
214+
215+
W2 is not cancelled — it is resequenced behind W3. The four zero-demand names stay
216+
in scope because upstream registers them and we mirror upstream; they are simply
217+
not what a user hits first.
179218
- **W4** — request-time `chat_template_kwargs` threading (`adjust_request`) +
180219
reasoning-gated grammar FSM hold (cross-ref structured-output).
181220

0 commit comments

Comments
 (0)