Qwen3.8-27B, Muse-Glimmer-30B, Qwen3.6-35B: тесты прошли все, приёмку — одна
Прогнал три локальные модели — Qwen3.6-35B-A3B, Muse-Glimmer-30B и Qwen3.8-27B — через одно и то же техническое задание, markdown-редактор на Rust и GTK4. Проверял не глазами, а стендом: 13 машинных ворот, 27 контрактных тестов и 14 функциональных проверок интерфейса через AT-SPI со скриншотами. У каждой модели было до 30 подходов, между подходами она получала отчёт, что именно не прошло.
Железо — RTX 5080 Laptop на 16 ГБ, llama.cpp на Vulkan, агент OpenCode.
Результаты
Приёмку прошла только одна из трёх.
| Qwen3.6-35B-A3B | Muse-Glimmer-30B | Qwen3.8-27B | |
|---|---|---|---|
| Приёмка | нет | нет | да |
| Контрактные тесты | 25/27 | 25/27 | 27/27 |
| Провалов в проверках интерфейса | 4 | 0 | 0 |
| Своих тестов | 33 | 16 | 49 |
| Строк кода | 1337 | 600 | 1646 |
| Подходов | 11 | 22 | 17 |
| Время | 81 мин | 250 мин | 803 мин |
Остальные две споткнулись об одно и то же: функция рендеринга markdown должна отдавать HTML, а Qwen3.6-35B-A3B выдала разметку Pango, Muse-Glimmer-30B — просто текст без символов разметки.
Тесты, которые подтверждают ошибку
Самое интересное не в таблице. Все три модели писали тесты, как требовало задание, и у всех трёх свои тесты проходили. Вот настоящий тест от Muse-Glimmer-30B:
let out = render_markdown("# Title\nSome text");
assert!(out.contains("Title"));
assert!(!out.contains('#'));
Он зелёный. Функция при этом возвращает голый текст вместо HTML. Модель написала оракул, который подтверждает её собственное понимание задачи — а понимание было неверным.
Отсюда вывод, оправдывающий всю затею: инструкции «работай по TDD» недостаточно. Модель автор и кода, и проверки к нему, поэтому проверять надо тем, что писали не вы вместе с ней. У Qwen3.8-27B был свой номер того же жанра — девять подходов она держала fn main() {} и писала библиотеку, ни разу не запустив приложение. Юнит-тесты при этом проходили.
Про уровень рассуждения
Qwen3.8-27B по умолчанию думает на максимуме — xhigh. Прогнал её ещё раз на medium, не меняя больше ничего.
| xhigh | medium | |
|---|---|---|
| Приёмка | да | да |
| Подходов | 16 | 7 |
| Время | 13,4 ч | 7,7 ч |
| Выходных токенов | 653 116 | 421 368 |
| Ответов модели | 327 | 313 |
Результат тот же — полная приёмка, но вдвое дешевле. И обратите внимание на последнюю строку: число ответов почти совпало. Разница целиком в том, сколько модель думает на каждом шаге, а не в числе шагов. xhigh не находит больше решений, он дольше размышляет над теми же.
Про скорость
20,5 токена в секунду — и это потолок ноутбука, а не модели. Карта заперта на 80 Вт при паспортных 175: драйвер hp-wmi в Linux не отправляет прошивке команду разблокировки, которую под Windows шлёт OMEN Gaming Hub. Собрал llama.cpp с CUDA вместо Vulkan — в генерации ноль разницы, 20,97 против 20,84. Бэкенд тут не виноват, не хватает ватт.
Мультитокенное предсказание (MTP) даёт +25–37% на коротких запросах, но на промпте в 59 тысяч токенов оказалось на 12% медленнее: доля принятого черновика падает с 70% до 35–47%, и лишний проход перестаёт отбиваться. Для кодинга не годится.
Выводы
Для кодинга из трёх лучше Qwen3.8-27B, и с запасом: единственная дошла до приёмки, написала вдвое больше тестов, чем ближайшая, и по ходу нашла ошибку в моём собственном проверяющем стенде. Ставить ей стоит medium, а не xhigh — вдвое быстрее при том же результате.
Оговорка: по одному прогону на модель и одно задание, так что это не статистика. Qwen3.6-35B-A3B встала сама на 11-м подходе, Muse-Glimmer-30B я остановил на 22-м после тринадцати подходов без движения.
А главное, что показал эксперимент: разница между «модель написала код» и «код работает» измеряется только тем, что модель не писала.