Skip to content

Tool-call parsers: 5 upstream names missing (2 invisible to the recipe sweep), and the row records none of the 40 that exist #608

Description

@localai-bot

What

Our tool-call parser surface is the healthy axis of the recipe audit — 40
registered names covering 82 of 90 --tool-call-parser uses (91%)
across the
157 official recipes. This issue closes the gap against upstream.

Corrected against the registries (2026-08-13)

An earlier revision of this issue listed six names from recipe usage alone,
without diffing the two registries. Doing that diff changes the answer.

Upstream vllm/tool_parsers/__init__.py at the pin 5559679 registers 43
names; our factory (src/vllm/entrypoints/openai/tool_parsers/abstract.cpp)
registers 40. Exactly five are upstream-only:

Name Recipe uses Note
openai 2 gpt-oss-120b / -20b
inkling 2 Inkling, Inkling-Small
minimax_m3 1 MiniMax-M3
cohere_command3 0 not found by the recipe sweep — a real mirror gap the audit could not see
cohere_command4 0 same

And three names the recipes DO reference are in neither registry, so they are
post-pin and land with the next pin advance — not portable now:

nemotron_json (1 use), kimi_k3 (1), ling3 (1).

The earlier revision put nemotron_json in the portable group. It is not in
upstream at the pin, and it is not in ours; nothing in either registry mentions
nemotron at all.

Two lessons this correction carries: recipe demand is not a registry, and a gap
list built from usage misses everything users have not asked for yet — which is
how cohere_command3/4 stayed invisible.

Blocker: the row understates what already exists

TOOLS-PARSER-BREADTH reads:

Qwen-Coder XML, Mistral, pythonic, and remaining parsers · Our code: - ·
Our tests/evidence: - · INVENTORIED

All three parsers it names by title are implemented — qwen3_coder, mistral
and pythonic are all in the factory, alongside 37 others. The row records none
of it.

This is the same shape SAMPLE-REASONING carried before its W0 spike ("the seam
shipped under da933828 but this row was never advanced"). The row must be
backfilled to reality before it can be advanced
, or the change will look like it
delivers 40 parsers when it delivers five.

Scope

  1. W0 — backfill TOOLS-PARSER-BREADTH to the landed surface: 40 registered
    names, the factory and autodetect anchors, and the existing tests. State moves
    off INVENTORIED to what the evidence backs. Write the planned
    specs/tool-parser-breadth.md, which does not exist yet.
  2. W1 — the three with recipe demand: openai, inkling, minimax_m3.
  3. W2 — complete the mirror: cohere_command3, cohere_command4.
  4. Deferred, recorded here so they are not rediscovered: nemotron_json,
    kimi_k3, ling3 at the next pin advance.

Each parser is a direct text port with its upstream test ported and the upstream
revision anchor recorded, registered in abstract.cpp, added to the detect.cpp
marker table only where the family has a template-stable literal (read that file's
ORDER MATTERS comment first), with the name count in docs/USAGE.md:878 updated
in the same change.

Found while auditing recipes.vllm.ai coverage.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions