Загрузка...

Jev Latest

Разработчик: Typesafe
Идентификатор:
Скопировано!
Это алиас: сейчас указывает на typesafe/jev-1.13 . При выходе новой версии указатель переедет на неё, а идентификатор останется прежним.

Характеристики Jev Latest

Контекстное окно 32K

Дата релиза 18 сентября 2026

Мультимодальность

Входящие данные:

  • Текст

Исходящие данные:

  • Решения

Цены Jev Latest в рублях

Оплата производится по факту за использованные токены.

Тип
Стоимость
Входящие токены
Тарифицируются входные токены — текст вопросов и оцениваемое состояние (state). Выход модели структурированный (answers), в токенах не тарифицируется.
4,59 ₽ / 1M токенов
Подробнее

Цены по провайдерам

RouterAI работает с несколькими провайдерами для обеспечения максимальной доступности и оптимальных цен.

  • 1
    TypeSafe
    4,59 ₽
    Входящие

Умная маршрутизация запросов

Ваши запросы автоматически направляются к провайдеру с самой низкой ценой. Если провайдер недоступен, система мгновенно переключается на следующего по цене, обеспечивая непрерывную работу вашего приложения без потери запросов.

  • Автоматический выбор
  • Отказоустойчивость
  • Лучшая цена

Цены указаны в рублях и могут меняться в зависимости от курса валют

Что умеет Jev Latest

Jev — это структурированная модель принятия решений от TypeSafe и первая из моделей System One. Модели System One принимают быстрые, структурированные решения для программного обеспечения, возвращая типизированный выбор вместо свободного текста. Она подходит для маршрутизации, классификации и других точек принятия решений внутри приложения, где быстрый и предсказуемый ответ важнее, чем сгенерированный текст.

API Jev Latest: подключение и примеры кода

Модель отвечает через выделенный эндпоинт /api/v1/decisions. Работают и официальные SDK TypeSafe: укажите наш base_url и ключ, полученный в личном кабинете.

# pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

client = TypeSafeClient(
    base_url="https://routerai.ru/api",
    api_key="YOUR_API_KEY",
    model="~typesafe/jev-latest",  # алиас на актуальную версию; закрепить версию — typesafe/jev-1.13
)

response = client.system_one(
    state="Здравствуйте! Третий день не могу подключить оплату на сайте — платежи клиентов не проходят, мы теряем заказы. Помогите, пожалуйста, срочно.",
    questions={
        "is_urgent": Noul(instructions="Клиент сообщает о срочной проблеме?"),
        "department": Choice(
            instructions="Какая команда должна заняться обращением?",
            criteria={
                "billing": "Платежи, счета, возвраты, подписки",
                "technical": "Ошибки, сбои, интеграции, настройка",
                "sales": "Тарифы, покупка, вопросы до оплаты",
            },
        ),
        "frustration": Score(
            instructions="Насколько раздражён клиент?",
            criteria=[
                "Спокоен, просто описывает ситуацию",
                "Раздражён, но вежлив",
                "Очень зол, резкие выражения",
            ],
        ),
    },
)

print(response.answers["is_urgent"].noul)      # 0.98
print(response.answers["department"].choice)   # "billing"
print(response.answers["frustration"].score)   # 0.88
// npm install @typesafe-ai/sdk
import { TypeSafeClient, choice, noul, score } from '@typesafe-ai/sdk';

const client = new TypeSafeClient({
  baseURL: 'https://routerai.ru/api',
  apiKey: 'YOUR_API_KEY',
  defaultModel: '~typesafe/jev-latest',  // алиас на актуальную версию; закрепить версию — typesafe/jev-1.13
});

const response = await client.systemOne({
  state:
    'Здравствуйте! Третий день не могу подключить оплату на сайте — платежи клиентов не проходят, мы теряем заказы. Помогите, пожалуйста, срочно.',
  questions: {
    is_urgent: noul('Клиент сообщает о срочной проблеме?'),
    department: choice('Какая команда должна заняться обращением?', {
      billing: 'Платежи, счета, возвраты, подписки',
      technical: 'Ошибки, сбои, интеграции, настройка',
      sales: 'Тарифы, покупка, вопросы до оплаты',
    }),
    frustration: score('Насколько раздражён клиент?', [
      'Спокоен, просто описывает ситуацию',
      'Раздражён, но вежлив',
      'Очень зол, резкие выражения',
    ]),
  },
});

