| description | Справочник команды prism: установка и запуск бенчмарка генерации кода 1С — генерация, оценка по SMOP, прогон моделей, все команды и флаги. |
|---|
Вся работа с бенчмарком идёт через одну команду — prism. Команды зовутся через
uv run — отдельно активировать окружение не нужно, флаги передаются как есть. Эта
страница — полный справочник: установка и каждая команда со всеми флагами.
!!! tip "Шпаргалка"
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 и доках из оценок |
prism models |
показать каталог моделей — откуда брать ключи для --models (без сети) |
prism rebuild |
пересобрать experiment_*.json из чекпойнтов .parts (если прогон обрывался) |
prism charts |
нарисовать графики лидерборда (SVG + PNG) |
Первый запуск по шагам: doctor (всё ли готово) → ping (отвечают ли модели) →
generate --category A --mock (сухой прогон без сети) → score (оценить) → submit
(поделиться).
!!! note "Где исполняется код кандидата"
По умолчанию — в Docker-песочнице (код от нейросети недоверенный): категория A в
образах prism-onescript + prism-bsl-ls, категория B — в prism-onec. Хостовый режим
включается явно (--runner local / --bsl local). На баллы режим не влияет — только на
то, где крутится песочница.
Быстрый (секунды, без прогонов в 1С и сетевых вызовов) ответ на вопрос «всё ли у меня
есть, чтобы работать». Три среза: окружение (Python/uv), инструменты осей (OneScript,
BSL LS, образ prism-onec) и какие ключи моделей заданы в .env. В конце — вердикт
«готов к: генерации · оценке A · оценке B».
uv run prism doctorФлагов нет. Каждый недостающий пункт несёт подсказку, что доставить.
Живой минимальный запрос к каждой модели каталога: проверяет, что ключ канала рабочий и провайдер отвечает. Тратит немного токенов — по одному короткому запросу на модель. Модель без ключа не ошибка, а пропуск (запрос не делается).
uv run prism ping # все модели с заданными ключами
uv run prism ping --models deepseek gemini # только выбранные| Флаг | По умолчанию | Назначение |
|---|---|---|
--models [KEY ...] |
все из каталога | какие модели пинговать (ключи из generation/models.yaml) |
Код возврата: 1, если хоть одна модель с ключом не ответила (годится для CI);
пропуски на код не влияют.
Модели пишут код кандидатов по задачам выбранной категории. Для каждой пары
(задача, модель) собирается контекст (категория B — агентным сбором метаданных),
делается прогон, ответы хешируются (для воспроизводимости) и пишутся в
results/experiment_*.json — в той же схеме, которую читает prism score.
uv run prism generate --category A --mock # сухой прогон без сети (проба конвейера)
uv run prism generate --category A --models sonnet5 # одна модель, все задачи A
uv run prism generate --category B --models gigachat_max opus # несколько моделей сразу
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 ...] |
все из каталога | ключи моделей; список — prism models (каталог в 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.
!!! note "Надёжность больших прогонов"
Каждый готовый результат сразу пишется в results/<exp>.parts/ (атомарно) — падение на
60/100 не теряет готовое. --resume <exp_name> дозапускает только недостающие/упавшие
пары. Транзиентные сбои сети (429/5xx/таймаут) повторяются с паузой; перманентные
(401/нет кредитов) — сразу. Цены берутся из датированной таблицы generation/pricing.yaml;
модель без цены считается нулевой с предупреждением (бюджет недосчитан, а не врёт).
Авто-оценка Уровня 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 (прежние не пересчитываются) |
--task [ID ...] |
все задачи | оценить только эти задачи с дозаписью в auto_l1 (напр. --task B16 B17); комбинируется с --models |
--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) |
Мгновенная сводка из уже посчитанной оценки 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 и срезы по тегам |
Проверка целостности — «прехук» данных бенчмарка. Без аргументов прогоняет всё; флагами можно сузить до одной задачи или категории (быстрая итерация).
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-гейта.
Упаковать свой прогон для шеринга — так, чтобы автор бенчмарка мог влить его в лидерборд и
быть уверенным, что цифры сравнимы. Оценки 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).
Пересобирает видимый банк задач — файл tasks/README.md со списком всех заданий, их
навыками и конструкциями 1С — из task.yaml каждой задачи. Запускать после добавления или
изменения задач (это же гейтит prism check).
uv run prism tasksФлагов нет.
Пересобирает таблицы лидерборда и счётные бейджи в 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. При нехватке прогон честно помечается «не
измерено», а не выдаёт неверный балл.