diff --git a/.agents/knowledge/topics/fix_patterns.md b/.agents/knowledge/topics/fix_patterns.md index bcfab0d2..e6780c29 100644 --- a/.agents/knowledge/topics/fix_patterns.md +++ b/.agents/knowledge/topics/fix_patterns.md @@ -797,6 +797,18 @@ Based on the fix type, write the fix entry to the appropriate document: dropping a supported Python version. - **Related Constraint**: N/A +### Versioned model rows require independent size verification +- **Date**: 2026-09-21 +- **Symptom**: The supported-model table listed Qwen-Image 2.1 as 20B even though its official + model card identifies the visual generation component as 7B. +- **Root Cause**: The new version inherited the parameter count of earlier Qwen-Image entries + without independently verifying the changed architecture. +- **Fix**: Correct the README row to 7B, add an exact-row documentation regression, and align + existing documentation tests with the newly added model row and pinned Diffusers installation. +- **Lesson**: A versioned model name does not imply architectural continuity; verify parameter + counts against the official model card and lock the specific table row rather than a global count. +- **Related Constraint**: N/A + ## Cross-refs - UP: [Hard Constraints](../constraints.md), [Architecture](../architecture.md) diff --git a/README.md b/README.md index 65f927f0..411b97b5 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ This experimental feature leverages `diffusers`'s `transformer.set_attention_bac BAGEL-7B-MoT14Bbagel SenseNova-U1 1.016Bsensenova SenseNova-U1 1.516Bsensenova - Qwen-Image 2.120Bqwen-image-2.1 + Qwen-Image 2.17Bqwen-image-2.1 Text-to-VideoWan2.1-T2V-1.3B1.3Bwan2_t2v Wan2.1-T2V-14B14Bwan2_t2v diff --git a/tests/docs/test_minimax_h3_docs.py b/tests/docs/test_minimax_h3_docs.py index 6620d343..a8c5c1d8 100644 --- a/tests/docs/test_minimax_h3_docs.py +++ b/tests/docs/test_minimax_h3_docs.py @@ -141,13 +141,16 @@ def test_gpu_validation_matrix_declares_scope_and_completed_result() -> None: assert "| Wan first/last | `Wan2.2-I2V-A14B-Diffusers` |" in text -def test_install_docs_use_the_released_diffusers_runtime() -> None: +def test_install_docs_distinguish_released_and_pinned_diffusers_runtimes() -> None: readme = _text("README.md") dockerfile = _text("docker/docker-cuda/Dockerfile") docker_readme = _text("docker/README.md") + qwen_news = readme[readme.index("* **[2026-09-20]**") : readme.index("* **[2026-08-21]**")] + h3_news = readme[readme.index("* **[2026-08-21]**") : readme.index("* **[2026-04-25]**")] assert "diffusers>=0.40.0" in readme - assert "pip install -e ./diffusers" not in readme + assert "pip install -e ./diffusers" in qwen_news + assert "pip install -e ./diffusers" not in h3_news assert "pip install -e ./diffusers" not in dockerfile assert "submodule (required)" not in docker_readme diff --git a/tests/docs/test_qwen_image_21_docs.py b/tests/docs/test_qwen_image_21_docs.py new file mode 100644 index 00000000..8643e3dc --- /dev/null +++ b/tests/docs/test_qwen_image_21_docs.py @@ -0,0 +1,28 @@ +# Copyright 2026 Jayce-Ping +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] + + +def test_readme_lists_qwen_image_21_as_7b() -> None: + readme = (ROOT / "README.md").read_text(encoding="utf-8") + model_link = 'Qwen-Image 2.1' + row_start = readme.index(model_link) + model_row = readme[row_start : readme.index("", row_start)] + + assert "7B" in model_row + assert "20B" not in model_row + assert "qwen-image-2.1" in model_row diff --git a/tests/docs/test_sensenova_docs.py b/tests/docs/test_sensenova_docs.py index 4e1bbc2b..abedc4a1 100644 --- a/tests/docs/test_sensenova_docs.py +++ b/tests/docs/test_sensenova_docs.py @@ -24,7 +24,7 @@ def _text(path: str) -> str: def test_main_readme_lists_sensenova_as_t2i_and_multi_reference_i2i() -> None: readme = _text("README.md") t2i_start = readme.index('Text-to-Image') - combined_start = readme.index('Text-to-Image & Image(s)-to-Image') + combined_start = readme.index('Text-to-Image & Image(s)-to-Image') video_start = readme.index('Text-to-Video') t2i_only_rows = readme[t2i_start:combined_start]