console.log(response.answers.is_urgent.noul);      // 0.98
console.log(response.answers.department.choice);   // "billing"
console.log(response.answers.frustration.score);   // 0.88
import requests
import json

url = "https://routerai.ru/api/v1/decisions"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

data = {
    "model": "~typesafe/jev-latest",  # алиас на актуальную версию; закрепить версию — typesafe/jev-1.13
    # Вопросы к состоянию: имя → определение. Ответы придут под теми же именами.
    "questions": {
        "is_urgent": {
            "type": "noul",  # булев ответ: вероятность «да» от 0 до 1
            "instructions": "Требует ли обращение немедленной реакции дежурного?",
            "criteria": {
                "true": "Сервис недоступен или клиент теряет деньги прямо сейчас",
                "false": "Вопрос можно разобрать в общей очереди поддержки"
            }
        },
        "team": {
            "type": "choice",  # выбор одного варианта + probabilities по всем
            "instructions": "На какую команду направить обращение?",
            "criteria": {
                "billing": "Оплата, счета, возвраты, тарифы",
                "technical": "Ошибки API, интеграция, доступность сервиса",
                "other": "Всё остальное"
            }
        },
        "severity": {
            "type": "score",  # оценка по шкале: ответ — индекс в этом списке
            "instructions": "Насколько сильно это влияет на работу клиента?",
            "criteria": [
                "Влияния нет, вопрос информационный",
                "Частичное неудобство, есть обходной путь",
                "Работа клиента заблокирована полностью"
            ]
        }
    },
    # state — то, что оцениваем: строка, объект или массив.
    "state": {
        "ticket": "С 10:40 все запросы к API возвращают 500. Оплата прошла вчера.",
        "plan": "enterprise"
    }
}

response = requests.post(url, headers=headers, json=data)
result = response.json()

print(json.dumps(result, indent=2, ensure_ascii=False))
# result["answers"]["team"]["choice"]      → "technical"
# result["answers"]["is_urgent"]["noul"]   → 0.96
# result["answers"]["severity"]["score"]   → 1.99

# 2) Пакетная оценка списка одним запросом: вопросов может быть сколько угодно,
#    они оцениваются параллельно, но каждый вопрос даёт ровно один ответ —
#    поэтому на каждый элемент списка нужен свой вопрос. Общие правила кладём
#    в state один раз, а сам элемент дублируем в тексте вопроса: ссылка только
#    по индексу (items[3]) разрешается неточно, и соседние элементы «протекают».
comments = {
    "c1": "Отличный сервис, заказ пришёл за два дня, рекомендую!",
    "c2": "Заработок от 5000 ₽ в день без вложений, пишите в личку",
    "c3": "Подскажите, где найти инструкцию по настройке?"
}

questions = {}
for comment_id, text in comments.items():
    questions[f"comment_{comment_id}"] = {
        "type": "noul",
        "instructions": f"Является ли комментарий comments.{comment_id} = «{text}» спамом по правилам из policy?",
        "criteria": {
            "true": "Реклама, обещание заработка, контакты или ссылка на сторонний ресурс",
            "false": "Отзыв, вопрос или обсуждение по теме"
        }
    }

data = {
    "model": "~typesafe/jev-latest",
    "questions": questions,
    "state": {
        # Правила — один раз на весь пакет
        "policy": "Комментарии к статьям сайта. Спам — реклама товаров и услуг, обещания заработка, приглашения писать в личные сообщения или мессенджеры, телефоны и ссылки на сторонние ресурсы. Не спам — отзывы, вопросы и обсуждение по теме статьи.",
        "comments": comments
    }
}

response = requests.post(url, headers=headers, json=data)
result = response.json()

