PRISM/genlab-1c / prism
v1.4.0Star10

Архитектура

Эта страница — для тех, кто хочет заглянуть внутрь: разработчиков и тех, кто думает дополнять бенчмарк. Нужна просто методика — она на странице Как это работает.

Данные и код

Репозиторий делится на данные (правда о том, что и как мы меряем) и код (инструмент, который это исполняет).

Данные — что и как оценивать:

КаталогЧто лежит
metrics/правила метрики SMOP: общие определения осей (конституция) + как их считает машина и как ставит эксперт (два протокола)
tasks/сами задания: условие, скрытые тесты, эталон; для платформенных — ещё и описание учебной базы
editions/профили прогона: какие оси считать и в каких условиях решала модель
generation/с какими моделями работаем: каталог моделей, их числовые параметры, системные промпты, таблица цен

Код — чем оценивать (папка harness/):

МодульЗа что отвечает
generate/модели пишут код по задачам: адаптеры провайдеров, агентный сбор метаданных (категория B), чекпойнт/--resume, ретраи, учёт бюджета, офлайновая имитация --mock
score/оценка кода по осям S · M · O · P и общий балл Q (по модулю на ось)
execute/запуск кода в песочнице: OneScript (категория A), headless-1С (B), BSL LS (оси S/O), сборка учебной базы из описания
stats/срезы по тегам и согласие машины с экспертом
report/генерация таблиц лидерборда и банка задач (prism docs, prism tasks)
preflight, submitпредполётные проверки (doctor, ping) и упаковка прогона для шеринга (submit)

Сверху — тонкая обвязка: cli (разбор команд), orchestrate (прогон оценки), check (целостность), loaders/settings (чтение данных и ключей). Логики в диспетчере нет — он только связывает слои.

Метрика: одна конституция, два протокола

Сердце бенчмарка — каталог metrics/:

Ключевая идея: оба уровня меряют одно и то же (по одной конституции) — различаются только протоколы. Поэтому их оценки сравнимы, и главный научный результат проекта — согласие L1 с L2 (каппа Коэна).

Задача = условие + скрытая проверка + эталон

Каждая задача — самодостаточный каталог. Состав зависит от категории:

ФайлКатегория A (алгоритмика)Категория B (платформа)
task.yamlусловие, точка входа, тегиусловие, паттерны функции, ожидаемые объекты, теги
тестыtests.yaml (скрытые кейсы)tests.bsl (проверки на BSL)
эталонcanonical.bslcanonical.bsl
оптимальностьperf.yaml (генератор растущего входа)
учебная базаconfig_spec.yaml + fixtures.yaml (синтетическая конфигурация и данные)

Инвариант: эталон обязан проходить свои скрытые тесты на 100% — иначе сломаны тесты или эталон. Это и гейтит prism check. Для категории B база целиком воссоздаётся из config_spec.yaml + fixtures.yaml при каждом прогоне (в репозиторий база не попадает).

Каталог моделей и адаптеры

Модель — это факты, канал доступа — отдельно. В generation/models.yaml модель описана фактами: id, вендор, возможности (окно контекста, поддержка инструментов). А как до неё достучаться — поле access.adapter: один и тот же вендор может идти разными каналами (Claude через OpenRouter, Qwen — локально через Ollama).

Добавить нового провайдера = один файл-адаптер в harness/generate/adapters/ плюс запись в каталоге. Остальной код не трогается.

Издания — «в каких условиях испытывали»

Издание (editions/) — профиль прогона: какие оси считаем и при каких условиях модель решала задачу. Один и тот же набор задач можно прогнать по-разному:

Издание отвечает на вопрос «в каких условиях испытывали», а не «кто проверил результат». «Проверено экспертом» (Verified) — это отдельное измерение, не издание.

Поток данных: от задачи до оценки

flowchart TD
    IN["Задания · модели · издание"]
    GEN["generate<br/>модель пишет код"]
    EXP["Код-кандидаты<br/>experiment_*.json"]
    SCORE["score<br/>запуск в песочнице"]
    AUTO["Оценка S·M·O·P + Q<br/>auto_l1.json"]
    LB["leaderboard / docs<br/>рейтинг — L1, машина"]
    SUB["submit<br/>пакет с compat_hash"]
    L2["Уровень 2 — эксперт<br/>(в планах)"]
    VER["Verified<br/>согласие L1 и L2"]

    IN --> GEN --> EXP --> SCORE --> AUTO
    AUTO --> LB --> SUB
    AUTO -.-> L2 -.-> VER

    classDef planned stroke-dasharray:5 5,fill:#f6f6f6,color:#777;
    class L2,VER planned;

Пунктиром — Уровень 2 (эксперт): он пока в планах. Категория B перед генерацией сама собирает метаданные базы; подробности по шагам — в разделах выше.

Где исполняется код: docker и local

Код кандидата нужно запустить, и есть два режима:

Важно: способ запуска на оценку не влияет — инструмент той же версии, балл тот же. Поэтому режим это инфраструктура, а не часть результата (не входит в «версия × издание × конфиг»). Выбор — через PRISM_RUNNER / PRISM_BSL (по умолчанию docker).

Что сохраняется в results/

Документация — производные данные

Таблицы лидерборда и счётные бейджи в README и на сайте — не пишутся руками. Их источник правды — results/auto/*_auto_l1.json; prism docs подменяет помеченные регионы между <!-- prism:KEY --> свежими данными. Так проза и числа не разъезжаются.

Операционная надёжность ⟂ метрика

Чекпойнт/--resume, ретраи при сбоях сети, учёт стоимости, параллельный запуск — всё это нужно для больших прогонов, но на баллы SMOP не влияет: балл считается из ответа модели, а не из того, как и почём он получен. Параллельный скоринг (PRISM_CONCURRENCY) проверен бит-в-бит против последовательного — баллы совпадают.

Дальше