Бенчмарк 19 моделей — мини-реляционная СУБД (60 минут на модель)

Задача: спроектировать и реализовать SQL-движок — лексер, парсер грамматики, исполнитель с JOIN, GROUP BY, агрегатами, ORDER BY и менеджером транзакций (BEGIN/COMMIT/ROLLBACK) + PRIMARY KEY. 19 тестов по тирам, грейд против эталонного движка. Путь: ccr-session -p (агент сам пишет файл). Дедлайн — 60 минут. Голые MiniMax исключены. Снимок: 2026-06-20 20:03.
19моделей
1СУБД 19/19
53средний балл (оценённых)
4обрывов апстрима
2недоступны / не уложились
Главный вывод. Час против 15 минут перевернул картину. В коротком прогоне полную СУБД (19/19) собирали лишь 2 модели; здесь победитель or/owl-alpha взял 19/19, а oc/mimo, kl/nex-n2-pro, oc/big-pickle, kl/kilo — которые в 15-мин прогоне падали в 0/19 — теперь дали 17–18/19. Время решало: модели достраивали JOIN, GROUP BY и транзакции, на которые раньше не успевали.
Балл — ручная оценка прогона (1–100) по код-ревью реального файла. Качество — взвешенно: Архит. (корректность парсера/исполнителя) 30% · Края 20% · Структура 20% · идиом/эфф/доки по 10%. Статусы: обрыв апстрима — стрим оборвался, добивка не вернула результат; нет провайдера — модель недоступна на бэкенде; не уложился — за 60 мин не записал файл.
#МодельСтатусБаллТестыКачествоАрхит.Стр-раКраяИдиомЭффДокиСтрокВремяturnsОбоснование (код-ревью)
1🏆 or/owl-alphaоценено9419/199296929588888074434м22с10119/19 — ЕДИНСТВЕННАЯ модель, построившая полностью корректную СУБД (подтверждено независимым прогоном против эталона). Чистая многослойная архитектура в 743 строках: tokenize → Parser (280 строк) → Table/Database → execute/execute_select с хелперами eval_value/row_matches. Закрыла все края: JOIN+GROUP BY, ORDER BY DESC+LIMIT, DELETE с WHERE, транзакции BEGIN/COMMIT/ROLLBACK, обработку syntax-ошибок. 101 ход за 34 мин. В 15-мин прогоне была 18/19 — час дал закрыть последний тест. Победитель v2.
2🥈 oc/mimo-v2.5-freeоценено8618/198585908288828066225м49с3418/19 — полноценная СУБД 662 строки с чётко разделёнными слоями: tokenize, класс Parser, Catalog/Table/RowSchema, отдельный TxnMgr (транзакции), _execute_select. Единственный провал — ORDER BY age DESC LIMIT 2 выдаёт carol,bob вместо carol,alice (баг порядка при DESC-сортировке через класс-обёртку _Desc). Чисто, __slots__, докстринги. В прошлом 15-мин прогоне эта модель давала 0/19 — лишнее время позволило достроить движок.
3🥉 kl/nex-n2-proоценено8518/198686908490847887060м00с18/19 — чистая архитектура с настоящими AST-узлами (ColumnRef/Literal/Comparison/BinaryCondition/Aggregate/SelectStar/JoinClause), type hints, отдельный tokenizer и Database. Единственный провал — базовый join (неверный порядок строк; при этом join_where и join_groupby прошли). 870 строк. Упёрся в дедлайн 60 мин. В прошлом 15-мин прогоне был таймаут 0/19.
4oc/big-pickleоценено8417/1985849580907878100913м16с3517/19 — самая детальная архитектура из всех: 1008 строк с настоящими AST-классами (ColumnRef/Literal/BinOp/Aggregate + узел на каждый statement), Parser на 272 строки, отдельные исключения ParseError/DuplicateKeyError, Table/Database, развитый слой исполнителя (_eval_expr/_eval_join_expr/_eval_aggregate/_sort_results_ordered). Два провала, оба → ERROR (исключение): ORDER BY age DESC LIMIT 2 и DELETE FROM u WHERE age<31. В прошлом 15-мин прогоне был таймаут 0/19 — время дало достроить.
5kl/kiloоценено8217/198284868084787510199м49с1617/19 (восстановлен добивкой — первый прогон оборвался на апстриме). 1018 строк, recursive-descent парсер в функциональном стиле (48 функций: tokenize/peek/expect/match_kw/parse_expr...). Два провала, оба → ERROR: ORDER BY age DESC LIMIT и DELETE. В прошлом 15-мин прогоне был таймаут 0/19 — время + добивка дали результат.
6or/nex-n2-pro:freeоценено7014/197674827082787275760м00с14/19 — полный read-path: SELECT, WHERE с одиночным сравнением, ORDER BY, агрегаты, GROUP BY и JOIN работают. Детальный AST (757 строк, 45 классов: Literal/ColumnRef/BinaryCondition/And-/OrCondition/Aggregate...). Провалил AND/OR-комбинацию условий, UPDATE, DELETE и транзакции (BEGIN/COMMIT/ROLLBACK) — мутации и tx не доделаны. Упёрся в дедлайн 60 мин.
7nv/minimax-m3оценено6415/1966726270655565119960м00с15/19, но упёрся в 60 мин с НЕдоделанным рефактором: в коде дубли eval_cond/eval_cond_v2 и eval_operand/eval_operand_v2 — переписывал движок и не свёл. Из-за этого базовый SELECT * → ERROR, агрегаты сломаны (COUNT(*) WHERE выдаёт 1\n1 вместо 2), хотя JOIN/GROUP BY/ORDER/UPDATE/DELETE/транзакции работают. 1198 строк, god-class Engine. В 15-мин прогоне та же модель давала чистые 19/19 — здесь ушла в переусложнение.
8kl/openrouterоценено5611/1963627058686062106560м00с11/19 — работают CRUD, WHERE с AND/OR, ORDER BY, агрегаты без группировки, PRIMARY KEY и транзакции (BEGIN/COMMIT/ROLLBACK; есть отдельные Parser/Catalog/TransactionManager/Executor). Не осилил GROUP BY, ВСЕ виды JOIN, DELETE с WHERE, ORDER BY DESC+LIMIT, обработку syntax-ошибок. 1065 строк, упёрся в 60 мин. В прошлом прогоне был 0/19.
9oc/north-mini-code-freeоценено224/194138503055355042529м42с2974/19 за рекордные 297 ходов — упорно билась полчаса, но осилила лишь базовый CRUD + WHERE с одним '=' (create/select/where_eq/delete). Провалила AND/OR, сортировку, ВСЕ агрегаты, GROUP BY, JOIN, UPDATE, PK-уникальность, транзакции, обработку ошибок. Архитектура — монолит: ~380 строк в одном классе InMemorySQLDatabase без разделения на лексер/парсер/исполнитель. Прошлый прогон давал 1/19.
10or/laguna-m.1:freeоценено161/194030602260355595454м14с501/19 (прошёл только error_syntax). 954 строки, 33 класса — много структуры, компилируется, но фундаментальный баг: строки ДУБЛИРУЮТСЯ (SELECT name выдаёт alice дважды, COUNT(*)=4 при двух INSERT вместо 2). Дублирование при вставке/хранении рушит почти все тесты. 50 ходов за 54 мин баг не нашли.
11or/gpt-oss-120b:freeоценено130/19453065257055587005м34с2699 строк за 2 хода, компилируется, но движок нерабочий: SELECT name ... WHERE age>26 печатает None вместо alice, COUNT(*) → ERROR. Базовая выборка значений и агрегаты сломаны. Честный 0/19. Стабильно для этой модели — в прошлых прогонах та же картина (большой движок, падает на базе).
12kl/step-3.7-flashоценено120/194125651570505545928м16с118458-строчный движок за 118 ходов, но НЕ работает. Падал на import (инлайн-флаг (?i) не в начале склеенного regex — ошибка Python 3.11+); после ручного фикса флага каждый запрос всё равно → ERROR (парсер/исполнитель нерабочий). Каркас слоёв есть (TOKENIZER/SPEC, классы T/P, executor), но корректность нулевая. Честный 0/19. В прошлом прогоне эта же модель дала 19/19 — сильная нестабильность сэмплинга.
13or/freeоценено110/193825552055505068310м17с3683 строки с парсером (self.consume/SPECIAL-токены), но файл НЕ компилируется — SyntaxError на строке 267: self.consume('SPECIAL', '*')') с лишней кавычкой (незавершённый строковый литерал). Программа не запускается → 0/19. Модель не проверила, что код хотя бы парсится.
·kl/nemotron-3-ultra-550b-a55b⚠️ обрыв апстрима0/1946м09с1стрим апстрима оборвался (upstream_stream_truncated); добивка с 4 ретраями результат не вернула
·kl/laguna-m.1⏱ не уложился в 60 мин0/1960м00сза 60 минут не записала рабочий файл (нет вывода)
·oc/deepseek-v4-flash-free⚠️ обрыв апстрима0/199м53с1стрим апстрима оборвался (upstream_stream_truncated); добивка с 4 ретраями результат не вернула
·oc/nemotron-3-ultra-free⚠️ обрыв апстрима0/1962м55с1стрим апстрима оборвался (upstream_stream_truncated); добивка с 4 ретраями результат не вернула
·ms/DeepSeek-V4-Pro🚫 нет провайдера0/193м14с1нет апстрим-провайдера на бэкенде (400 «has no provider supported») — недоступна
·or/nemotron-3-ultra-550b-a55b:free⚠️ обрыв апстрима0/1960м00сстрим апстрима оборвался (upstream_stream_truncated); добивка с 4 ретраями результат не вернула