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
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 (значения иллюстративные):
{
"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
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
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.