Skip to content

Latest commit

 

History

History
284 lines (222 loc) · 20.2 KB

File metadata and controls

284 lines (222 loc) · 20.2 KB
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). На баллы режим не влияет — только на то, где крутится песочница.


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 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; модель без цены считается нулевой с предупреждением (бюджет недосчитан, а не врёт).

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 (прежние не пересчитываются)
--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)

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

Четыре среза, от дешёвого к дорогому:

  1. Контракты метрики — конституция/протокол/издания/генерация грузятся и согласованы.
  2. Контракты заданий — каждая задача валидна; у исполнимых есть тесты и точки входа.
  3. Когерентность эталоновcanonical.bsl каждой задачи проходит свои скрытые тесты на 100% (разом валидирует и тесты, и эталон). Требует песочницы; нет инструмента — срез пропускается.
  4. Инструменты по осям — доступность 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. При нехватке прогон честно помечается «не измерено», а не выдаёт неверный балл.