POST /v1/decisions
Модели решений (Jev и другие) — ответы «да/нет», выбор из списка и оценка по шкале с вероятностями вместо текста.
Модели решений не пишут текст. Вы передаёте данные и вопросы, модель возвращает по каждому вопросу ответ с вероятностями: «да» или «нет», вариант из списка, уровень на шкале. Подходит для разбора обращений, маршрутизации запросов, модерации и оценки лидов.
Например, Jev от TypeSafe (typesafe/jev-1.13, всегда последняя версия — ~typesafe/jev-latest), о ней подробно — на отдельной странице. Отвечает за 0,3–0,5 секунды (наш замер 07.10.2026), платится только вход. Все модели решений — в каталоге с фильтром «Решения».
Стрима нет: один запрос, один JSON-ответ. В OpenAI SDK такого метода нет, вызывайте обычным HTTP-запросом.
Эндпоинт
https://api.hubris.pw/v1/decisionsЗаголовки:
| Заголовок | Значение |
|---|---|
Authorization | Bearer sk-gw-... (обязательно) |
Content-Type | application/json (обязательно) |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
model | string | ID модели решений, например typesafe/jev-1.13. |
state | string | object | array | Данные, о которых задаются вопросы: письмо клиента, карточка лида, ответ другой модели. Какие модели принимают ещё и картинки — видно по входу на странице модели в каталоге. |
questions | object | Вопросы по ключам. Ключ вернётся в answers. Все вопросы решаются за один запрос. |
user | string | Идентификатор конечного пользователя, до 256 знаков. |
Типы вопросов
type | Что спрашивает | criteria | Ответ |
|---|---|---|---|
noul | Да или нет? | Необязательно: {"true": "…", "false": "…"} — что считать «да» и «нет». | noul — вероятность «да» от 0 до 1. |
choice | Какой вариант? | Обязательно: объект «ключ → описание», хотя бы один вариант. | choice — ключ варианта, probabilities по всем вариантам. |
score | Где на шкале? | Обязательно: массив описаний уровней по порядку, от низшего к высшему. | score — дробный уровень от 0, probabilities и legend по уровням. |
Поле instructions у каждого вопроса — сам вопрос простыми словами. Описания в instructions и criteria можно писать по-русски.
Пример
curl -s https://api.hubris.pw/v1/decisions \-H "Authorization: Bearer sk-gw-..." \-H "Content-Type: application/json" \-d '{ "model": "typesafe/jev-1.13", "state": "Третий день не проходит оплата на сайте, клиенты уходят. Помогите срочно.", "questions": { "is_urgent": {"type": "noul", "instructions": "Клиент сообщает о срочной проблеме?"}, "department": { "type": "choice", "instructions": "Какой отдел должен ответить?", "criteria": {"billing": "Оплата и счета", "tech": "Сбои и ошибки", "sales": "Тарифы"} }, "frustration": { "type": "score", "instructions": "Насколько раздражён клиент?", "criteria": ["Спокоен", "Раздражён, но вежлив", "Очень зол"] } }}'import requestsres = requests.post( "https://api.hubris.pw/v1/decisions", headers={"Authorization": "Bearer sk-gw-..."}, json={ "model": "typesafe/jev-1.13", "state": "Третий день не проходит оплата на сайте, клиенты уходят.", "questions": { "is_urgent": {"type": "noul", "instructions": "Клиент сообщает о срочной проблеме?"}, "department": { "type": "choice", "instructions": "Какой отдел должен ответить?", "criteria": {"billing": "Оплата и счета", "tech": "Сбои и ошибки", "sales": "Тарифы"}, }, }, },)answers = res.json()["answers"]if answers["is_urgent"]["noul"] > 0.8: print("Срочно в", answers["department"]["choice"])const res = await fetch("https://api.hubris.pw/v1/decisions", {method: "POST",headers: { Authorization: `Bearer ${process.env.HUBRIS_API_KEY}`, "Content-Type": "application/json",},body: JSON.stringify({ "model": "typesafe/jev-1.13", "state": "Третий день не проходит оплата на сайте, клиенты уходят.", "questions": { "is_urgent": { "type": "noul", "instructions": "Клиент сообщает о срочной проблеме?" }, "department": { "type": "choice", "instructions": "Какой отдел должен ответить?", "criteria": { "billing": "Оплата и счета", "tech": "Сбои и ошибки", "sales": "Тарифы" }, }, },}),});const { answers } = await res.json();console.log(answers.department.choice); // "billing"Ответ
{
"id": "gen-dec-1791382115-AhWoFZPJy4wb51Vy5yPM",
"model": "typesafe/jev-1.13-20260917",
"answers": {
"is_urgent": { "type": "noul", "noul": 0.99 },
"department": {
"type": "choice",
"choice": "billing",
"confidence": 0.62,
"probabilities": { "billing": 0.75, "tech": 0.25, "sales": 0 }
},
"frustration": {
"type": "score",
"score": 0.89,
"confidence": 0.83,
"probabilities": { "0": 0.11, "1": 0.89, "2": 0 },
"legend": { "0": "Спокоен", "1": "Раздражён, но вежлив", "2": "Очень зол" }
}
},
"usage": {
"input_tokens": 633,
"output_tokens": 73,
"cost": 1
}
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
model | string | Фактическая версия модели. |
answers.<ключ>.type | "noul" | "choice" | "score" | Тип вопроса. |
answers.<ключ>.noul | number | Для noul: вероятность «да». |
answers.<ключ>.choice | string | Для choice: ключ выбранного варианта. |
answers.<ключ>.score | number | Для score: ожидаемый уровень, от 0 до числа уровней минус один. |
answers.<ключ>.confidence | number | Уверенность модели, от 0 до 1. Низкая — повод передать решение человеку или большой модели. |
answers.<ключ>.probabilities | object | Вероятность каждого варианта или уровня. |
answers.<ключ>.legend | object | Для score: номер уровня и его описание из запроса. |
usage.input_tokens | integer | Входные токены, вместе с текстом вопросов. Только они оплачиваются. |
usage.output_tokens | integer | Выходные токены, бесплатно. |
usage.cost | integer | Списано в копейках. |
HTTP-коды
| Код | Когда |
|---|---|
200 | Успешный ответ. |
400 | Тело не соответствует схеме: нет questions, неизвестный type, у choice пустые criteria. Текст причины — в error.message. |
401 | Ключ отсутствует, отозван или невалиден. |
402 | Недостаточно средств на балансе. |
404 | Модели нет или это не модель решений (чат-модели здесь не работают). |
413 | Тело запроса больше 4 МБ. |
429 | Превышен лимит запросов. |
502 / 503 / 504 | Временный сбой у провайдера или курса валют. |
Формат тела ошибки и повторы — Ошибки.
Биллинг
Платятся только входные токены, в том числе текст вопросов и вариантов: три вопроса дороже одного. Ответ бесплатный. С каждого запроса к платной модели списывается не меньше 1 копейки. Цены в ₽ за 1 млн токенов — на странице модели в каталоге, формула — Цены.
Что дальше
Обновлено: