Технологии

llama.cpp добавил decision-модели: сервер отвечает вероятностями через /v1/systemone

2 октября 2026 года сервер llama.cpp получил поддержку decision-моделей через эндпоинт /v1/systemone: вы отправляете состояние (текст, JSON или скриншот) и типизированные вопросы, а модель за один прямой проход возвращает вероятность каждого варианта. API следует формату System One, введённому с моделью Jev от TypeSafe, поэтому существующим клиентам достаточно нового базового URL. Изменение влито в основную ветку пул-реквестом #29818 авторства ngxson; в списке поддержки — Julia-1, Laya, Kev-4B, lev и OpenJev, который умеет читать изображения.

llama.cpp добавил decision-модели: сервер отвечает вероятностями через /v1/systemone

Что произошло

Сервер llama.cpp теперь поддерживает decision-модели через эндпоинт /v1/systemone: вы отправляете состояние (текст, JSON, скриншот) и типизированные вопросы, а модель возвращает вероятность по каждому варианту за один прямой проход.

Тот же материал указывает, что API следует формату System One, введённому с моделью Jev от TypeSafe, поэтому существующим клиентам достаточно нового базового URL.

Изменение пришло не отдельным релизом, а пул-реквестом в основную ветку: PR #29818 «llama, server: add /v1/systemone API (models: laya, julia-1, lev, openjev, kev)» авторства ngxson влит 2 октября 2026 года.

В документации сервера раздел называется «TypeSafe-compatible System One API», и там же оговорено, что стриминг не поддерживается.

Чем decision-модель отличается от чат-модели

Разница в экономике вычислений: чат-модель тратит один прямой проход на каждый выходной токен, и её вывод ещё нужно разбирать, а decision-модель читает вход один раз, и её ответ — всегда один из предложенных вами вариантов, с приложенной вероятностью.

Типичные применения, которые приводит проект: маршрутизация запроса, модерация контента, проверка того, что шаг агента сработал, и выбор его следующего действия.

Вопросов три типа: choice возвращает лучший вариант и вероятность по каждому из них, score работает с 2–10 уровнями и может дать ожидаемый уровень между двумя соседними, noul отвечает на вопрос да/нет вероятностью «да».

Вопросы одного запроса отвечают независимо друг от друга — ответ на один не зависит от остальных.

Число вариантов в choice ограничено моделью: в документации приведены 52 для openjev и 255 для laya.

Какие модели поддержаны

Публикация перечисляет пять моделей с размерами, базой, языками, лицензией и медианой времени ответа: Julia-1 (144M, mmBERT-small, 50+ языков, без изображений, Apache 2.0, 3 мс), Laya (421M, ModernBERT-large, английский, Apache 2.0, 5 мс), Kev-4B (4B, Qwen3.5-4B-Base, английский, Apache 2.0, 12 мс), lev (4B, Qwen3.5-4B, английский, Apache 2.0, 36 мс) и OpenJev (27B, Qwen3.8-27B, английский, немецкий, французский, хинди, китайский и японский, с поддержкой изображений, CC BY-NC 4.0, 43 мс).

Все цифры скорости — медиана ответа на один вопрос на одной NVIDIA RTX PRO 6000, то есть измерение на серверном ускорителе, а не на потребительской карте.

На Hugging Face у ggml-org есть отдельная коллекция «Decision models» — GGUF-модели для /v1/systemone в llama.cpp; в ней, среди прочего, лежит OpenJev-GGUF размером 27B с типом задачи Image-Text-to-Text.

Описание пул-реквеста объясняет устройство просто: «decision-модели» — это обёртки над обычными embedding-моделями (BERT, Qwen и подобными), поэтому изменения старались держать максимально компактными и самодостаточными.

Основная часть — server_decision_context, который переключает обработку входа и выхода на основе gguf-метаданных {arch}.decision.type.

Как это запустить

llama.cpp предлагается взять с llama.app или обновить командой llama update.

Дальше достаточно поднять модель, например llama serve -hf ggml-org/Kev-4B-GGUF, и отправить запрос на /v1/systemone со состоянием и вопросами.

В ответе для каждого вопроса приходят вероятности, а для choice и score ещё и confidence — значение от 0 до 1, где 0 означает, что все варианты равновероятны.

В блоке usage поле input_tokens считает токены промпта всех вопросов, а output_tokens всегда равно нулю.

Отдельная оговорка документации: вероятности масштабируются температурами, сохранёнными в файле модели, и не гарантированно откалиброваны под ваши данные.

Ошибки тоже формализованы: невалидный запрос возвращает 400, модель, не являющаяся decision-моделью, — 501.

Изображения и режим роутера

Читать изображения умеет не каждая модель — на момент публикации это OpenJev, и vision-проектор для него скачивается автоматически.

Все изображения помещаются перед состоянием в промпте, причём сначала идут те, что переданы отдельным полем.

В режиме роутера модели загружаются по требованию, а нужная выбирается в каждом запросе; список идентификаторов отдаёт /v1/models, и при единственной загруженной модели поле model игнорируется.

Советы авторов

Практический вывод, который стоит выделить: варианты лучше описывать, а не называть.

Julia-1 с голыми метками отправила обращение «I was charged twice» в раздел доставки, а получив описания каждого варианта, вернула billing с вероятностью 0.99.

Порог уверенности подбирается под конкретную модель: расплывчатый тикет вроде «Hi, quick question about my account» набрал 0.25 у Julia-1 и 0.80 у Kev-4B.

Вопросы выгодно отправлять пакетом — они всё равно отвечаются независимо, но Kev-4B, lev и OpenJev обрабатывают состояние только один раз.

Квантование тоже стоит перебирать: модели поставляются в нескольких точностях, вплоть до:Q8_0 в имени репозитория.

Что дальше и чего материал не утверждает

Проект обещает, что новые открытые decision-модели выходят каждую неделю и лучшие из них будут добавлять; следующей названа Clef от Cloudflare.

Отдельного обещания по срокам попадания в стабильный релиз llama.cpp в публикации и описании пул-реквеста нет — на момент материала речь идёт о коде в основной ветке, который доступен через llama.app и llama update.

Имена моделей, эндпоинтов, команд и метаданных (/v1/systemone, llama serve, server_decision_context, {arch}.decision.type) приведены так, как их пишут разработчики, и не переводятся.

Mantis не участвовал в разработке и не оценивает качество моделей: материал собран по первичным публикациям проекта llama.cpp.

Первоисточники

  1. Hugging Face blog, ggml-org — «New in llama.cpp: Decision Models» (2 октября 2026)
  2. GitHub — ggml-org/llama.cpp, PR #29818 «llama, server: add /v1/systemone API» (merged 2 октября 2026)
  3. llama.cpp server docs — раздел «POST /v1/systemone: TypeSafe-compatible System One API»
  4. Hugging Face — коллекция ggml-org «Decision models»