Skip to content

TypeSafe System One ​

Прямой API TypeSafe для оценки JSON-состояния моделью Jev. Используйте inference- или reseller-ключ rout.my. Доступность определяется каталогом и политикой доступа к моделям.

МаршрутНазначение
POST /v1/systemoneОценка состояния и типизированных вопросов.
POST /typesafe/v1/systemoneТот же запрос под префиксом нативного SDK.
GET /typesafe/v1/modelsДоступные ключу модели: { "models": [{ "name", "description", "release_date" }] }.

Для SDK задайте baseURL / base_url: https://api.rout.my/typesafe — SDK сам добавляет /v1. Обычный /v1/models сохраняет формат OpenAI и помечает эти модели endpoints: ["v1/systemone"]. Прежний /v1/evaluate удалён.

REST ​

bash
curl https://api.rout.my/v1/systemone \
  -H "Authorization: Bearer $ROUTMY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": {"action": "refund", "completed": true},
    "questions": {
      "refunded": {"type": "noul", "instructions": "Was a refund completed?"},
      "outcome": {
        "type": "choice", "instructions": {"task": "Classify the action"},
        "criteria": {"refund": {"meaning": "money returned"}, "other": null}
      },
      "quality": {
        "type": "score", "instructions": "How completely was the action performed?",
        "criteria": [{"meaning": "not done"}, {"meaning": "done"}]
      }
    }
  }'

Обязательны model, state и непустая карта questions. Состояние, необязательные инструкции и описания критериев принимают строки, объекты, массивы и null. Вложенный JSON сохраняет типы. Идентификаторы вопросов возвращаются без изменений. Все вопросы используют общее состояние и отправляются одним запросом. Дополнительные поля тела SDK передаются upstream; stream: true не поддерживается.

ТипКритерииОтвет
noulНеобязательные описания true / false либо null.noul: вероятность «да» от 0 до 1.
choiceНепустая карта вариантов и их описаний.choice, confidence, полное распределение probabilities.
scoreМинимум два упорядоченных описания уровня.Дробный score от 0 до последнего индекса, confidence, probabilities, legend с исходным JSON каждого уровня.

Confidence поступает от TypeSafe и не гарантирует правильность. Пороги решения подбираются на реальных примерах приложения. Округлённые значения сохраняются без пересчёта распределений.

Пример ответа Noul (значения иллюстративные):

json
{
  "model": "jev-latest",
  "answers": {"refunded": {"type": "noul", "noul": 0.98}},
  "usage": {"input_tokens": 100, "output_tokens": 16}
}

Ответ сохраняет публичный alias модели, включая reseller alias. Реальная версия TypeSafe используется внутри для стоимости. Оба счётчика usage обязательны; явный ноль сохраняется. В reseller-ответе usage.cost может содержать клиентскую цену в USD. Неизвестные метаданные модели представлены пустой строкой.

JavaScript SDK ​

js
import { TypeSafeClient } from '@typesafe-ai/sdk';

const client = new TypeSafeClient({
  apiKey: process.env.ROUTMY_API_KEY,
  baseURL: 'https://api.rout.my/typesafe',
  defaultModel: 'jev-latest',
});
const models = await client.models.list();
const result = await client.systemOne({
  state: 'The support agent issued a full refund to the customer.',
  questions: { refunded: { type: 'noul', instructions: 'Was a refund issued?' } },
});
console.log(models, result.answers.refunded.noul);

Python SDK ​

python
import os
from typesafe_sdk import TypeSafeClient, Noul

with TypeSafeClient(
    api_key=os.environ['ROUTMY_API_KEY'],
    base_url='https://api.rout.my/typesafe',
    model='jev-latest',
) as client:
    models = client.models.list().models
    result = client.system_one(
        state='The support agent issued a full refund to the customer.',
        questions={'refunded': Noul(instructions='Was a refund issued?')},
    )
    print(models, result.answers['refunded'].noul)

AsyncTypeSafeClient использует тот же URL и payload. Конструкторы Choice/Score, структурированные критерии, confidence routing, fan-out и composite scoring используют эти же маршруты и реализуют решения в клиентском приложении.

Python SDK 0.7.0 требует ненулевые описания уровней Score и преобразует ключи legend в числа. Для Score в Python используйте строки или объекты; REST и JavaScript SDK поддерживают также null-уровни.

Лимиты, ошибки и учёт ​

  • Только текст/JSON, без streaming. Лимит тела gateway — 64 MiB; общий admission budget с языковыми запросами.
  • Jev 1.13: 64k токенов для состояния и всех вопросов, 32k для состояния и самого длинного вопроса. Собственный tokenizer проверяет TypeSafe; дополнительно действует context limit тарифа.
  • Подписочная квота: ceil(input_tokens × input long-context multiplier × effective model multiplier). Output сохраняется в usage, но бесплатен. Учитывается global multiplier ключа.
  • Резерв перед inference, одно списание после доставки JSON. Невалидный ответ, ошибка upstream или отмена до доставки освобождают резерв. Reseller PAYG использует свой price profile и ledger; Kimi request packs не применяются.
  • Для реальной версии Jev 1.13.0 оценка upstream cost — $0.042 за миллион input-токенов, output бесплатен. Настроенные rate cards приоритетнее. Новым версиям нужна rate card; alias не фиксирует цену.
  • 422 — невалидный запрос; 401 — неверный ключ gateway; 403 — нет доступа; 400 — context limit тарифа; 413 — размер тела; 429 — квота/rate limit; 529 — перегрузка TypeSafe; остальные 5xx — ошибка upstream/сервиса. Используется JSON error envelope gateway. Upstream credentials и сырой текст его ошибок не публикуются.
  • При upstream 429/529 сохраняются Retry-After и retry-after-ms. SDK поддерживают повторные попытки; избегайте немедленных циклов повторов. Ошибка валидации 422 не запускает provider fallback.

Настройка провайдера ​

В Admin → Providers выберите TypeSafe (System One), URL https://api.typesafe.ai и сохраните ключ TypeSafe в зашифрованном поле ключей. Добавьте активные маппинги jev-latest → jev-latest, jev-preview → jev-preview либо собственные публичные aliases; настройте model access и множители. Версионные Jev ID поддерживаются, если доступны upstream. Retry-After включает cooldown общих ключей на 429/529; BYOK остаётся в контексте одного запроса. Пустая БД автоматически не заполняется. Транспорт работает напрямую в Go.

Источники: документация TypeSafe, HTTP API, модели, JavaScript SDK, Python SDK.

API documentation for rout.my.