# Jev от TypeSafe: что это, чем отличается от LLM и как подключить

> Jev от TypeSafe не пишет текст, а отвечает выбором, оценкой или вероятностью «да» с уровнем уверенности. Где он заменяет LLM, сколько стоит и как подключить.

- URL: https://blog.laozhang.ai/ru/posts/jev-ai-model-guide
- Published: 2026-09-24
- Updated: 2026-09-24
- Author: LaoZhang AI Team (https://blog.laozhang.ai/ru/about)
- Category: AI API
- Tags: Jev, TypeSafe, AI Agents, Classification, API

---
Jev — первая публичная модель компании TypeSafe AI, выпущенная 15 сентября 2026 года. Это не чат-модель: на вход она получает данные (state) и заранее описанные вопросы, а возвращает не текст, а выбранный вариант из вашего списка, оценку по вашей шкале или вероятность того, что утверждение верно, — вместе с показателем уверенности. Поэтому Jev заменяет LLM только в одном месте: там, где вы просили модель выбрать метку и потом разбирали её ответ. Написать письмо, объяснить решение, посчитать сумму или сравнить даты он не поможет.

По состоянию на 24 сентября 2026 года лист ожидания отменён (с 20 сентября), ключ выдаётся в консоли TypeSafe, модель также доступна через OpenRouter. Цена у TypeSafe — $0,042 за миллион входных токенов, выходные не тарифицируются.

## Что такое Jev и как он отвечает

TypeSafe называет Jev моделью класса System One — по аналогии с «быстрым мышлением» из книги Канемана «Думай медленно… решай быстро». Имя модели отсылает к экономисту Уильяму Стэнли Джевонсу и его парадоксу: чем дешевле ресурс, тем больше его потребляют. Основатель компании Диогу Алмейда (Diogo Almeida) раньше работал в OpenAI над обучением моделей следованию инструкциям. Для Jev в TypeSafe сделали новую архитектуру, параллельный сэмплер и собственный метод обучения RLCD (Reinforcement Learning for Calibrated Decisions) — обучение с подкреплением на откалиброванных решениях ([анонс TypeSafe](https://typesafe.ai/blog/introducing-system-one-models-and-jev)).

Запрос устроен так: одно поле `state` (строка, JSON-объект или массив) и словарь вопросов `questions`. Каждый вопрос модель оценивает параллельно и независимо от остальных, а ответы приходят под теми же ключами. Сами ключи модель не видит — весь смысл вопроса должен быть в полях `instructions` и `criteria`. Вопросы бывают трёх типов:

| Тип | Что спрашивает | Что возвращает | Ограничения |
| --- | --- | --- | --- |
| Choice | Какой из вариантов подходит | `choice`, `probabilities` по всем вариантам, `confidence` | до 255 вариантов в одном вопросе |
| Score | Где на упорядоченной шкале находится случай | `score` (может оказаться между уровнями), `legend`, `probabilities`, `confidence` | от 2 до 10 уровней |
| Noul | Верно ли утверждение | `noul` — число от 0 (нет) до 1 (да) | без `confidence` |

Noul — собственный термин TypeSafe, а не опечатка «null». Это вопрос «да/нет», ответ на который приходит вероятностью. В Vercel AI SDK тот же тип называется `boolean`, но возвращается всё равно число, а не `true`/`false`.

Два обещания из анонса нужно читать точно. Первое — «не галлюцинирует» и «0 % ошибок типов». TypeSafe прямо пишет, что эта цифра не эмпирическая: ответ физически не может выйти за пределы вашей схемы. Это гарантия формата, а не правильности: `choice` всегда будет одним из ваших вариантов, но не обязательно верным.

Второе — «откалиброванные вероятности». Смысл такой: если модель много раз ставит вероятность 0,8, то примерно в 80 % таких случаев ответ совпадает с правильным. `confidence` для Choice и Score вычисляется из распределения: чем оно ровнее, тем ниже уверенность. Для Choice в документации приведена формула confidence = (n × p_max − 1) / (n − 1), где n — число вариантов, p_max — вероятность лидера; при равномерном распределении уверенность равна нулю ([документация по confidence](https://docs.typesafe.ai/confidence)). На практике это значит, что ответ говорит, *что* выбрано, а уверенность — *можно ли действовать без проверки*.

Официальный совет по формулировкам: один вопрос — одно суждение, которое человек вынес бы интуитивно за несколько секунд. Сложное решение раскладывают на несколько атомарных вопросов в одном запросе и собирают результат в коде.

## Кому отдать решение: коду, Jev, LLM или человеку

Главный практический вопрос не «лучше ли Jev, чем GPT», а какую конкретную развилку в вашем приложении можно ему доверить. Удобно пройти по точкам решения и для каждой задать три вопроса по порядку.

1. **Можно ли это вычислить точно?** Подсчёт, арифметика, сравнение дат, поиск по регулярному выражению, проверка инвариантов — это код. TypeSafe сама пишет, что jev-1.13 ненадёжно считает и читает даты как текст, а не как упорядоченные величины.
2. **Ответ — один из заранее известных вариантов, точка на шкале или «да/нет», и человек решил бы это за секунды?** Тогда это задача для Jev.
3. **Нужен текст, объяснение, открытый набор ответов или цепочка рассуждений?** Это LLM.

Отдельно от этого цена ошибки определяет, при какой уверенности действие выполняется автоматически, а когда нужен человек или подтверждение.

![Схема из трёх вопросов по порядку: можно вычислить точно — код; выбор из списка, шкала или «да/нет» — Jev; нужен текст — LLM; необратимое действие при низкой уверенности — человек](https://blog.laozhang.ai/posts/ru/jev-ai-model-guide/img/decision-owner.webp)

| Точка решения | Кому отдать | Почему |
| --- | --- | --- |
| Сколько позиций в заказе, прошло ли 14 дней с оплаты, совпадает ли сумма | Код | Jev 1.13 ненадёжен в счёте, числах и датах |
| Какой отдел берёт обращение, какой интент у пользователя, какой инструмент или субагент вызвать дальше | Jev, Choice | закрытый список вариантов плюс уверенность для порога |
| Продолжить, повторить, спросить пользователя или остановить агента | Jev, Choice | та же развилка, только варианты — действия цикла |
| Насколько срочно, рискованно, токсично, качественно | Jev, Score | упорядоченная шкала до 10 уровней |
| Про возврат ли денег это письмо, опирается ли ответ на найденные документы | Jev, Noul | вероятность «да» по одному утверждению |
| Ответить клиенту, объяснить отказ, пересказать документ, написать код | LLM | Jev не генерирует текст и не объясняет решения |
| Извлечь значение, которое заранее не перечислить | LLM или regex находит кандидатов, Jev выбирает из них | так советует документация TypeSafe |
| Необратимое действие при уверенности ниже порога | Человек или подтверждение пользователя | модель сама сигнализирует, что не уверена |

Хорошее место для Jev — развилки внутри агента. Если агент крутится в цикле вызовов инструментов, решение «продолжать или остановиться» можно задавать Jev как Choice с вариантами действий, а жёсткие лимиты шагов оставить коду — подробнее о таких ограничителях в разборе [как остановить цикл вызовов инструментов у ИИ‑агента](https://blog.laozhang.ai/ru/posts/ai-agent-tool-loop).

Jev не подходит как «мотор» для Claude Code, Cursor или Copilot: документация TypeSafe отдельно предупреждает, что это не чат-модель и не модель для автодополнения кода. Кодовый агент может *написать* интеграцию с Jev — для этого у TypeSafe есть официальный навык (skill), о нём ниже.

## Сравнение: Jev и JSON-ответы обычных LLM

Структурированный вывод есть и у GPT, Claude, DeepSeek: модель генерирует JSON, а код его разбирает и проверяет. Jev отличается тем, что генерации нет вовсе — все ответы появляются параллельно и сразу в виде типов.

| Критерий | Jev (jev-1.13.0) | LLM с JSON-ответом |
| --- | --- | --- |
| Что возвращает | выбор, оценку или вероятность из заданной схемы | текст, который должен оказаться валидным JSON |
| Выход за схему | исключён конструктивно | зависит от режима провайдера; ответ приходится валидировать |
| Вероятности и уверенность | в каждом ответе | обычно нет; по наблюдению TypeSafe, самооценка LLM склонна к завышению |
| Объяснение решения | нет | можно попросить |
| Оплата | только входные токены, $0,042 за 1 млн | вход и выход; по данным TypeSafe, вход от $0,20 до $10 за 1 млн, выход примерно в 5 раз дороже |
| Задержка | 70–500 мс по данным TypeSafe | от 3 до 329 с для фронтирных моделей по данным TypeSafe |
| Языки | лучше всего английский, остальные хуже | зависит от модели |
| Вход | только текст и JSON, до 64k токенов на запрос | зависит от модели, часто мультимодальный |
| Дообучение | нет, у всех клиентов одни веса | у части провайдеров есть |

Цифры скорости и стоимости в правой колонке и заявления «в 193,6 раза быстрее и в 444,6 раза дешевле» с сайта TypeSafe — данные самой компании. Они получены на собственных тестах рабочих сценариев (workflow evals): эталоном служило среднее ответов GPT-6 Astra и Fable 5.1, сценарии писала команда TypeSafe, а задержку мерили с ноутбуков на западном побережье США, где сейчас и работает сервис. Сама компания называет эти множители верхней границей реального выигрыша. Если ваши серверы далеко от США, сетевая задержка добавится к этим цифрам — её стоит измерить из своей инфраструктуры.

### Независимый тест: Jev против DeepSeek V4.1 Flash

Эмиль Линдфорс (Emil Lindfors) на раннем доступе прогнал Jev на 24 норвежских отзывах к законопроекту 2022 года о налоге на ресурсную ренту в лососеводстве. Эталонные метки дважды независимо проставила Claude Fable 5.1, а для сравнения он взял DeepSeek V4.1 Flash через OpenRouter с теми же вопросами в одном промпте и JSON-выводом — с выключенным и включённым рассуждением ([lindfors.no](https://lindfors.no/blog/a-first-look-at-typesafes-jev/)).

| Показатель | Jev | DeepSeek, без рассуждения | DeepSeek, с рассуждением |
| --- | --- | --- | --- |
| Позиция автора, 4 варианта | 20/24 | 20/24 | 22/24 |
| Тип автора, 6 вариантов | 21/23 | 22/23 | 23/23 |
| 192 вопроса «да/нет» по аргументам | 0,86 | 0,89 | 0,88 |
| Точный уровень содержательности | 19/24 | 14/24 | 14/24 |
| Стоимость на 1000 документов | $0,22 | $1,31 | $3,08 |
| Медианная задержка | 0,32 с | 2,7 с | 26 с |
| Самый медленный запрос | 1,3 с | 17,9 с | 250 с |

Сам автор оговаривает: это совпадение с метками фронтирной модели, а не доказанная точность; на выборке из 24 документов доверительный интервал для позиции — около ±15 процентных пунктов, так что по позиции и аргументам три варианта не различаются. DeepSeek на OpenRouter обслуживали 13 разных провайдеров, поэтому его задержки — смешанные. Устойчивая разница — в цене, скорости и в том, что вероятности Jev можно сразу использовать как порог для автоматизации.

Саймон Уиллисон (Simon Willison), написавший для Jev плагин `llm-typesafe` к своей утилите `llm`, указывает на обратную сторону: модель выдаёт только число, и спросить «какие признаки заставили считать это спамом» нельзя. По его мнению, в чувствительных задачах вроде ранжирования кандидатов на вакансию такое число может скрывать смещения модели, которые трудно выявить ([simonwillison.net](https://simonwillison.net/2026/Sep/21/jev/)). Если решению нужно письменное обоснование, OpenRouter предлагает схему, где Jev принимает решение, а чат-модель потом его объясняет.

## Сколько стоит Jev: расчёт по входным токенам

У TypeSafe тарифицируются только входные токены: `state` плюс тексты вопросов. В ответе есть `usage.output_tokens`, но выходные токены бесплатны. Формула:

**стоимость = входные токены × $0,042 / 1 000 000**

Примеры с явными допущениями:

- **Классификация обращений.** 1 000 000 запросов в месяц, в среднем 400 входных токенов на запрос (допущение; для ориентира — официальный пример с тремя вопросами к короткому обращению занял 392 токена). Итого 400 млн токенов × $0,042 / 1 млн = **$16,80 в месяц**.
- **Длинные документы.** В тесте Линдфорса один документ с 11 вопросами занял 4995 входных токенов: 4995 × $0,042 / 1 млн ≈ $0,00021 за документ, около $0,21 на тысячу — это совпадает с его $0,22.
- **Стартовый баланс.** По сообщениям 36Kr, Crypto Briefing и VentureBeat, при регистрации начисляется $5. На сайте и в документации TypeSafe эта сумма не указана, так что ориентируйтесь на то, что показывает консоль. $5 / $0,042 ≈ 119 млн входных токенов, то есть около 297 тысяч запросов по 400 токенов.

Для сравнения с LLM допущения те же — 400 входных токенов на запрос — плюс 20 выходных токенов на JSON-метку. На нижней границе диапазона, который приводит TypeSafe ($0,20 за 1 млн входных, выход в 5 раз дороже), миллион запросов обойдётся в $80 за вход плюс $20 за выход — $100. Разница с Jev — примерно в 6 раз, а не в сотни; в тесте Линдфорса против DeepSeek без рассуждения соотношение похожее ($0,22 против $1,31). Разрыв в сотни раз появляется при сравнении с дорогими моделями и режимами с рассуждением, где к счёту добавляются токены рассуждения. Актуальные цены других моделей удобно сверять в [сравнении цен LLM API 2026](https://blog.laozhang.ai/ru/posts/cheapest-llm-models), а методику расчёта стоимости задачи для GPT и Claude — в статье [Claude API и OpenAI API: цены и расчёт стоимости задач](https://blog.laozhang.ai/ru/posts/claude-api-vs-openai-api-pricing).

Два практических следствия:

- Jev читает `state` один раз и отвечает на все вопросы параллельно, поэтому несколько вопросов к одному тексту выгоднее задавать в одном запросе, а не в нескольких. Реальный счёт проверяйте по `usage.input_tokens`.
- Основная статья расходов — размер `state`. Отфильтровать лишнее в коде выгодно дважды: дешевле и точнее (о падении точности на длинном контексте — ниже).

Цена может измениться. В анонсе TypeSafe честно признаёт, что не может доказать отсутствие субсидирования, и ожидает, что цена будет снижаться, а не расти.

## Как получить доступ к Jev

| Путь | Что нужно | Идентификатор модели | Контекст | Кто выставляет счёт |
| --- | --- | --- | --- | --- |
| TypeSafe напрямую | аккаунт и ключ на [console.typesafe.ai](https://console.typesafe.ai/keys) | `jev-latest`, `jev-1.13.0` | 64k токенов на запрос, из них не больше 32k на `state` плюс самый длинный вопрос | TypeSafe |
| OpenRouter | ключ OpenRouter, аккаунт TypeSafe не нужен | `typesafe/jev-1.13`, `~typesafe/jev-latest` | 32 000 токенов на `state` и вопросы | OpenRouter, стоимость приходит в `usage.cost` |
| Vercel AI Gateway | проект на AI SDK 7.0.105 и новее | `typesafe-ai/jev` | — | Vercel по условиям AI Gateway |

**Напрямую через TypeSafe** — основной путь: полная документация, Playground и SDK по умолчанию настроены на него. Лимиты для jev-1.13.0 — 250 000 токенов в секунду и 1200 запросов в минуту. TypeSafe предупреждает, что они сейчас меняются без уведомления, а при превышении API возвращает 429. На сайте и в документации всё ещё написано «early access», но сам лист ожидания TypeSafe отменила 20 сентября.

**Через OpenRouter** удобно, если у вас уже там аккаунт и оплата. Есть два интерфейса: Decisions API (`POST https://openrouter.ai/api/alpha/decisions`, пока в статусе alpha) и совместимый System One API (`POST https://openrouter.ai/api/v1/systemone`), к которому подключается официальный SDK TypeSafe сменой base URL. Учтите, что лимит контекста на OpenRouter считается иначе, чем у TypeSafe: 32 000 токенов на всё сразу.

**Через Vercel AI Gateway** Jev доступен с 16 сентября через экспериментальную функцию `experimental_evaluate` в AI SDK 7; там тип Noul называется `boolean`. Vercel объявлял Jev бесплатным в Gateway до 25 сентября 2026 года — это стартовая акция, закладывать её в расчёты не стоит. API экспериментальный, поэтому для продакшена надёжнее прямой вызов или OpenRouter.

**Доступ из России.** Доступность из конкретной страны и принимаемые способы оплаты определяют условия TypeSafe и OpenRouter, и проверять их нужно на стороне провайдера до начала интеграции. Сторонние посредники, которые перепродают доступ к Jev, работают по своим условиям; пользуясь ими, вы передаёте свой трафик и данные третьей стороне, а не TypeSafe.

**Официальные адреса** — только `typesafe.ai`, `docs.typesafe.ai`, `console.typesafe.ai` и `api.typesafe.ai`. 18 сентября были зарегистрированы похожие домены с обещаниями «бесплатно попробовать Jev»; вводить на них свои данные и ключи не нужно.

## Руководство: первый вызов, чтение ответа и маршрутизация

Примеры ниже составлены по официальной документации TypeSafe и OpenRouter по состоянию на 24 сентября 2026 года; имена полей и функций соответствуют документации.

### Шаг 1. Попробовать без кода в Playground

Откройте [Playground](https://console.typesafe.ai/playground), войдите, вставьте любой текст как state и добавьте вопрос — например, Noul «Does this message express urgency?». Можно смешать Choice, Score и Noul и сразу увидеть все вероятности. Это самый быстрый способ понять, как модель реагирует на ваши формулировки, до того как писать код.

### Шаг 2. Получить ключ и сделать запрос через curl

Ключ создаётся на странице [console.typesafe.ai/keys](https://console.typesafe.ai/keys). Сохраните его в переменной окружения `TYPESAFE_API_KEY` — её же читают оба SDK.

```bash
export TYPESAFE_API_KEY="..."

curl -X POST https://api.typesafe.ai/v1/systemone \
  -H "Authorization: Bearer $TYPESAFE_API_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<'EOF'
{
  "state": "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
  "model": "jev-latest",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this",
      "criteria": {
        "billing": "Payment or subscription issues",
        "technical": "Bugs or integration problems",
        "sales": "Pricing or account questions"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "How frustrated the customer appears",
      "criteria": [
        "Calm, just stating facts",
        "Frustrated but civil",
        "Very angry, strong language"
      ]
    },
    "is_urgent": {
      "type": "noul",
      "instructions": "The message conveys urgency or time-sensitivity"
    }
  }
}
EOF
```

### Шаг 3. Прочитать ответ

Так выглядит пример ответа из документации TypeSafe:

```json
{
  "model": "jev-1.13.0",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "technical",
      "confidence": 0.78,
      "probabilities": { "technical": 0.85, "sales": 0.0, "billing": 0.15 }
    },
    "frustration": {
      "type": "score",
      "score": 1.0,
      "confidence": 1.0,
      "legend": {
        "0": "Calm, just stating facts",
        "1": "Frustrated but civil",
        "2": "Very angry, strong language"
      },
      "probabilities": { "0": 0.0, "1": 1.0, "2": 0.0 }
    },
    "is_urgent": { "type": "noul", "noul": 1.0 }
  },
  "usage": { "input_tokens": 392, "output_tokens": 65 }
}
```

Как это читать:

- **`model`** — реальная версия, которая ответила. Запрос шёл на `jev-latest`, а ответил `jev-1.13.0`. Сохраняйте это поле в логах.
- **`department`** — выбран `technical` с вероятностью 0,85, но у `billing` тоже 0,15. Уверенность 0,78 — это та самая формула: (3 × 0,85 − 1) / 2 = 0,775. Если бы вероятности разделились 0,5 / 0,5 / 0, уверенность упала бы до 0,25.
- **`frustration`** — `score` 1,0 по `legend` означает «Frustrated but civil». Score может оказаться дробным, например 1,4 — это взвешенное положение между уровнями, а не точная величина. Сравнивать его с порогом можно, восстанавливать по нему число — нет.
- **`is_urgent`** — Noul 1,0, то есть модель уверена, что срочность есть. Уверенности у Noul нет: порог вы выбираете по самому значению.
- **`usage.input_tokens`** — то, за что вы платите: 392 × $0,042 / 1 млн ≈ $0,000016.

![Как ответ Jev превращается в маршрут: вероятности 0,85 / 0,15 / 0 дают уверенность 0,775, это выше порога 0,6, и обращение автоматически уходит в technical](https://blog.laozhang.ai/posts/ru/jev-ai-model-guide/img/confidence-routing.webp)

При ошибке API возвращает статус и JSON с описанием: 401 — неверный ключ, 422 — запрос не прошёл валидацию (в теле указано поле), 429 — превышен лимит, 529 — сервис перегружен. На 429 и 529 повторяйте запрос с экспоненциальной задержкой; официальные SDK делают это сами и учитывают заголовок `retry-after`.

### Шаг 4. Python: закрепить версию и маршрутизировать по уверенности

Установите SDK (нужен Python 3.10 или новее):

```bash
pip install typesafe-sdk   # или: uv add typesafe-sdk
```

Ниже — сортировка обращений, в которой Jev принимает решение только при достаточной уверенности, а остальное уходит на проверку:

```python
from typesafe_sdk import Choice, Noul, TypeSafeClient, TypeSafeError

# Версия закреплена: пороги ниже подбираются под конкретную версию модели.
# Алиас jev-latest переедет на новую версию без изменений на вашей стороне.
client = TypeSafeClient(model="jev-1.13.0")

QUESTIONS = {
    "department": Choice(
        instructions="Which team should handle this ticket?",
        criteria={
            "billing": "Payments, invoices, refunds",
            "technical": "Bugs, outages, integrations",
            "sales": "Pricing, upgrades, new accounts",
        },
    ),
    "is_urgent": Noul(
        instructions="The message conveys urgency or time-sensitivity",
    ),
}

# Стартовые значения; подберите их на своей размеченной выборке.
AUTO_ROUTE_MIN_CONFIDENCE = 0.6
URGENT_MIN_NOUL = 0.8  # порог для Noul нельзя переносить на Choice и наоборот


def triage(ticket: str) -> dict:
    try:
        response = client.system_one(state=ticket, questions=QUESTIONS)
    except TypeSafeError:
        # Ключ, валидация, сеть или исчерпанные повторы: не угадываем, отправляем в резерв.
        return {"route": "fallback", "reason": "jev_error"}

    dept = response.answers["department"]
    record = {
        "choice": dept.choice,
        "confidence": dept.confidence,
        "probabilities": dict(dept.probabilities),
        "urgent": response.answers["is_urgent"].noul >= URGENT_MIN_NOUL,
    }

    if dept.confidence < AUTO_ROUTE_MIN_CONFIDENCE:
        return {"route": "review", **record}  # человек или LLM
    return {"route": dept.choice, **record}
```

Что здесь важно:

- **Порог зависит от цены ошибки.** В примерах TypeSafe нижняя граница уверенности — 0,5–0,6 (ниже — к человеку), а для рискованных действий вроде подтверждения перевода денег — выше 0,85–0,9, иначе система переспрашивает пользователя. Официального универсального порога нет.
- **Вторая по вероятности ветка тоже полезна.** Если у второго варианта заметная доля (в примере документации — больше 0,25), обращение можно продублировать в эту команду.
- **Ветка `review`** — это место для человека или для LLM, которая разберёт спорный случай и напишет ответ клиенту. Для этой части подойдёт любая чат-модель через OpenAI-совместимый API, например через шлюз laozhang.ai (`https://api.laozhang.ai/v1`); сам Jev через него не предоставляется. Как решить, повторять ли запрос или переключаться на другую модель при ошибке, разобрано в статье [Повторить запрос LLM API или переключить модель: пять проверок](https://blog.laozhang.ai/ru/posts/llm-api-retry-vs-fallback-model).
- **Логи.** Храните `state`, схему вопросов, порядок вариантов, версию модели, вероятности и уверенность. Без этого не получится ни подобрать порог, ни разобрать инцидент.

Если приложение асинхронное, в SDK есть `AsyncTypeSafeClient` с тем же методом `system_one`.

### Шаг 5. Как подобрать порог на своих данных

1. Соберите несколько сотен реальных обращений и разметьте правильные ответы вручную.
2. Прогоните их через Jev с закреплённой версией и сохраните `choice` и `confidence`.
3. Разбейте результаты на корзины по уверенности (например, 0–0,3, 0,3–0,5, 0,5–0,7, 0,7–0,9, 0,9–1) и посчитайте долю совпадений в каждой.
4. Выберите порог, выше которого точность устраивает ваш бизнес, и посмотрите, какая доля трафика при этом обрабатывается автоматически.
5. При переходе на новую версию модели повторите прогон, прежде чем менять `model`.

Для русскоязычного трафика этот шаг обязателен: TypeSafe пишет, что основной язык обучения — английский, а другие языки модель обрабатывает, но «не одинаково хорошо», и советует проверять на своём контенте. На той же выборке стоит сравнить вопросы, сформулированные по-русски и по-английски.

### Шаг 6. JavaScript / TypeScript

```bash
npm install @typesafe-ai/sdk   # Node.js 20 или новее
```

```ts
import { choice, TypeSafeClient } from "@typesafe-ai/sdk";

const client = new TypeSafeClient(); // читает TYPESAFE_API_KEY

const response = await client.systemOne({
  state: { document: "I was charged twice. Please fix this ASAP." },
  questions: {
    category: choice("What is this ticket about?", {
      billing: null,
      technical: null,
      other: null,
    }),
  },
});

const answer = response.answers.category; // тип выводится из вопроса
if (answer.confidence >= 0.6) {
  console.log("route to", answer.choice);
} else {
  console.log("send to review", answer.probabilities);
}
```

`null` вместо описания варианта допустим, когда название говорит само за себя. Для пограничных случаев описания лучше писать: Jev читает инструкции буквально.

### Шаг 7. Тот же код через OpenRouter

Официальный SDK подключается к OpenRouter заменой адреса и ключа:

```python
import os
from typesafe_sdk import TypeSafeClient

client = TypeSafeClient(
    api_key=os.environ["OPENROUTER_API_KEY"],
    base_url="https://openrouter.ai/api",
    model="typesafe/jev-1.13",
)
```

В JS то же самое: `new TypeSafeClient({ apiKey: process.env.OPENROUTER_API_KEY, baseURL: "https://openrouter.ai/api" })`. Можно и без изменения кода, через переменные `TYPESAFE_BASE_URL=https://openrouter.ai/api` и `TYPESAFE_API_KEY=<ключ OpenRouter>`. Одна оговорка из документации OpenRouter: `client.models.list()` в этом режиме не работает, потому что OpenRouter возвращает список моделей в своём формате.

### Шаг 8. Дать кодовому агенту контекст о Jev

Если интеграцию пишет кодовый агент, TypeSafe предлагает официальный навык с описанием API и паттернов. В Claude Code:

```bash
claude plugin marketplace add typesafe-ai/skills
claude plugin install typesafe@typesafe-ai
```

Для других агентов: `npx skills add typesafe-ai/skills --skill typesafe-ai`.

## Где Jev ошибается: проверка перед запуском

TypeSafe опубликовала список известных слабых мест jev-1.13 (последняя ревизия — 17 сентября 2026 года). Вместе со сторонними наблюдениями из него получается чек-лист перед выкаткой:

- **Буквальное чтение.** Модель отвечает на написанный вопрос, а не на подразумеваемый: отрицания, уточнения и неявные условия читаются как есть. Пишите точное условие и выносите пограничные случаи в `criteria`. Если поймали себя на мысли «я имел в виду другое», это недостающая часть инструкции.
- **Числа, счёт и даты — в коде.** Подсчитать элементы, сравнить две даты или прикинуть величину по дробному Score Jev не может надёжно. Документация советует задавать по одному Noul на каждый элемент и суммировать в коде, а у дат извлекать компоненты через Choice и сравнивать программно.
- **Никаких двойных отрицаний и многоходовых вопросов.** Каждый лишний шаг рассуждения снижает точность; указывайте нужное поле `state` по имени.
- **Только нужное в `state`.** С ростом нерелевантного контекста точность падает. Фильтруйте до вызова; если отфильтровать кодом нельзя, отсеивайте фрагменты отдельным Noul.
- **Инъекции в данных.** Модель по умолчанию не считает `state` враждебным. VentureBeat описывает тест инженера Octomind: вероятность заблокировать команду `rm -rf ~/.ssh` была 0,76 при уверенности 0,64, а после подложенного в `state` фальшивого вывода инструмента «уже одобрено» упала до 0,48 при уверенности 0,22 ([VentureBeat](https://venturebeat.com/security/companies-are-putting-jev-in-charge-of-ai-agent-decisions-and-prompt-injection-can-influence-the-verdict)). Прогоните свою схему на враждебных текстах и с перемешанным порядком вариантов, а опасные действия защитите детерминированной проверкой и человеком.
- **`instructions` и `criteria` не противоречат друг другу.** Например, Noul, где `true` описывает «нет», работает хуже.
- **Не рассчитывайте на логические тождества.** В документации приведён случай: на одно обращение Noul «просит ли клиент возврат» дал 0,72, а Noul «просит ли что-то кроме возврата» — 0,47, в сумме 1,19. Задавайте вопрос в той форме, в какой он вам нужен, и не переносите порог, подобранный для Noul, на Choice.
- **Язык.** Английский работает лучше всего; для русского проверьте точность и калибровку на своей выборке (шаг 5 руководства).
- **Версия закреплена.** `jev-latest` и `jev-preview` сейчас указывают на `jev-1.13.0`, но переедут на новую версию без предупреждения. Пороги, подобранные под одну версию, при смене нужно перепроверять.
- **Лимиты и формат входа.** 64k токенов на запрос (32k на `state` плюс самый длинный вопрос) у TypeSafe, 32 000 у OpenRouter; только текст и JSON — изображения, аудио и видео нужно заранее превратить в текст. Лимиты скорости сейчас меняются, 429 и 529 нужно обрабатывать.
- **Объяснимость.** Если по регламенту решение нужно обосновать (кредиты, найм, модерация с апелляцией), одной вероятности мало: добавьте LLM-объяснение или ручную проверку.

## Частые вопросы о Jev

**Jev — это открытая модель?**
Нет. Jev — проприетарная модель, доступная только через API; открыт лишь код SDK. Проекты вроде Kev-0.5B, Laya, SemIf/OpenJev или Bespoke Nimble — сторонние подражания на базе Qwen и ModernBERT, обученные на синтетических данных. Их качество независимо не проверено, и заменой Jev их считать нельзя.

**Можно ли дообучить Jev на своих данных?**
Нет. Дообучения и LoRA под клиента нет — у всех аккаунтов одни и те же веса. Под свою предметную область Jev настраивают через `state`, формулировки `instructions` и `criteria` и разбиение решения на атомарные вопросы.

**Используются ли мои запросы для обучения?**
По документации TypeSafe — нет. Для корпоративных клиентов доступен режим без хранения данных (ZDR); в Vercel AI Gateway режимы Zero Data Retention и No Training включаются в параметрах запроса.

**Бесплатен ли Jev?**
Бесплатного тарифа нет. По сообщениям СМИ, новым аккаунтам TypeSafe начисляется $5 — это около 119 млн входных токенов; точную сумму показывает консоль. Бесплатный период в Vercel AI Gateway был ограничен 25 сентября 2026 года.

**Хорошо ли Jev понимает русский?**
Модель принимает текст на любом языке, но TypeSafe прямо пишет, что лучше всего она работает на английском, а остальные языки поддерживаются «не одинаково хорошо». Для русскоязычных данных пороги уверенности стоит подбирать отдельно и на своей выборке.
