Skip to content

feat(minimax-h3): task/partition guard — mirror _resolve_task's raise (#77 follow-up) - #84

Closed
localai-bot wants to merge 1 commit into
mainfrom
row/H3-TASK-PARTITION-GUARD
Closed

feat(minimax-h3): task/partition guard — mirror _resolve_task's raise (#77 follow-up)#84
localai-bot wants to merge 1 commit into
mainfrom
row/H3-TASK-PARTITION-GUARD

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

What & why

The #70/#74 white grid cost three campaigns because the H3 driver silently accepted task=t2va on the Ref2VA-partition checkpoint. Upstream pipeline._resolve_task RAISES on that mismatch (vllm_omni/diffusion/models/minimax_h3/pipeline_minimax_h3.py:374-391, raise at 387-390); the recipe documents the split (recipes/MiniMaxAI/MiniMax-H3.md:50-51,289 — one server serves one partition: FL2VA → {t2va, fl2va}, Ref2VA → {ref2va}). This mirrors the raise 1:1 and adds the community-file fallback.

Partition discriminator — definitive finding (grounded both sides)

Upstream reads the served-task set from the release config model_index.json → _minimax_h3 → {partition, tasks} (pipeline:279-282); MiniMaxH3PartitionFromModelIndex mirrors those exact keys. Community GGUF/NVFP4 strip that block, and there is NO structural fallback — measured on the two real captured manifests:

Arm Manifest (tensors) Normalized base names Verdict
Ref2VA minimax_h3_nvfp4_manifest.inc (1051) 535 (after collapsing {weight, weight_scale, weight_scale_2}) identical names and shapes
FL2VA minimax_h3_gguf_manifest.inc (535) 535 to Ref2VA (comm empty both ways)

Ref2VA conditioning prepends reference rows through the same video/audio_patch_proj weights, adding no reference-specific tensor — so a name/shape auto-detector is impossible in principle. A stripped file must declare its partition (--partition fl2va|ref2va; server --video-partition).

Guard behavior table (task × partition → pass/refuse)

