Как запустить
Вся работа с бенчмарком идёт через одну команду — prism. Команды зовутся через
uv run — отдельно активировать окружение не нужно, флаги передаются как есть. Эта
страница — полный справочник: установка и каждая команда со всеми флагами.
Шпаргалка
prismбез команды печатает короткую подсказку «что делать». Справка по любой команде —uv run prism <команда> --help.
Установка
Что нужно заранее: Docker, Python 3.10+, make. Для категории B — образ
учебной 1С (prism-onec, собирается из своего дистрибутива; как получить — подскажет
make onec-guide) и ключи API моделей в .env (нужны для генерации; чтобы смотреть
готовый лидерборд — нет).
Окружение управляет uv (нет uv? — curl -LsSf https://astral.sh/uv/install.sh | sh; или соберите окружение обычным
python -m venv .venv && source .venv/bin/activate && pip install -e . — тогда prism
зовётся напрямую). Два инструмента: make — поставить, prism — пользоваться.
make setup-all # окружение (uv) + docker-образы инструментов A + учебная 1С B
# хостовый dev-режим (без Docker, для категории A): make setup + флаги --runner/--bsl local
| Цель | Что ставит |
|---|---|
make setup-all | всё в Docker (дефолт): окружение + образы инструментов A + учебная 1С B |
make setup-docker | окружение + docker-образы инструментов A (без учебной 1С B) |
make setup | хостовый dev-режим: инструменты осей на хост (зови с --runner/--bsl local) |
make image-onec | образ учебной 1С для категории B (проведёт по дистрибутиву, если его нет) |
Команды одним взглядом
| Команда | Что делает |
|---|---|
prism doctor | быстрый чек готовности: инструменты осей и ключи моделей (без сети) |
prism ping | живой минимальный запрос к моделям — проверить ключ и связь |
prism generate | модели пишут код по задачам → results/experiment_*.json |
prism score | пересчитать оценку готового кода по осям S·M·O·P → results/auto/ |
prism leaderboard | мгновенно показать лидерборд из готовой оценки (без пересчёта) |
prism check | проверить целостность: контракты, задания, эталоны, инструменты |
prism submit | упаковать прогон для шеринга (хеш совместимости) или принять чужой |
prism tasks | пересобрать видимый банк задач (tasks/README.md) |
prism docs | пересобрать таблицы лидерборда и бейджи в README и доках из оценок |
Первый запуск по шагам: doctor (всё ли готово) → ping (отвечают ли модели) →
generate --category A --mock (сухой прогон без сети) → score (оценить) → submit
(поделиться).
Где исполняется код кандидата
По умолчанию — в Docker-песочнице (код от нейросети недоверенный): категория A в образах
prism-onescript+prism-bsl-ls, категория B — вprism-onec. Хостовый режим включается явно (--runner local/--bsl local). На баллы режим не влияет — только на то, где крутится песочница.
prism doctor
Быстрый (секунды, без прогонов в 1С и сетевых вызовов) ответ на вопрос «всё ли у меня
есть, чтобы работать». Три среза: окружение (Python/uv), инструменты осей (OneScript,
BSL LS, образ prism-onec) и какие ключи моделей заданы в .env. В конце — вердикт
«готов к: генерации · оценке A · оценке B».
uv run prism doctor
Флагов нет. Каждый недостающий пункт несёт подсказку, что доставить.
prism ping
Живой минимальный запрос к каждой модели каталога: проверяет, что ключ канала рабочий и провайдер отвечает. Тратит немного токенов — по одному короткому запросу на модель. Модель без ключа не ошибка, а пропуск (запрос не делается).
uv run prism ping # все модели с заданными ключами
uv run prism ping --models deepseek gemini # только выбранные
| Флаг | По умолчанию | Назначение |
|---|---|---|
--models [KEY ...] | все из каталога | какие модели пинговать (ключи из generation/models.yaml) |
Код возврата: 1, если хоть одна модель с ключом не ответила (годится для CI);
пропуски на код не влияют.
prism generate
Модели пишут код кандидатов по задачам выбранной категории. Для каждой пары
(задача, модель) собирается контекст (категория B — агентным сбором метаданных),
делается прогон, ответы хешируются (для воспроизводимости) и пишутся в
results/experiment_*.json — в той же схеме, которую читает prism score.
uv run prism generate --category A --mock # сухой прогон без сети (проба конвейера)
uv run prism generate --category A --models claude # одна модель, все задачи A
uv run prism generate --category B --models gigachat gpt # несколько моделей сразу
uv run prism generate --category A --dry-run # только смета стоимости, без сети
uv run prism generate --category B --tasks B1 B2 --max-cost 5
| Флаг | По умолчанию | Назначение |
|---|---|---|
--category {A,B} | обязателен | категория задач |
--models [KEY ...] | все из каталога | ключи моделей (generation/models.yaml) |
--tasks [ID ...] | все задачи категории | какие задачи генерировать (напр. A1 A2) |
--edition EDITION | core | издание из editions/ (условия прогона) |
--resume EXP_NAME | — | дозаписать в существующий эксперимент: пропустить готовые пары |
--concurrency N | из params.yaml | параллельных пар задача×модель |
--max-cost USD | без капа | новые пары не запускать сверх порога стоимости |
--retries N | 3 | повторов при транзиентном сбое сети |
--dry-run | — | только предполётная смета стоимости, без вызовов сети |
--mock [canonical|stub] | — | сухой прогон без сети: имитация модели mock/echo (canonical — эталон задачи, stub — заглушка) |
Ключи API задаются в .env (копия .env.example) — он подхватывается автоматически.
Какой ключ нужен для модели — по access.adapter в generation/models.yaml.
Надёжность больших прогонов
Каждый готовый результат сразу пишется в
results/<exp>.parts/(атомарно) — падение на 60/100 не теряет готовое.--resume <exp_name>дозапускает только недостающие/упавшие пары. Транзиентные сбои сети (429/5xx/таймаут) повторяются с паузой; перманентные (401/нет кредитов) — сразу. Цены берутся из датированной таблицыgeneration/pricing.yaml; модель без цены считается нулевой с предупреждением (бюджет недосчитан, а не врёт).
prism score
Авто-оценка Уровня 1 готовых генераций — без новой генерации, но с пересчётом:
код кандидатов исполняется в песочнице (по умолчанию Docker), считаются оси S·M·O·P и
общий балл Q, результат пишется в results/auto/<exp>_auto_l1.json. Без --experiment
оценивается свежий прогон каждой категории (A и B).
uv run prism score # свежий прогон A и B → два лидерборда
uv run prism score --full # + построчная таблица S·M·O·P·Q и срезы
uv run prism score --experiment results/experiment_A_<timestamp>.json
uv run prism score --models ygpt5_lite ygpt51_pro # дооценить только эти модели (дозапись)
uv run prism score --runner local --bsl local # на хосте вместо Docker
| Флаг | По умолчанию | Назначение |
|---|---|---|
--experiment PATH | свежайший каждой категории (A и B) | какой набор генераций оценивать |
--models [KEY ...] | все | оценить только эти модели и дозаписать в существующий auto_l1 (прежние не пересчитываются) |
--edition EDITION | core | издание (какие оси считать) |
--out PATH | results/auto/<exp>_auto_l1.json | куда писать (имеет смысл только с явным --experiment) |
--full | — | построчная таблица S·M·O·P·Q и срезы по тегам вместо лидерборда |
--concurrency N | env / ≤4 | параллельных прогонов (поверх PRISM_CONCURRENCY) |
--runner {local,docker} | env / docker | песочница оси M, OneScript (поверх PRISM_RUNNER) |
--bsl {local,docker} | env / docker | инструмент осей S/O, BSL LS (поверх PRISM_BSL) |
prism leaderboard
Мгновенная сводка из уже посчитанной оценки L1 — читает results/auto/*_auto_l1.json,
без пере-исполнения в 1С (доли секунды против минут у score). Без --experiment
печатает свежий лидерборд каждой категории (A и B) единым снимком.
uv run prism leaderboard # свежий лидерборд A и B
uv run prism leaderboard --full # + построчная таблица и срезы по тегам
uv run prism leaderboard --experiment results/auto/<exp>_auto_l1.json # конкретная оценка
| Флаг | По умолчанию | Назначение |
|---|---|---|
--experiment AUTO_L1 | свежайший каждой категории | путь к конкретной оценке *_auto_l1.json |
--full | — | добавить построчную таблицу S·M·O·P·Q и срезы по тегам |
prism check
Проверка целостности — «прехук» данных бенчмарка. Без аргументов прогоняет всё; флагами можно сузить до одной задачи или категории (быстрая итерация).
uv run prism check # полная проверка (гейт перед коммитом)
uv run prism check --task B15 # быстро: эталон только задачи B15
uv run prism check --category A # эталоны только категории A
Четыре среза, от дешёвого к дорогому:
- Контракты метрики — конституция/протокол/издания/генерация грузятся и согласованы.
- Контракты заданий — каждая задача валидна; у исполнимых есть тесты и точки входа.
- Когерентность эталонов —
canonical.bslкаждой задачи проходит свои скрытые тесты на 100% (разом валидирует и тесты, и эталон). Требует песочницы; нет инструмента — срез пропускается. - Инструменты по осям — доступность OneScript (M), BSL LS (S/O), образа
prism-onec(B).
| Флаг | По умолчанию | Назначение |
|---|---|---|
--task [ID ...] | все задачи | прогнать эталоны только этих задач |
--category {A,B} | обе | прогнать эталоны только этой категории |
--concurrency N | env / ≤4 | параллельных прогонов |
--runner {local,docker} | env / docker | песочница оси M |
--bsl {local,docker} | env / docker | инструмент осей S/O |
Код возврата: 0 — нарушений нет; 1 — есть хоть один сбой (контракт или эталон, не
прошедший свои тесты). Подходит для CI-гейта.
prism submit
Упаковать свой прогон для шеринга — так, чтобы автор бенчмарка мог влить его в лидерборд и
быть уверенным, что цифры сравнимы. Оценки L1 на разных версиях бенчмарка несравнимы, поэтому
к результату прикладывается compat_hash — отпечаток версии (метрика + набор задач).
# контрибьютор: упаковать свежую оценку
uv run prism submit # → results/submissions/<exp>_submission.json
uv run prism submit --experiment results/auto/<exp>_auto_l1.json
# автор: принять чужой пакет
uv run prism submit --verify file_submission.json # сверить версию бенчмарка
uv run prism submit --verify file_submission.json --apply # + влить в results/auto/
| Флаг | По умолчанию | Назначение |
|---|---|---|
--experiment AUTO_L1 | свежайший | какую оценку упаковать |
--verify FILE | — | режим автора: сверить отпечаток чужого пакета с текущим репозиторием |
--apply | — | с --verify: при совместимости влить оценку в results/auto/ |
При совпадении отпечатка пакет можно вливать (--apply кладёт оценку в results/auto/,
дальше лидерборд пересобирает prism docs); не совпал — прогон на другой версии, цифры
несравнимы (код возврата 1).
prism tasks
Пересобирает видимый банк задач — файл tasks/README.md со списком всех заданий, их
навыками и конструкциями 1С — из task.yaml каждой задачи. Запускать после добавления или
изменения задач (это же гейтит prism check).
uv run prism tasks
Флагов нет.
prism docs
Пересобирает таблицы лидерборда и счётные бейджи в README.md, docs/leaderboard.md и
docs/status.md — подменяет помеченные регионы между <!-- prism:KEY --> данными из
results/auto/*_auto_l1.json. Запускать после prism score.
uv run prism docs
Флагов нет. Таблицы — производные данные (источник правды — оценки в results/auto/),
поэтому руками их не правят.
Переменные окружения
Управляют исполнением и не входят в идентичность балла. Работают из .env (см.
.env.example) и как обычные переменные окружения. Приоритет: флаг CLI > переменная
окружения > .env.
| Переменная | По умолчанию | Что делает |
|---|---|---|
PRISM_RUNNER | docker | песочница оси M (OneScript): docker | local |
PRISM_BSL | docker | инструмент осей S/O (BSL LS): docker | local |
PRISM_CONCURRENCY | ≤4 | сколько кандидатов считать параллельно |
PRISM_JAVA | автопоиск | путь к java 21+ для BSL LS в режиме local |
PRISM_ONEC_MEMORY | — | лимит памяти контейнера 1С (docker --memory), напр. 2g |
PRISM_ONEC_CPUS | — | лимит CPU контейнера 1С (docker --cpus), напр. 1 |
PRISM_PROXY_RU | — | прокси для отечественных каналов (YandexGPT, GigaChat) |
PRISM_PROXY_INTL | — | прокси для зарубежных каналов (OpenRouter) |
Не хватает памяти при параллельном прогоне категории B — снизьте PRISM_CONCURRENCY или
задайте PRISM_ONEC_MEMORY / PRISM_ONEC_CPUS. При нехватке прогон честно помечается «не
измерено», а не выдаёт неверный балл.
