Jev через OpenRouter — как подключить
OpenRouter добавил Jev через три дня после анонса, 18 сентября 2026 года. Если у вас уже есть аккаунт и баланс OpenRouter, регистрироваться в TypeSafe и ждать ранний доступ не нужно: хватит ключа OpenRouter.
Главное в одной таблице
| Параметр | Значение |
|---|---|
| Модель | typesafe/jev-1.13 |
| Алиас на последнюю версию | ~typesafe/jev-latest |
| Цена | $0,042 за 1 млн входных токенов, выходные — $0 |
| Контекст | 32 000 токенов |
| Провайдер | Один, TypeSafe: OpenRouter передаёт ему запросы напрямую |
| Адрес | https://openrouter.ai/api/v1/systemone |
| Ключ | Ключ OpenRouter в заголовке Authorization: Bearer |
Цена на OpenRouter совпадает с ценой TypeSafe. Контекст OpenRouter указывает как 32 000 токенов. В документации TypeSafe лимиты расписаны подробнее: 64 000 токенов на весь запрос и 32 000 на state вместе с самым длинным вопросом.
Jev работает не через привычный Chat Completions. На странице модели OpenRouter предупреждает, что она обслуживается отдельным API решений и SDK для чат-моделей с ней не заработают. Запрос и ответ повторяют формат TypeSafe, который подробно описан в справочнике по API.
Как начать
- Зарегистрируйтесь на OpenRouter и пополните баланс.
- Создайте ключ в настройках аккаунта, на странице Keys.
- Отправьте запрос на
https://openrouter.ai/api/v1/systemoneс этим ключом.
Запрос через curl
curl https://openrouter.ai/api/v1/systemone \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": "Купите дешёвые часы по ссылке!!!",
"questions": {
"spam": { "type": "noul", "instructions": "Это рекламный спам?" }
}
}'
Ответ выглядит так (числа условные):
{
"id": "gen-dec-...",
"model": "typesafe/jev-1.13-20260917",
"provider": "TypeSafe",
"answers": {
"spam": { "type": "noul", "noul": 0.96 }
},
"usage": { "input_tokens": 281, "output_tokens": 20, "cost": 0.0000118 }
}
По сравнению с ответом TypeSafe здесь три дополнительных поля. id — идентификатор запроса в OpenRouter, его стоит сохранять в логах. provider показывает, кто обслужил запрос. usage.cost — стоимость запроса по тарифу OpenRouter: в примере это 281 входной токен по $0,042 за миллион. Миллион таких коротких запросов обойдётся примерно в $11,8, и большая часть суммы придётся на служебные токены, а не на сам текст. Складывайте usage.cost в своей базе, чтобы видеть расходы по каждой функции продукта. В model приходит ID модели в формате OpenRouter. Официальные SDK TypeSafe лишние поля пропускают без ошибок.
Поле model в запросе OpenRouter понимает в трёх видах:
jev-1.13превращается вtypesafe/jev-1.13;jev-latestпревращается в~typesafe/jev-latest, алиас на новейший релиз Jev;- имена с префиксом автора, например
typesafe/jev-1.13, используются как есть.
Официальный SDK TypeSafe
SDK TypeSafe переключается на OpenRouter сменой двух параметров, остальной код остаётся прежним. SDK сам допишет /v1/systemone, поэтому базовый адрес — https://openrouter.ai/api.
import os
from typesafe_sdk import Noul, TypeSafeClient
with TypeSafeClient(
api_key=os.environ["OPENROUTER_API_KEY"],
base_url="https://openrouter.ai/api",
) as client:
r = client.system_one(
"Купите дешёвые часы по ссылке!!!",
{"spam": Noul(instructions="Это рекламный спам?")},
)
print(r.nouls["spam"].noul)
import { TypeSafeClient } from "@typesafe-ai/sdk";
const client = new TypeSafeClient({
apiKey: process.env.OPENROUTER_API_KEY,
baseURL: "https://openrouter.ai/api",
});
Можно не трогать код вовсе. Оба SDK читают адрес из переменной TYPESAFE_BASE_URL, а ключ из TYPESAFE_API_KEY: задайте TYPESAFE_BASE_URL=https://openrouter.ai/api и положите в TYPESAFE_API_KEY ключ OpenRouter.
Модель по умолчанию в SDK — jev-latest, и OpenRouter направит её на ~typesafe/jev-latest. Если вы подбирали пороги уверенности на конкретной версии, передайте model="typesafe/jev-1.13", чтобы обновление алиаса не сдвинуло ответы без вашего ведома.
Одна функция SDK с OpenRouter не работает. client.models.list() обращается к GET /api/v1/models, а там OpenRouter отдаёт свой каталог в своём формате, и SDK его отклоняет. Список System One-моделей смотрите в каталоге OpenRouter на странице автора TypeSafe. Остальные настройки клиентов описаны в статьях о Python SDK и о JavaScript SDK.
SDK OpenRouter
Если в проекте уже есть официальный SDK OpenRouter (@openrouter/sdk для TypeScript, пакет openrouter для Python или SDK для Go), Jev вызывается через его раздел SystemOne:
import os
from openrouter import OpenRouter
with OpenRouter(api_key=os.getenv("OPENROUTER_API_KEY", "")) as open_router:
res = open_router.system_one.create(
model="typesafe/jev-1.13",
state={"ticket": "После нажатия «Оплатить» страница остаётся белой."},
questions={
"is_bug": {"type": "noul", "instructions": "Клиент сообщает об ошибке в продукте?"},
},
)
print(res)
В TypeScript тот же вызов выглядит как openRouter.systemOne.create({ decisionsRequest: { model, state, questions } }). Помимо полей TypeSafe метод принимает служебные параметры OpenRouter. session_id (до 256 символов) группирует связанные запросы, например шаги одного агента, в логах OpenRouter и провайдеру не передаётся. trace добавляет метаданные для трассировки. В SDK TypeSafe отдельных параметров для них нет, но лишние поля тела запроса он тоже умеет отправить: в Python через extra_body, а JavaScript SDK пересылает дополнительные свойства запроса как есть.
Кроме SystemOne, в SDK есть раздел Alpha.Decisions с методом alpha.decisions.create. Он работает через ранний эндпоинт /api/alpha/decisions, о котором писали в первые дни после релиза. Раздел помечен как альфа-версия, и его интерфейс может меняться, поэтому для новых проектов берите SystemOne или SDK TypeSafe.
Ошибки на стороне OpenRouter
К кодам TypeSafe OpenRouter добавляет свои. Самые частые:
| Код | Что значит | Что делать |
|---|---|---|
| 401 | Неверный ключ OpenRouter | Проверьте ключ и адрес |
| 402 | Недостаточно кредитов | Пополните баланс |
| 413 | Слишком большой запрос | Сократите state |
| 429 | Превышен лимит | Повторите с паузой |
| 502, 503, 524 | Сбой или таймаут у провайдера | Повторите с паузой |
| 529 | Провайдер перегружен | Повторите с паузой |
SDK TypeSafe по умолчанию повторяют ответы 408, 429 и все 5xx, так что временные сбои они переживут сами. Ошибку 402 повторами не исправить, поэтому стоит следить за балансом заранее. Подробнее о кодах и схемах повторов — в статье об ошибках API Jev.
Частые ошибки подключения
- Запрос на
/chat/completions. Jev доступна только по пути/api/v1/systemone. Клиенты OpenAI и другие чат-SDK, направленные на OpenRouter, с ней не работают. /v1в базовом адресе SDK. SDK TypeSafe сам добавляет/v1/systemone, поэтомуbase_urlдолжен заканчиваться на/api.- Алиас без тильды. Алиас на последнюю версию пишется как
~typesafe/jev-latest. Если сомневаетесь, передайтеjev-latestбез префикса, и OpenRouter сопоставит его сам. - Ключ не той площадки. Ключ TypeSafe на OpenRouter не подойдёт, и наоборот. На ошибку 401 первым делом проверьте, куда уходит запрос.
OpenRouter или TypeSafe напрямую
| Что сравниваем | OpenRouter | TypeSafe напрямую |
|---|---|---|
| Доступ | Сразу после регистрации | Ранний доступ по листу ожидания |
| Оплата | Кредиты OpenRouter в долларах | Кредиты TypeSafe в долларах |
| Имя модели | typesafe/jev-1.13, ~typesafe/jev-latest |
jev-latest, jev-1.13.0 |
| Ответ | Плюс id, provider, usage.cost |
Только model, answers, usage |
models.list() в SDK |
Не работает | Работает |
Как устроены лист ожидания, консоль и кредиты TypeSafe, рассказано в статье о доступе к Jev. Модель в обоих случаях одна и та же: OpenRouter передаёт запросы в TypeSafe, других провайдеров у Jev там нет. TypeSafe заявляет, что не обучает Jev на запросах и ответах клиентов. Посредник добавляет сетевой переход, поэтому для задач, где важны миллисекунды, замерьте задержку по обоим маршрутам. Медианную задержку провайдера OpenRouter показывает на странице модели, 21 сентября 2026 года там было 0,22 секунды.
Когда выбирать OpenRouter
- у вас уже есть баланс и биллинг в OpenRouter;
- вы хотите держать LLM и Jev у одного провайдера и с одним ключом;
- вам нужна маршрутизация, в которой Jev решает, какую LLM вызвать (сценарий разобран в статье о маршрутизации моделей);
- вы не хотите ждать прямого доступа от TypeSafe.
Пополнять OpenRouter приходится в долларах, и из России это сложно. Российские способы подключения сравниваются в статье о Jev в России. Сколько стоят запросы при разных объёмах, посчитано в статье о ценах Jev.
Частые вопросы
Как называется Jev на OpenRouter?
typesafe/jev-1.13. Для последней версии есть алиас ~typesafe/jev-latest, а имена TypeSafe без префикса, например jev-latest, OpenRouter сопоставляет со своими автоматически.
Сколько стоит Jev на OpenRouter?
$0,042 за миллион входных токенов, выходные бесплатны. Это столько же, сколько у TypeSafe напрямую. Стоимость каждого запроса приходит в поле usage.cost.
Работает ли Jev через Chat Completions API OpenRouter?
Нет. Jev вызывается через отдельный API по пути /api/v1/systemone, потому что модель возвращает решения, а не текст. SDK для чат-моделей с ней не работают.
Можно ли использовать официальный SDK TypeSafe с OpenRouter?
Да. Укажите базовый адрес https://openrouter.ai/api и ключ OpenRouter, остальной код не меняется. Не заработает только список моделей через models.list().
Какой контекст у Jev на OpenRouter?
OpenRouter указывает 32 000 токенов. В документации TypeSafe лимиты такие — 64 000 токенов на весь запрос и 32 000 на state вместе с самым длинным вопросом.