task \ partition FL2VA {t2va,fl2va} Ref2VA {ref2va} unknown/stripped
t2va pass REFUSE (the #77 mismatch) REFUSE (declare --partition)
fl2va pass REFUSE REFUSE
ref2va REFUSE pass REFUSE

RED-first proof

New case test_minimax_h3 :: "the task/partition guard refuses the #77 mismatch" (38 assertions). Neutralizing the guard body (reviewer mutation) turned it RED at 10 failed assertions (t2va-on-ref2va, the stripped refusals, the dispatch-level combo); restoring it → GREEN. Suite 67/67 (66 prior + this), 46549 assertions; test_video_api 4/4 (server wiring).

Records

spec §8.7 (guard section + behavior table + discriminator finding), STATUS/BENCHMARKS H3 rows, benchmark-record, NOW, anchored state entry.

Gates

All doc gates green (check-doc-checkpoint, check-public-doc-tables, check-now-current, check-state-order, check-supported-models, check-protocol-consistency, …). The only preflight red — check-fusion-consistency for minimax_h3_video_vae_device — is pre-existing (red at this branch point, byte-identical) and out of scope for this row.

🤖 Generated with Claude Code

https://claude.ai/code/session_014fZAcg1WcU8V629k6HWKys

…se (#77 follow-up)

The #70/#74 white grid cost three campaigns because the H3 driver silently
accepted task=t2va on the Ref2VA-partition checkpoint. Upstream
`pipeline._resolve_task` RAISES on the mismatch
(vllm_omni/diffusion/models/minimax_h3/pipeline_minimax_h3.py:374-391, raise at
387-390); the recipe documents the split
(recipes/MiniMaxAI/MiniMax-H3.md:50-51,289: one server serves one partition,
FL2VA→{t2va,fl2va}, Ref2VA→{ref2va}). This mirrors the raise 1:1 and adds the
community-file fallback.

Partition detection. `MiniMaxH3PartitionFromModelIndex` mirrors upstream's exact
release keys (model_index.json → `_minimax_h3` → {partition,tasks}, pipeline:279-282).
Community GGUF/NVFP4 strip that block, and there is NO structural fallback: measured
on the two real captured manifests, the Ref2VA NVFP4 (1051 tensors) and FL2VA GGUF
(535) carry the IDENTICAL DiT — same 535 base tensor names AND shapes after collapsing
the NVFP4 weight/scale/scale_2 split (ref2va prepends reference rows through the SAME
video/audio_patch_proj, adding no tensor). So a stripped file must DECLARE the
partition (`--partition fl2va|ref2va`; server `--video-partition`);
`MiniMaxH3PartitionFromFlag` maps it to the recipe's served-task set.

The refuse. `MiniMaxH3CheckTaskPartition` is the raise half of `_resolve_task`; the
task is what the request encodes (`MiniMaxH3TaskOfRequest`), and
`MiniMaxH3GenerateT2va` calls the pair before denoising. An unknown partition refuses
every task as ambiguous and names the recipe lines. A default `declared=false` request
leaves the guard inert (pipeline-math tests unaffected).

RED-first: new case `test_minimax_h3 :: "the task/partition guard refuses the #77
mismatch"` (38 assertions) — the #77 combo throws, correct pairings pass, stripped
refuses + --partition recovers, and the two real manifests are asserted to the same
535-name set. Neutralizing the guard body turned it RED at 10 assertions; restored →
GREEN. Suite 67/67 (66 prior +1), 46549 assertions; test_video_api 4/4.

Records: spec §8.7 (guard section + behavior table + discriminator finding),
STATUS/BENCHMARKS H3 rows, benchmark-record, NOW, anchored state entry.

FOLLOWING_AGENTS_PROTOCOL
Assisted-by: Claude Code:claude-opus-4-8 [ClaudeCode]
@mudler
mudler force-pushed the row/H3-TASK-PARTITION-GUARD branch from 746572c to 838a079 Compare August 6, 2026 22:45
mudler added a commit that referenced this pull request Aug 6, 2026
… loudly (#84)

row/H3-TASK-PARTITION-GUARD squash. Mirrors upstream's _resolve_task
raise (pipeline_minimax_h3.py:279-282,387-390): FL2VA serves
{t2va,fl2va}, Ref2VA serves {ref2va}; any other pairing — including the
exact t2va-on-ref2va mismatch that silently burned three render
campaigns — refuses with the recipe contract in the message.
DEFINITIVE finding: NO structural discriminator exists in principle —
the two real captured manifests collapse to IDENTICAL 535 base tensor
names AND shapes, so a stripped community file must DECLARE its
partition (--partition / --video-partition);
MiniMaxH3PartitionFromModelIndex reads the release model_index.json
keys when present. RED-first proven (guard body neutralized -> 10
failed assertions); suite 67/67. Merge also repairs an anchorless
state entry another session pushed (re-anchored 2026-08-06T23:55) and
pays a 5-char STATUS ratchet squeeze.

FOLLOWING_AGENTS_PROTOCOL
Assisted-by: Claude Code:claude-opus-4-8 [ClaudeCode]
@localai-bot

Copy link
Copy Markdown
Collaborator Author

Landed on main as the squash (mudler authorship); merge repaired an anchorless state entry from a parallel session and paid the ratchet squeeze.

🤖 Generated with Claude Code

https://claude.ai/code/session_014fZAcg1WcU8V629k6HWKys

@localai-bot localai-bot closed this Aug 6, 2026
mudler added a commit that referenced this pull request Aug 7, 2026
main moved 17 commits under this branch (#82, #83, #84 plus the public-doc gate
restoration), so every earlier green result was re-run on the merged tree rather
than carried over.

Three record conflicts, all resolved BY KEY rather than by taking a side:

* docs/STATUS.md — main had COMPACTED this paragraph and lowered the size ratchet
  to 284062. Taking our side wholesale would have silently reverted their
  compaction and blown the gate, so the resolution keeps THEIR paragraph and
  swaps in only our Vulkan clause, then trims it to fit.
* docs/BENCHMARKS.md — a keyed table. Kept THEIR rows (they updated MiniMax-H3
  and MXFP4 and added H3-RENDER-CLOSE) and appended only our Vulkan row.
* .agents/state.md — append-only log, unioned theirs then ours.

Re-verified on the merged tree: clean -Werror Vulkan-ON build 0 warnings, e2e
opt-125m on Vulkan STRICT token-exact 6/6 prompts / 96/96 tokens with 0 provider
declines, test_vulkan_backend 10/10 (480), test_backend_cross_device 11/11 (123),
clean CPU-only build 0 warnings, CPU ctest 336/337 with the one failure
(test_engine_core_proc) passing serially in 0.01s — the known starve-under-`-j`
pattern on a box running several suites at once, not a regression.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants