diff --git a/renderers/base.py b/renderers/base.py index f3418841..582e102b 100644 --- a/renderers/base.py +++ b/renderers/base.py @@ -988,7 +988,8 @@ def is_multimodal(r: object) -> bool: "Qwen/Qwen3.5-35B-A3B": "qwen3.5", "Qwen/Qwen3.5-122B-A10B": "qwen3.5", "Qwen/Qwen3.5-397B-A17B": "qwen3.5", - # Qwen3.6. + # Qwen3.6. Both sizes ship the same chat template. + "Qwen/Qwen3.6-27B": "qwen3.6", "Qwen/Qwen3.6-35B-A3B": "qwen3.6", # Qwen3.8. "Qwen/Qwen3.8-27B": "qwen3.8", @@ -1108,6 +1109,7 @@ def is_multimodal(r: object) -> bool: "Qwen/Qwen3.5-397B-A17B": {"image"}, # Qwen3.6 extends Qwen3.5's chat template; same VL bits, only # tool-call argument serialization differs. + "Qwen/Qwen3.6-27B": {"image"}, "Qwen/Qwen3.6-35B-A3B": {"image"}, # Qwen3.8 adds reasoning-effort control and preserves thinking by default. "Qwen/Qwen3.8-27B": {"image"}, diff --git a/renderers/qwen35.py b/renderers/qwen35.py index 8f2dbffb..a737fcc4 100644 --- a/renderers/qwen35.py +++ b/renderers/qwen35.py @@ -105,6 +105,7 @@ "Qwen/Qwen3.5-122B-A10B": True, "Qwen/Qwen3.5-397B-A17B": True, # Qwen3.6 extends the Qwen3.5 template; same big-size polarity. + "Qwen/Qwen3.6-27B": True, "Qwen/Qwen3.6-35B-A3B": True, # Qwen3.8 keeps thinking enabled by default. "Qwen/Qwen3.8-27B": True, diff --git a/tests/parity.py b/tests/parity.py index ac34e11c..e0fb94a3 100644 --- a/tests/parity.py +++ b/tests/parity.py @@ -109,6 +109,7 @@ def _model( _model("Qwen/Qwen3.5-35B-A3B", shared=False, roundtrip=False), _model("Qwen/Qwen3.5-122B-A10B", shared=False, roundtrip=False), _model("Qwen/Qwen3.5-397B-A17B", shared=False, roundtrip=False), + _model("Qwen/Qwen3.6-27B", shared=False, roundtrip=False), _model( "Qwen/Qwen3.6-35B-A3B", bridge=True,