Код Чароита я пишу в Claude Code. Каждое изменение до мержа читает другая модель и пишет вердикт. Такую модель я зову головой, а один прогон — кругом.
За два месяца в головах побывали Codex, GLM, Gemini, DeepSeek, две локальные Qwen, MiMo, Sonnet и Opus. Вердикты Sonnet ещё перечитывает Haiku. Посредников я перебрал три: Fireworks, OpenRouter, Nebius. Ниже — кто пришёл, кто ушёл и какие замеры это решили.
Зачем вообще вторая голова
PR #381: гейты режима правки графа. Скрытые пути, удаление, откат, карантин, замок. Пять кругов.
|
Круг |
Critical |
Где |
|---|---|---|
|
1 |
4 |
исходный код |
|
2 |
2 |
мои правки по кругу 1 |
|
3 |
1 |
моя правка: поиск карантина по префиксу минуты |
|
4 |
1 |
моя правка круга 3: тот же поиск, другой случай |
|
5 |
0 |
— |
Круги 3 и 4 нашли Critical в одной и той же моей правке: поиск находил карантин удалённой встречи по префиксу минуты. Каждый раз я чинил найденный случай и не видел соседний.
Правила круга к тому времени уже были. Круг повторяется только после Critical, остальное чинится тестами в том же PR, и правку по вердикту голова читает снова. #381 добавил третье: после второго Critical подряд в своей правке искать готовый механизм проекта, а не латать.
Шкала у всех голов одна. Critical — сценарий отказа: вход или состояние, которые дают неверный результат или падение. Important — дефект без такого сценария. Minor — гигиена.
Как устроена голова
Голова — это claude -p с подменённым ANTHROPIC_BASE_URL. Запрос уходит в совместимый эндпоинт другого провайдера.
Инструменты — только чтение: Read, Glob, Grep. Читает чистый клон репозитория на нужном коммите. Бриф приходит на вход, вердикт уходит в файл.
Отсюда требование к провайдеру. OpenAI-совместимого API мало, нужен Anthropic Messages API с tool use. Без него голова не открывает файлы и судит по диффу вслепую.
Все круги идут через один скрипт. Он проверяет бриф, список разрешённых файлов и коммит клона, запускает головы параллельно и ждёт всех. С 22.09 запусков набралось 1517.
Пустой или оборванный вердикт скрипт чистым не считает. Голова, которая молча упала, уходит на перезапуск. Замечаний нет бывает только у полного вердикта.
Хроника состава
|
Дата |
Голова |
Почему пришла |
Что случилось |
|---|---|---|---|
|
до 16.08 |
Codex |
подписка ChatGPT уже была |
лимит 16–22.08, потом вернулся; к 24.09 в составе нет |
|
16.08 |
GLM-5.3, Z.ai |
замена Codex, Anthropic-эндпоинт |
лимит пятичасового окна; в сентябре вернулась через Fireworks |
|
16.08 |
DeepSeek V4 |
Anthropic-эндпоинт |
на старте 402, счёт пополнил; осталась |
|
16.08 |
Gemini 3.7 Flash |
быстрая, бесплатный тариф |
квота и 503, с 22.08 в кругах нет |
|
19.08 |
Qwen 3.6 35B локально |
закрытый код, без лимитов |
четыре ложных Critical и Important за день, снята 22.08 |
|
22.08 |
Sonnet 5 |
закрытые зоны, третья на публичном |
с 24.09 пара с DeepSeek |
|
26.08 |
Qwen 3.8 27B локально |
замена 3.6 |
15,6 ГБ и 40 минут без вердикта, снята тем же вечером |
|
22.09 |
MiMo-Pro, OpenRouter |
вопрос о замене голов |
дороже и медленнее, кандидат |
|
09.10 |
Haiku 5.5 |
проверяет вердикт Sonnet |
осталась |
Codex: лимит посреди конвейера
Первой головой был Codex по подписке ChatGPT. Находил хорошо: в PR #381 все Critical кругов 1–4 его.
16.08 он упёрся в лимит usage до 22.08. Я пишу, а проверить некому. В тот же день подключил GLM и DeepSeek.
GLM на Z.ai: окно и кэш, которого нет
Z.ai даёт Anthropic-совместимый эндпоинт, хватило второго env-файла.
Первые круги показали пользу. Во втором проходе GLM нашёл два Critical в моих же исправлениях.
Проблема пришла с другой стороны. У Z.ai лимит поинтов в пятичасовом окне, код ошибки 1308. Claude Code по умолчанию делает 10 повторов с паузами, а лимит живёт часами.
Поправил так: два повтора, код 1308 даёт выход сразу, не больше двух прогонов на ключ.
Вторая история — кэш. Цену кругов я считал с расчётом, что Z.ai кэширует префикс промпта. Правило было: шапка байт в байт, бриф в конец. 23.08 замерил.
|
Вызов |
input |
cache_read |
output |
|---|---|---|---|
|
1a |
3011 |
0 |
60 |
|
1b, через 10 с |
3008 |
0 |
39 |
|
2a, через 20 мин |
3011 |
0 |
47 |
|
2b |
3008 |
0 |
60 |
Эндпоинт принимает cache_control, но ноль во всех четырёх вызовах. Кэша нет. Слагаемое за кэш из формулы убрал.
С бесплатной GLM-4.7 вышло два разных продукта. glm-4.7 на подписке стоит под тем же лимитом 1308. Бесплатная glm-4.7-flash живёт в отдельном API со своим ключом и днём четыре раза подряд ответила overloaded.
Gemini 3.7 Flash: быстрая, но падает
Gemini проверил на том же стенде, что и GLM. Две задачи.
Задача A — посеянный баг в одном файле. Задача B — ревью пакета из трёх PR, 168 тыс. токенов на вход.
|
Задача A |
GLM-5.3 |
Gemini 3.7 Flash |
|---|---|---|
|
время |
184 с |
23 с |
|
место и механика |
точно |
точно |
|
воспроизведение и фикс |
есть |
есть, другой формы, эквивалентен |
|
ложных |
0 |
0 |
Условия разные: у GLM были инструменты, у Gemini файл целиком в промпте и thinking medium.
Задачу B получила только Gemini. 56 секунд, 7 находок плюс 3 пункта не баг. Я проверил каждую по чистому клону.
|
Задача B |
Gemini 3.7 Flash |
|---|---|
|
находок |
7 |
|
реальных |
7 |
|
ложных |
0 |
|
тяжесть завышена |
2 |
Одна находка B оказалась дырой в гарантии. Документация обещала сборку из зафиксированных версий, а pip install --upgrade pip тянул свежий pip с PyPI до установки из lock-файла. Её не нашли ни я при написании, ни прежнее ревью.
Gemini CLI на машине не заработал: не ходит через прокси из окружения и получает отказ по региону. Вход через аккаунт Google для частных лиц CLI не обслуживает с 18.06.2026. Рабочий путь — REST с ключом, без инструментов.
Ограничения: thinkingLevel: high давал 503 в четырёх запросах из четырёх, бесплатный тариф — 20 запросов в день, параллельный запрос во время большого — 429.
К 22.08 квота и 503 вывели Gemini из кругов. 26.09 вопрос вернуть её второй головой закрыли: падает постоянно.
Локальная Qwen: ради приватности
У внешних голов граница: только публичный репозиторий. Закрытый код им не показываю.
Отсюда идея локальной модели. Qwen 3.6 35B уже стоит на машине. Лимитов нет, 503 нет, данные не уходят.
Сделал два предохранителя. Отказ при слишком большом диффе вместо тихой обрезки: вердикт по половине изменений хуже, чем никакого. И предупреждение не запускать её во время встречи: 21 ГБ весов и запись звука делят одну машину.
Бенч на том же диффе, где DeepSeek дала 10 находок:
|
|
DeepSeek |
Qwen 3.6 35B |
|---|---|---|
|
находок |
10 |
3 |
|
верных |
10 |
2 |
|
ложных |
0 |
1 |
Ложная находка — Critical про двойной учёт секунд. DeepSeek разобрала тот же случай и отвергла: пути взаимоисключающие. Qwen промахнулась там, где надо держать в голове контракт трёх функций.
22.08 на двух PR вышло хуже: одна совпавшая находка против четырёх ложных Critical и Important. Например, что gh release view требует --latest. Не требует. Qwen 3.6 я снял с состава.
Qwen 3.8 27B получила дельту, то есть только изменения с прошлого круга, по которой все реальные находки уже были известны:
-
Critical нет;
-
Important 1 — совпал с находкой DeepSeek, механика описана точнее;
-
Minor 1 уникальный — русские комментарии в китайском примере конфига;
-
ложных ноль.
Бенч чистый. Первый боевой аудит зоны на 58 тыс. знаков кода закончился иначе. 15,6 ГБ памяти, больше сорока минут — и ни строки вердикта. DeepSeek и GLM на той же зоне ответили за 8–12 минут.
Машина в это время пишет встречи и подсказывает вживую. Голову, которая на один аудит держит почти 16 ГБ памяти, я снял тем же вечером.
Провайдеры: Fireworks, Nebius, OpenRouter
К 04.09 круг GLM шёл 12–25 минут. Пришла рекомендация по Artificial Analysis. Цифры ниже — на 04.09, свежие — в конце раздела.
|
Модель |
Официальный API |
Предложенный хост |
|---|---|---|
|
DeepSeek V4 Flash |
~140 tok/s, $0,11 |
Fireworks: ~260 tok/s, $0,05 |
|
GLM-5.3-Flash |
Z.ai: ~45 tok/s |
Nebius: ~300 tok/s |
Проверил главное требование: Anthropic API с tool use.
|
Провайдер |
Anthropic-эндпоинт |
Что значит для головы |
|---|---|---|
|
Fireworks |
есть, родной |
замена одной строки в env |
|
Nebius Token Factory |
нет, только OpenAI |
нужен переводящий прокси, риск для tool calls |
|
OpenRouter |
есть, совместимый режим |
работает, провайдер фиксируется пресетом |
Nebius отпал сразу: прокси-переводчик — лишняя деталь там, где ломаться нельзя.
Скорость GLM-5.3-Flash по хостам на странице OpenRouter, 04.09:
|
Хост |
tok/s |
первый токен |
|---|---|---|
|
Z.ai |
23 |
4,6 с |
|
Baseten |
92 |
0,83 с |
|
Makora |
80 |
0,68 с |
|
Together |
60 |
0,76 с |
|
Modal |
54 |
0,48 с |
|
DeepInfra |
42 |
0,99 с |
Вердикт — 2–4 тыс. токенов, это минута-две генерации. Остальное время съедает агентный цикл: десятки вызовов Read и Grep, у каждого свой первый токен. При 4,6 с на первый токен тридцать ходов — уже две с лишним минуты ожидания.
Что изменилось к 19.10
Сегодняшние цифры — с другой витрины, Artificial Analysis: медиана за 72 часа, вход 10 тыс. токенов. С таблицей OpenRouter выше их сравнивать напрямую нельзя.
GLM-5.3-Flash:
|
Хост |
tok/s |
первый токен |
|---|---|---|
|
Z.ai |
69 |
2,77 с |
|
Fireworks |
189 |
1,44 с |
|
Nebius |
187 |
1,64 с |
|
Together |
174 |
0,65 с |
|
Makora |
292 |
1,10 с |
|
Modal |
167 |
0,94 с |
|
Baseten |
111 |
0,43 с |
Z.ai по-прежнему последний. На OpenRouter Nebius для GLM 04.09 не было, сегодня он в списках. Anthropic-эндпоинта у него так и нет.
DeepSeek V4.1 Flash:
|
Хост |
tok/s |
первый токен |
|---|---|---|
|
DeepSeek, официальный |
176 |
1,23 с |
|
Together |
291 |
0,37 с |
|
Nebius |
291 |
1,34 с |
|
Baseten |
267 |
0,53 с |
|
CoreWeave |
224 |
0,88 с |
Fireworks в списке Artificial Analysis для V4.1 Flash нет вовсе.
У GLM-5.3-Flash на OpenRouter 04.09 было 23 эндпоинта, сегодня 34. Вход от $0,048 до $0,225 за 1M, у Z.ai $0,15 / $0,50.
Официальный DeepSeek сменил тариф. V4.1 Flash в часы пик стоит $0,30 вход, $0,006 кэш, $1,20 выход за 1M. Вне пика вдвое дешевле. Пик — будни 01:00–04:00 и 06:00–10:00 UTC, по Москве 04:00–07:00 и 09:00–13:00.
17.10 вышла ревизия V4.1-Flash-1017 под именем deepseek-flash. Старое deepseek-v4-flash молча отдаёт новую модель. Я узнал об этом наутро: круги с вечера уже шли на V4.1. Имя в хелпере поменял, пока старое не выключили.
Сколько это в деньгах. Круг DeepSeek 04.09: 68 тыс. токенов входа, 74 тыс. выхода, 1,67M из кэша. По сегодняшнему тарифу:
|
Слагаемое |
Пик |
Вне пика |
|---|---|---|
|
вход 68k |
2,0 ¢ |
1,0 ¢ |
|
кэш 1,67M |
1,0 ¢ |
0,5 ¢ |
|
выход 74k |
8,9 ¢ |
4,4 ¢ |
|
круг |
~12 ¢ |
~6 ¢ |
Утренний круг вдвое дороже вечернего.
Ночные зависания: провайдер ни при чём
Ночные круги висели часами. Я грешил на OpenRouter и обрывы потока.
pmset -g log показал другое. За ночь 04→05.09 — 116 входов в сон. Первый в 22:19, крышка закрыта, питание от батареи. caffeinate -i стоял, но от сна при закрытой крышке на батарее он не спасает.
Поправил три вещи:
-
API_TIMEOUT_MS=300000в хелперах голов; -
timeout -k 30 1800на круг: сон даёт обрыв и повтор хода вместо ночи тишины; -
на батарее ночной прогон пропускается с тревогой.
Калибровка: одна дельта, все головы
05.09 дал всем головам один бриф и один клон. PR #492, 12 файлов.
|
Голова, маршрут |
Время |
Ходов |
Вход / кэш |
Вердикт |
|---|---|---|---|---|
|
GLM-5.3-Flash, Fireworks |
8,4 мин |
31 |
150k / 1,82M |
1 Critical, 2 I, 2 M |
|
GLM-5.3-Flash, OpenRouter (Together) |
16,0 мин |
35 |
2,22M / 0,49M |
тот же Critical, 3 M |
|
Qwen3.8-Flash, OpenRouter (Alibaba) |
14,1 мин |
21 |
— / 0,89M |
тот же Critical, 3 M, один ложный |
|
DeepSeek V4 Flash, официальный |
10,7 мин |
30 |
76k / 1,6M |
0 Critical, 2 I на том же месте |
Три запуска из четырёх, две модели, нашли один реальный Critical в уже смерженном коде.
DeepSeek увидела то же место, но назвала его Important. Место одно, оценка тяжести у голов разная.
Поле cost у Claude Code для чужих моделей врёт: считает по тарифу Anthropic. Цену смотрю по токенам и прайсу провайдера.
Следом три боевых круга по хотфиксу. За день GLM на Fireworks отработал пять раз: пять полных вердиктов, ни одного обрыва, из кэша 1,4–2,1M токенов при входе 130–275k. Круг — 5–15 центов.
Решение того дня: GLM через Fireworks напрямую, OpenRouter запасным, DeepSeek через официальный API.
MiMo-Pro: нашёл то, чего не видели остальные
22.09 встал вопрос: может, заменить головы на MiMo-Pro от Xiaomi? MiMo пошёл третьей головой на ту же дельту и тот же бриф, через OpenRouter.
|
Голова |
Вердикт, знаков |
Critical |
Important |
Minor |
Время |
|---|---|---|---|---|---|
|
DeepSeek |
19 134 |
2 |
— |
— |
3 мин |
|
GLM-5.3-Flash |
10 949 |
1 |
— |
— |
5 мин |
|
MiMo-Pro |
15 306 |
2 |
2 |
3 |
18 мин |
Оба Critical MiMo совпали с находками штатных голов.
Плюс две находки, каких не нашли ни DeepSeek, ни GLM. Обе я проверил по коду.
Первая. Тест проверял, что скрипт выдаёт нужный набор сообщений об ошибке, и не проверял, какое сообщение к какому коду выхода. Поменяй две ветки местами, и тест останется зелёным, а в CI сообщения пойдут перепутанными.
Вторая. Скрипт мутационных тестов считал занятую машину провалом. Если посреди прогона начиналась встреча, итог выходил красным, и человек шёл искать дефект, которого нет.
В состав MiMo не вошёл, остался кандидатом. 18 минут против 3–5. По сегодняшнему прайсу OpenRouter вход $0,43 против $0,15 у GLM, выход $0,87 против $0,50. Критерий входа записал так: доля подтверждённых собственных находок не ниже, чем у штатной пары.
Деньги и лимиты: что решило состав
К концу сентября выбор делали деньги и доступность.
|
Дата |
Что случилось |
Что сделали |
|---|---|---|
|
24.09 |
недельный лимит подписки на исходе |
Opus убран из кругов, состав DeepSeek + Sonnet |
|
24.09 |
на счёте DeepSeek $3,41 |
официальный API остаётся основным |
|
26.09 |
облачный кредит кончился |
публичные круги — одна DeepSeek |
|
29.09 |
Opus нужен для тяжёлого |
Opus — один финальный прогон на задачу |
|
30.09 |
вернули кредит на Fireworks |
GLM снова вторая голова |
|
03.10 |
Fireworks: 412, аккаунт приостановлен |
GLM только по явному флагу |
|
04.10 |
— |
DeepSeek — вторая голова по умолчанию |
Sonnet и Opus в кругах тратят тот же недельный лимит подписки, что и основная работа. Быстрее всех его съедает Opus.
Что осталось
|
Роль |
Модель |
Когда |
|---|---|---|
|
голова кругов |
Sonnet 5.5, medium, high на тяжёлом |
каждое изменение |
|
вторая голова |
DeepSeek V4.1 Flash, официальный API |
публичный код |
|
проверка вердикта |
Haiku 5.5 |
вердикт Sonnet с Critical и тяжёлые зоны |
|
финальный прогон |
Opus 5.5 |
один раз: деньги, миграции, конкурентность, безопасность |
Время по журналу кругов с 05.10:
|
Голова |
Кругов |
Медиана |
90 % кругов быстрее |
|---|---|---|---|
|
DeepSeek |
356 |
4 мин |
7 мин |
|
Sonnet |
620 |
2 мин |
6 мин |
В начале сентября круг DeepSeek шёл 10–11 минут, на дельтах к концу месяца — 3–4. Часть выигрыша, по-моему, дали узкие круги: с четвёртого круга голова смотрит только дельту. В те же недели менялись маршрут DeepSeek и сама модель.
Haiku код не читает и головой не считается. Она ищет ошибки в вердикте Sonnet: находку без цитаты или воспроизведения, непрочитанный файл, пропуск в постановке.
Вердикт для меня — вход для решения. Каждую находку я проверяю по коду и прогоном до правок. Понижаю или отбраковываю только с замером.
Если у DeepSeek кончился баланс, круг идёт на Sonnet, и это видно в сводке. Срок DeepSeek — 12 минут, дальше скрипт снимает её сам.
Сколько стоит круг, которого не было
11.10 мы слили четырнадцать PR от Codex без кругов, чтобы ускориться.
Четыре пришлось чинить:
-
один ослабил гейт документации;
-
один терял текст коротких реплик и переписывал автора — откачен целиком;
-
один при отмене задачи мог стереть отметку владельца;
-
один давал неверный совет по окружению.
Две находки из четырёх — данные пользователя. Разбор постфактум стоил шести кругов, трёх сверок и трёх прогонов Opus. Круг до мержа — 5–10 минут.
Теперь любой коммит в main мимо круга получает круг по диапазону. Выкат рабочей установки — только после него, особенно если задеты запись и диаризация.
Что вынес
-
16.08 лимит Codex оставил меня без проверки на шесть дней. С тех пор головы две, от разных провайдеров.
-
Кэш Z.ai и бесплатная GLM-4.7 не подтвердились замером.
-
Ночные зависания были сном машины:
pmsetпоказал 116 входов в сон за ночь. -
Бенч на дельте не равен боевому аудиту: Qwen 3.8 прошла первый и упала на втором.
Дальше
Следующий замер — польза каждой головы в цифрах. Сколько уникальных Critical дала каждая, сколько подтвердилось воспроизведением и сколько стоил один подтверждённый. Пока это видно по отдельным кругам, по всем 1517 я не считал.
Код Чароита открыт: github.com/charoiteai/Charoite_audio. Обвязка кругов в репозиторий не входит, все PR из таблиц там есть.
Предыдущая часть — про NLI.
ссылка на оригинал статьи https://habr.com/ru/articles/1096420/