for comment_id, text in comments.items():
    probability = result["answers"][f"comment_{comment_id}"]["noul"]
    print(text[:30], "спам" if probability >= 0.7 else "ок", probability)
# c1 ок 0.03 / c2 спам 0.99 / c3 ок 0.03
# Порог выбирайте сами; значения между 0.3 и 0.7 удобно отправлять на ручную проверку.
# Нужна причина — замените noul на choice с вариантами ok / ad / scam.
# 50 элементов — около 13 тысяч входных токенов, ответ меньше секунды.
# Подробнее: https://routerai.ru/docs/guides/overview/decisions/recipes
curl -X POST "https://routerai.ru/api/v1/decisions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "~typesafe/jev-latest",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Требует ли обращение немедленной реакции дежурного?",
        "criteria": {
          "true": "Сервис недоступен или клиент теряет деньги прямо сейчас",
          "false": "Вопрос можно разобрать в общей очереди поддержки"
        }
      },
      "team": {
        "type": "choice",
        "instructions": "На какую команду направить обращение?",
        "criteria": {
          "billing": "Оплата, счета, возвраты, тарифы",
          "technical": "Ошибки API, интеграция, доступность сервиса",
          "other": "Всё остальное"
        }
      },
      "severity": {
        "type": "score",
        "instructions": "Насколько сильно это влияет на работу клиента?",
        "criteria": [
          "Влияния нет, вопрос информационный",
          "Частичное неудобство, есть обходной путь",
          "Работа клиента заблокирована полностью"
        ]
      }
    },
    "state": {
      "ticket": "С 10:40 все запросы к API возвращают 500. Оплата прошла вчера.",
      "plan": "enterprise"
    }
  }'

# 2) Пакетная оценка списка одним запросом: каждый вопрос даёт ровно один ответ,
#    поэтому на каждый элемент — свой вопрос (comment_<id>). Правила — один раз в state,
#    сам элемент дублируем в тексте вопроса: ссылка только по индексу (items[3])
#    разрешается неточно, соседние элементы «протекают». Ответы придут под теми же
#    ключами: answers.comment_c1.noul → 0.03, answers.comment_c2.noul → 0.99.
#    Подробнее: https://routerai.ru/docs/guides/overview/decisions/recipes
curl -X POST "https://routerai.ru/api/v1/decisions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "~typesafe/jev-latest",
    "questions": {
      "comment_c1": {
        "type": "noul",
        "instructions": "Является ли комментарий comments.c1 = «Отличный сервис, заказ пришёл за два дня, рекомендую!» спамом по правилам из policy?",
        "criteria": {
          "true": "Реклама, обещание заработка, контакты или ссылка на сторонний ресурс",
          "false": "Отзыв, вопрос или обсуждение по теме"
        }
      },
      "comment_c2": {
        "type": "noul",
        "instructions": "Является ли комментарий comments.c2 = «Заработок от 5000 ₽ в день без вложений, пишите в личку» спамом по правилам из policy?",
        "criteria": {
          "true": "Реклама, обещание заработка, контакты или ссылка на сторонний ресурс",
          "false": "Отзыв, вопрос или обсуждение по теме"
        }
      }
    },
    "state": {
      "policy": "Комментарии к статьям сайта. Спам — реклама товаров и услуг, обещания заработка, приглашения писать в личные сообщения или мессенджеры, телефоны и ссылки на сторонние ресурсы. Не спам — отзывы, вопросы и обсуждение по теме статьи.",
      "comments": {
        "c1": "Отличный сервис, заказ пришёл за два дня, рекомендую!",
        "c2": "Заработок от 5000 ₽ в день без вложений, пишите в личку"
      }
    }
  }'

Эндпоинт API

Decisions

Возвращает структурированные ответы на заданные вопросы (булев, выбор из вариантов, оценка по шкале) вместо свободного текста. Как формулировать вопросы, рецепты и подключение официального SDK TypeSafe — в гайде «Решения (Jev)» в документации.

POST https://routerai.ru/api/v1/decisions
Документация
Authorization
Bearer YOUR_API_KEY
Content-Type
application/json
Model
typesafe/jev-1.13