Skip to content

docs/FEATURES.md drift: arch counts say 30 (registry has 35), multimodal-over-HTTP marked ☐ though W1–W3 landed and are wired #242

Description

@localai-bot

docs/FEATURES.md drifted from the tree in the places no checker covers. scripts/check-supported-models.py gates the arch table between the supported-arch-table markers, and it is green — every drift below is in prose, in a row the checker does not read, or in a different document. Verified at 616ba9fe.

1. Architecture counts say 30, the registry has 35

check-supported-models.py prints "exactly the 35 architectures registered via REGISTER_VLLM_MODEL", and grep -c REGISTER_VLLM_MODEL over src/ agrees (36 hits, one being the macro definition). The prose disagrees in four places:

  • docs/FEATURES.md:28 — "30 registered, 25+ gated"
  • docs/FEATURES.md:81 — "Today that is 30 registered architectures"
  • docs/FEATURES.md:155 — "25 of the 30 registered text-generation architectures"
  • README.md:296 — "all 30 registered architectures"

The gated count needs a real recount, not arithmetic. A first pass off the table: 35 registered − 4 non-text-generation (3× Parakeet + LlamaModel) = 31 text-generation, of which KimiK3ForConditionalGeneration (scaffold), CohereForCausalLM (scaffold), Gemma4UnifiedForConditionalGeneration (no separate oracle gate) and Olmo3ForCausalLM (oracle-blocked) are ungated ⇒ ~27/31. DeepseekV4ForCausalLM and LagunaForCausalLM gate through their CLIs while the registered engine forward is a stub/VT_CHECK, so whoever takes this should decide how those count and say so in the row.

2. Multimodal over HTTP is marked ☐ / "architecturally blocked", but W1–W3 landed and are wired

docs/FEATURES.md:170 marks "Multimodal over the OpenAI server" ☐, :174 calls serving it "the named open gap", and :285 says "Architecturally blocked — Vision tower lives outside the registered engine forward."

That is not what the tree does. ROAD-V1-MM W1–W3 landed (0a8dd58b2581a7d4308c312a) and the production server attaches the seam at src/vllm/entrypoints/openai/server_main.cpp:826:

chat.set_multimodal_chat_fn(oai::MakeQwen3VLImageChatFn(
    *mm_image_proc, tokenizer, chat_prompt_fn, std::move(codec)));

docs/STATUS.md:131 already carries the honest state; FEATURES does not project it. The blocker is no longer architectural — it is two named residuals, both stated in the comment at server_main.cpp:780:

  1. the model runner has no mm-forward path consuming Request.mm_features;
  2. no container-format image codec is vendored, so encoded PNG/JPEG are refused.

The row should read ◐ with those two residuals named, and :285 should stop saying "architecturally blocked". The separate C-ABI row (:258, multimodal input embedder-unreachable) is accurate and should stay.

3. Smaller reconciliations

Scope

docs/FEATURES.md + the one README.md:296 count. No src/, include/ or tests/ change; no capability moves, so no BENCHMARKS entry is owed. Per the public-documents rule this is a projection repair, and docs/STATUS.md is already correct.

Why this matters beyond tidiness

Item 2 understates a landed capability and item 1 undercounts the registry by five architectures — both in the direction of making the project look less complete than it is, on the page a reader uses to judge it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions