Nika Gateway

Jev (TypeSafe AI)

Модель типизированных решений — официальный SDK TypeSafe через Nika Gateway, POST /v1/systemone

Jev (TypeSafe AI)

Jev — модель класса System One от TypeSafe AI. Она не пишет текст: на вход получает состояние (строку, JSON-объект или массив строк) и именованные вопросы, а возвращает типизированные ответы с вероятностями:

  • noul — да/нет, с вероятностью «да»;
  • choice — один вариант из заданных, с вероятностью каждого;
  • score — оценка по упорядоченной шкале.

Подходит там, где коду нужно решение, а не абзац текста: классификация обращений, маршрутизация, модерация, проверка утверждений по источнику.

Подключение официального SDK

Шлюз отвечает на тот же эндпоинт, что и TypeSafe, — POST /v1/systemone. Официальные SDK собирают адрес из базового URL, поэтому хватает двух переменных окружения, код менять не нужно:

export TYPESAFE_BASE_URL="https://nikagateway.ru"
export TYPESAFE_API_KEY="sk-tunnel-..."

Python

pip install typesafe-sdk
from typesafe_sdk import TypeSafeClient, Noul

client = TypeSafeClient(api_key="sk-tunnel-...", base_url="https://nikagateway.ru")
result = client.system_one(
    "Мне дважды списали оплату.",
    {"billing": Noul(instructions="Это вопрос об оплате?")},
)
print(result.nouls["billing"].noul)

JavaScript и TypeScript

npm install @typesafe-ai/sdk
import { choice, TypeSafeClient } from "@typesafe-ai/sdk";

// Ключ и адрес берутся из TYPESAFE_API_KEY и TYPESAFE_BASE_URL
const client = new TypeSafeClient();
const response = await client.systemOne({
  state: { document: "Мне дважды списали оплату, исправьте срочно." },
  questions: {
    category: choice("О чём это обращение?", {
      billing: null,
      technical: null,
      other: null,
    }),
  },
});
console.log(response.answers.category.choice);

Запрос без SDK

curl https://nikagateway.ru/v1/systemone \
  -H "Authorization: Bearer sk-tunnel-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "Помогите! Выплаты не проходят третий день.",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Звучит ли это срочно?",
        "criteria": { "true": "Явно срочно", "false": "Срочности нет" }
      }
    }
  }'

Формат запроса и ответа — как у самого TypeSafe, см. их справочник API.

Модели

МодельЧто это
jev-latestАктуальная версия: провайдер сам переводит алиас на новые версии Jev
jev-1.13.0Закреплённая версия: ответы не меняются от обновлений модели

Модель можно указать и в общем для шлюза виде — typesafe/jev-latest. Голый jev-latest принимается ради совместимости с SDK: по умолчанию он шлёт именно его. Поле model в ответе называет точную версию, которая ответила, например jev-1.13.0.

Стоимость

Оплачиваются только входные токены — выход у Jev бесплатный. Цены — в каталоге моделей.

Как и на остальных эндпоинтах, в usage ответа шлюз добавляет стоимость запроса и остаток баланса — строками, чтобы значение не теряло точность:

"usage": {
  "input_tokens": 307,
  "output_tokens": 20,
  "cost_rub": "0.0126",
  "balance": "1234.56"
}

В объекте ответа SDK этих полей нет — модели ответа пропускают незнакомые поля, — но они есть в исходном ответе. В Python: result.raw_http_response.json()["usage"]["cost_rub"].

Ограничения

  • До 64 тысяч токенов на запрос, из них до 32 тысяч — на state и самый длинный вопрос. Больший запрос отклонит сам провайдер, списания не будет.
  • Только текст: строка, JSON-объект или массив строк. Изображения, аудио и видео не поддерживаются.
  • Потоковой отдачи нет: ответ приходит одним JSON.
  • Ошибки провайдера (401, 422, 429, 529) доходят как есть, резерв при этом возвращается полностью.

Идентификатор запроса

В ответе два идентификатора: x-request-id — наш, по нему поддержка Nika Gateway найдёт вызов в журнале, и x-typesafe-request-id — провайдера; из него SDK заполняет result.request_id.

Jev (TypeSafe AI) — Nika Gateway