На GitHub появился проект decision-cascade — локальный движок принятия решений, который возвращает типизированные, калиброванные ответы вместо генерации текста. Автор позиционирует его как открытую альтернативу проприетарным System One-моделям вроде Jev от TypeSafe AI, но с полным контролем над данными и инфраструктурой.
Идея decision-cascade строится вокруг отказа от авторегрессионной генерации. Вместо того чтобы заставлять языковую модель «думать» свободным текстом, движок превращает состояние (строку-описание ситуации) в признаки через энкодер, а затем головы решений возвращают строго типизированные вероятностные ответы. Поддерживаются три типа вопросов: Noul (да/нет с вероятностью), Choice (выбор из опций) и Score (оценка на шкале уровней).
Каждый ответ — это датакласс с полем confidence, валидируемым распределением (сумма строго равна 1.0 ± 1e-6) и версией схемы. Клиент проверяет ответ по контракту, а не парсит хрупкий текст.
Ключевая особенность — режим cascade: сначала отвечают локальные головы, а во внешнюю модель эскалируются только вопросы с уверенностью ниже заданного порога (по умолчанию 0.6). Так внешний вызов оплачивается лишь за действительно неясные случаи.
Индивидуальность и отличие от аналогов
Рынок System One-моделей за последний год заметно оживился. Cloudflare выпустила открытые Clef и Clef-flash, Perplexity — pplx-decider-v1-27b, ConvAI — Laya. Все они решают похожую задачу: возвращают типизированные вероятностные ответы за один forward pass, без генерации токенов.
decision-cascade отличается тремя вещами.
Во-первых, это не просто модель, а полный цикл в одном репозитории: обучение голов через SFT, RLCD-калибровка с гейтом «не навреди», метрики ECE/Brier, latency-профилирование и деплой через простые shell/systemd-скрипты. У конкурентов обычно есть либо хостед-API, либо отдельные веса — но не сквозной пайплайн.
Во-вторых, совместимость с протоколом SystemOne (POST /v1/systemone) без облачной зависимости. Проект говорит на том же протоколе, что Jev/Clef/Laya, и умеет проксировать к ним через DECISION_BACKEND=http. Это значит, что его можно использовать как локальный шлюз: свои чувствительные данные обрабатывать на месте, а сложные случаи эскалировать во внешнюю модель.
В-третьих, честная мультимодальность: сервис объявляет поддерживаемые модальности и отклоняет остальные типизированной ошибкой MODALITY_NOT_SUPPORTED, а не тихо деградирует.
Плюсы
Приватность. Данные не покидают машину после загрузки весов. Для regulated-отраслей (финтех, медицина, госсектор) это часто критично.
Калибруемость. Вероятности можно измерять на ECE и Brier, а не гадать, насколько модель «уверена». На публичном датасете AG News заявлен рост overall accuracy с 0.425 до 0.884 и снижение ECE с 0.725 до 0.151 после обучения голов.
Детерминированная задержка. Отсутствие токен-генерации делает путь предсказуемым. На 8 vCPU без GPU с gpt2 и обрезкой входа до 256 токенов первый запрос по новому состоянию занимает около 9 секунд, а повторные — единицы-десятки миллисекунд за счёт кэша признаков. На GPU значения в разы ниже.
Гибкость выбора модели. Энкодер задаётся переменной окружения: от hash-энкодера (работает офлайн, ничего не скачивает) до gpt2 на CPU или gemma-4-12B на GPU.
Экономия на внешних вызовах. В бенчмарке против конкурентов каскад «local-first» сохранил качество локальной модели, обратившись к внешнему сервису лишь за 1.25% решений (0.913 против 0.915 у local).
Минусы
Требуется своя разметка. Головы «из коробки» случайны. Значимое качество достигается только после SFT/RLCD на ваших данных или после скачивания готовых паков весов из релиза.
Нет готового SaaS с UI. Это открытая beta для контроля и прозрачности, а не «кнопка под ключ». Если нужен managed-сервис без возни с инфраструктурой — Jev или Clef на Workers AI удобнее.
Порог входа. Нужно понимать, как обучать головы, читать метрики калибровки и интерпретировать reliability-диаграммы. Проект дружелюбен к инженерам, но не к «нажми и работает».
Ограниченная мультимодальность. Локальный vision включается через CLIP/SigLIP, но видео требует отдельного декодирования кадров, а поддержка изображений в локальном бэкенде по умолчанию выключена.
Где и как использовать
Триаж обращений в поддержку. Шесть вопросов всех трёх типов одним запросом: насколько срочно, кто должен взять, уровень недовольства. Готовый русскоязычный пример лежит в examples/quickstart/http_client.py.
Маршрутизация в агентных системах. api/sdk/agent.py превращает типизированные решения в действие агента — команду, приоритет, эскалацию, тон ответа — чистой функцией route_ticket без сети, что упрощает тестирование.
Модерация контента. Noul-головы для бинарных проверок «нарушает / не нарушает», Choice — для категоризации, Score — для оценки серьёзности.
Guardrails в LLM-пайплайнах. Каскад можно поставить перед дорогой генеративной моделью: 99% запросов закрываются локальными головами, а сложные уходят дальше с уже готовым типизированным контекстом.
Оценка рисков в реальном времени. Score-головы дают взвешенную оценку по шкале уровней с распределением вероятностей — удобно для скоринга заявок, оценки тональности или уровня риска.
Проект распространяется под лицензией Apache-2.0. Готовые паки весов доступны в релизе v0.2.0: шесть обученных наборов (support/public × gpt2/distilgpt2/gpt2-medium) с честными метриками на train/val/test. Для запуска достаточно клонировать репозиторий, выполнить scripts/bootstrap-user.sh и поднять uvicorn — hash-энкодер заработает офлайн без скачивания моделей.