record(MODEL-MATRIX): row the 8 recipe architectures that had none (#609, #610) - #620
record(MODEL-MATRIX): row the 8 recipe architectures that had none (#609, #610)#620localai-bot wants to merge 1 commit into
Conversation
, #610) FOLLOWING_AGENTS_PROTOCOL The matrix claims exhaustive coverage. An audit of the 157 official model recipes at vllm-project/recipes 86c7777a, joined to each model's HF config.json architectures and then to this file, found eight architecture strings with no row. They are added here at INVENTORIED. Records only: no src/, include/ or tests/ change, and no mark claims more than its row backs. Qwen3_5MoeForCausalLM is the one worth reading. It is NOT an alias of Qwen3_5MoeForConditionalGeneration, and it is also NOT a new port. The class already exists at our pin (qwen3_5.py:381; main :443) and is precisely what the multimodal class builds as its own text tower -- Qwen3_5MoeForConditionalGeneration.__init__ does `self.language_model = Qwen3_5MoeForCausalLM(...)` at qwen3_5.py:643 (pin) / :724 (main). What vLLM main added is a REGISTRY entry (registry.py:203, in _TEXT_GENERATION_MODELS) exposing that text-only backbone standalone: same module, different class, different task category, no vision tower and no MM processor. So it earns its own row under the matrix's alias rule, which groups only exact (category, module, class) matches -- but closing it is a registration plus flat-config-descent job, not a model port. We already ship that tower token-exact; we simply bind only the string Qwen3_5MoeForConditionalGeneration (qwen3_5_moe.cpp:215) and nest the text fields under a text sub-config (hf_config.cpp:396), while Qwen/Qwen3.8-2.4T-A95B declares Qwen3_5MoeForCausalLM with those fields at top level. BailingMoeV3ForCausalLM succeeds BailingMoeV2_5ForCausalLM but is a new module rather than a class rename: V2.5 (bailing_moe_linear.py, 821 lines at the pin) pairs MLA with Bailing linear attention, whereas V3 (bailing_moe_v3.py, 1495 lines on main) keeps MLA and swaps the linear arm for Kimi Delta Attention, adds per-projection causal conv1d, grouped-topk MoE via config.n_group, a clamped SwigluStepAndMul, an fp8 quant-config hook, and refuses a checkpoint without no_kda_lora=True. Line anchors are on the row. The six #610 rows follow the MiniMaxH3DiTModel precedent, which is the one vllm-omni architecture already rowed. Four resolve in vllm_omni/model_executor/models/registry.py @ bbe6ccc5. Two do not resolve anywhere: VoxtralRealtimeForConditionalGeneration and BailingMMNativeForConditionalGeneration are the literal config.json strings of their recipes, and appear in none of the pinned registry, any of the ten dictionaries of vLLM main's registry.py, vllm-omni's _OMNI_MODELS, or vllm-omni's supported_models.md. Those two are recorded target-pending with what was searched and with the near misses named -- VoxtralRealtimeGeneration is registered at the pin and already has its own row here, and vllm-omni carries a BailingMM2NativeForConditionalGeneration alias, note the 2 -- but no anchor is asserted for either. Counts. Eight rows, so the rollup moves INVENTORIED 314 -> 322 and Total 362 -> 370, and check-agent-record's MODEL row count moves with it. The at-the-pin model inventory (324 rows / 373 memberships / 356 architectures / 310 targets / 261 modules) is deliberately UNCHANGED: none of the eight is at the pin, so like the MuseGlimmer, KimiK3 and MiniMaxH3DiT rows before them they carry no pinned-registry module::class token and contribute nothing to it. That is the existing convention, not a relaxation -- no checker expectation was widened to make this pass. The header prose distinguishes at-pin from beyond-pin rows, so it is reconciled the same way: 326 at the pin plus 3 beyond becomes 326 plus 11, = 337, with the long tail 284 -> 292 and the engaged count 45 unchanged. Two pre-existing errors in that block are corrected while it is open rather than left standing: the caption read "the 49 non-INVENTORIED rows" where the file has, and had, 48. Two notes for whoever closes the issues. First, #609 and #610 say two and seven; their own tables enumerate two and six, and reproducing the audit independently returns exactly eight, so eight is what landed. Second, that reproduction could not read 20 of the 157 recipe configs (gated or 404, including Voxtral-4B-TTS-2603, GLM-TTS, IndexTTS-2.5 and stable-audio-open), so coverage for those is unverified rather than clean, and several vllm-omni TTS architectures visible in the omni docs still have no row. Also files #618: test_cpu_x86_llamacpp_floor's contended-leg case red on this branch at loadavg 63 and green at 21.9 on the same tree -- it races the box's quiet-window gate, so it fails toward a verdict on whatever diff is in flight. Filed, not fixed here: it changes a test's semantics. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
|
Correction to the commit message, recorded here rather than force-pushed (the branch is already published and this protocol takes no force variant). The commit body says "Two pre-existing errors in that block are corrected" and then names only one. One is correct: the caption read "the 49 non- The PR body above states it correctly as one. Worth fixing in the squash message at merge time. |
…ce (#620) FOLLOWING_AGENTS_PROTOCOL This branch appended #609 and #610 to the intake table with em-dash rows, because when it was written neither issue had a row to point at. #620 has since added the eight matrix rows AND placed both issues in place, keyed to MODEL-TEXT-qwen3-5-qwen3-5-moe-for-causal-lm and MODEL-MM-moss-tts-moss-tts-delay-talker-for-generation. Two branches, one keyed record, entries at different line positions: git merges both without a conflict and the table ends up defining #609 and #610 twice. That is the move-plus-add duplicate shape -- it does not announce itself, because a clean merge is exactly what it produces. The append is the weaker of the two (em dash vs a real row), so it goes; #620 owns those keys. This branch keeps #605-#608, which #620 does not touch. Not a merge-order fix: removing the duplicate here is correct whichever PR lands first. python3 scripts/check-agent-record.py: 0 errors. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
|
Superseded by #625 — same tree, byte-identical, clean history. Why this one could not be repaired in place. #620's first commit ( So the only remedies were rewriting published history or clean history on a fresh branch. This protocol takes no force variant, so #625 is the fresh branch. #625 also carries the two corrections that arrived after #620 was opened: the Branch |
Records only. No
src/,include/ortests/change.The matrix claims exhaustive coverage. An audit of the 157 official model recipes
at
vllm-project/recipes86c7777a, joined to each model's HFconfig.jsonarchitectures and then to
.agents/model-matrix.md, found architecture stringswith no row at all. This adds them at
INVENTORIED.The 8 rows
Pin-lag — registered on vLLM
main, absent only at555967922(#609):MODEL-TEXT-qwen3-5-qwen3-5-moe-for-causal-lmQwen3_5MoeForCausalLMQwen/Qwen3.8-2.4T-A95BMODEL-TEXT-bailing-moe-v3-bailing-moe-v3-for-causal-lmBailingMoeV3ForCausalLMinclusionAI/Ling-3.0-flashOut-of-repo —
vllm-project/vllm-omni, following theMiniMaxH3DiTModelprecedent (#610):
MODEL-MM-moss-tts-moss-tts-delay-talker-for-generationMossTTSDelayModelMODEL-MM-moss-tts-moss-tts-realtime-talker-for-generationMossTTSRealtimeMODEL-MM-qwen3-tts-qwen3-tts-talker-for-conditional-generationQwen3TTSForConditionalGeneration,Qwen3TTSTalkerForConditionalGenerationMODEL-MM-higgs-audio-v3-higgs-audio-v3-talker-for-conditional-generationHiggsMultimodalQwen3ForConditionalGeneration,HiggsAudioV3TalkerForConditionalGenerationMODEL-MM-voxtral-realtime-voxtral-realtime-for-conditional-generationVoxtralRealtimeForConditionalGeneration(target-pending)MODEL-MM-bailing-mm-native-bailing-mm-native-for-conditional-generationBailingMMNativeForConditionalGeneration(target-pending)Qwen3_5MoeForCausalLM: alias or separate target?Neither a pure alias nor a new port, and the row says so plainly.
The class already exists at our pin —
qwen3_5.py:381(main:443) — and isexactly what the multimodal class builds as its own text tower:
Qwen3_5MoeForConditionalGeneration.__init__doesself.language_model = Qwen3_5MoeForCausalLM(...)atqwen3_5.py:643(pin) /:724(main). Whatmainadded is a registry entry atregistry.py:203in
_TEXT_GENERATION_MODELS, exposing that text-only backbone standalone: samemodule, different class, different task category (text generation vs
multimodal), no vision tower and no MM processor. Under the matrix's alias rule —
group only on an exact
(category, module, class)match — it earns its own rowrather than folding into
MODEL-MM-qwen3-5-qwen3-5-moe-for-conditional-generation.But it is a cheap close, not a port: we already ship that tower token-exact. We
bind only the string
Qwen3_5MoeForConditionalGeneration(
src/vllm/model_executor/models/qwen3_5_moe.cpp:215) and nest the text fieldsunder a text sub-config (
src/vllm/transformers_utils/hf_config.cpp:396), whileQwen/Qwen3.8-2.4T-A95BdeclaresQwen3_5MoeForCausalLMwith those fields attop level. Registration plus a flat-config descent, once the pin advances.
BailingMoeV3ForCausalLMsucceedsBailingMoeV2_5ForCausalLMbut is a newmodule, not a class rename: V2.5 (
bailing_moe_linear.py, 821 lines at the pin)pairs MLA with Bailing linear attention; V3 (
bailing_moe_v3.py, 1495 lines onmain) keeps MLA and swaps the linear arm for Kimi Delta Attention, addsper-projection causal
conv1d, grouped-topk MoE viaconfig.n_group, a clampedSwigluStepAndMul, an fp8 quant-config hook, and refuses a checkpoint withoutno_kda_lora=True. Line anchors are on the row.Counts
Rollup
INVENTORIED314 → 322 andTotal362 → 370;check-agent-record's MODELrow count moves with it.
The at-the-pin model inventory is deliberately unchanged — 324 rows / 373
memberships / 356 architectures / 310 targets / 261 modules. None of the eight is
at the pin, so like the
MuseGlimmer,KimiK3andMiniMaxH3DiTrows beforethem they carry no pinned-registry
module-colon-colon-classtoken andcontribute nothing to that invariant. Existing convention, not a relaxation: no
checker expectation was widened to make this pass.
The header prose distinguishes at-pin from beyond-pin, so it is reconciled the
same way: 326 at the pin plus 3 beyond becomes 326 plus 11 = 337, long tail
284 → 292, engaged 45 unchanged. One pre-existing error in that same block is
corrected while it is open: the caption read "the 49 non-
INVENTORIEDrows"where the file has, and had, 48.
Two notes before closing the issues
Reproducing the audit independently (157 recipes → 157 config rows → join)
returns exactly eight, matching the enumerations. Eight is what landed.
404 — including
Voxtral-4B-TTS-2603,GLM-TTS,IndexTTS-2.5,stable-audio-open-1.0). Coverage for those is unverified, not clean, andseveral
vllm-omniTTS architectures visible in the omni docs still have norow. Worth its own audit issue.
Evidence
python3 scripts/check-model-checklist.py:scripts/agent-preflight.sh --staged→ exit 0, all 24 record gates, 40 mutationsuites and both staged gates
ok.test_cpu_x86_llamacpp_floorwas RED on the first staged run atloadavg 63andGREEN on the same tree at
21.9: it races the harness's quiet-window gate andfails toward a verdict on whatever diff is in flight. Filed as #618 and added to
the intake table — not fixed here, since it changes a test's semantics.
Closes #609.
Closes #610.