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.

Как начать

  1. Зарегистрируйтесь на OpenRouter и пополните баланс.
  2. Создайте ключ в настройках аккаунта, на странице Keys.
  3. Отправьте запрос на 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 вместе с самым длинным вопросом.

Источники