Review follow-ups for the layer-50 truncation of the Qwen3-VL conditioner: - tests/local_tests/encoders/test_minimax_h3_qwen3_vl_parity.py compared all 65 hidden states with equal lengths and zip(strict=True), so the gate failed deterministically once the production stack builds only 51. It now pins the production tuple to language_model.num_layers + 1 entries and compares every built state bit-exactly against the official value at the same index, which still catches a truncated stack that applies the final norm, and degrades to the original full comparison when the override is None. - num_hidden_layers_override <= 0 was accepted: 0 built an empty decoder stack, and a negative value additionally left num_layers inconsistent with the built layers, making _is_above_the_tap drop every layer key so the conditioner loaded "successfully" with no transformer at all. The arch config __post_init__ now rejects non-positive overrides, both at construction and when update_model_arch re-validates a checkpoint config. - _is_above_the_tap dropped any layer index >= num_layers, including indexes at or above the checkpoint's own num_hidden_layers that the full stack would reject as unexpected. The filter is now bounded to [num_layers, num_hidden_layers) so truncation only drops keys the full model would have accepted. - The CPU truncation test now compares the whole shared hidden-state prefix, mirroring the production-loader parity gate, and covers the override == num_hidden_layers boundary. The conditioner's num_hidden_layers property documents that it reports the checkpoint's nominal depth, not the built depth. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Local Tests
Local-only parity, smoke, and component tests for FastVideo model ports. They compare FastVideo against the official reference implementations and are skipped in CI; run them locally on a single GPU (or CPU where noted).
For the CI-backed test suite, see fastvideo/tests/.
Layout
Tests are organized by model family, one directory per port. Each family
directory follows the layout produced by the
add-model-prep skill:
tests/local_tests/<family>/
├── README.md # reference assets, setup, test inventory
├── __init__.py
└── test_<family>_<component>_*.py
Families
| Family | Workload | Dir |
|---|---|---|
| Flux2 | T2I | flux2/ |
| Hunyuan GameCraft | T2V / I2V | gamecraft/ |
| GEN3C | T2V | gen3c/ |
| Kandinsky-5 | T2V | kandinsky5/ |
| LTX-2 | T2V (+ audio) | ltx2/ |
| Stable Diffusion 3.5 | T2I | sd35/ |
| Stable Audio Open 1.0 | T2A | stable_audio/ |
| Wan2.2 | I2V | wan22/ |
Running a family
pytest tests/local_tests/<family>/ -v -s
See each family's README.md for setup (clones, weights, env vars, gated
tokens) and the per-component parity coverage.
Adding a new family
Run the add-model-prep
skill from the FastVideo repo root. It scaffolds the family directory and
README.md and stages reference clones + weights. (In-progress ports may also
add a PORT_STATUS.md from the same skill template; remove it once the port
lands.)