Jev в Cloudflare Workers AI
Cloudflare добавила Jev в каталог моделей как стороннюю модель typesafe/jev. Её вызывают из Worker через тот же биндинг AI, что и остальные модели. Ключ TypeSafe не нужен, а счёт выставляет Cloudflare.
Что известно о Jev в Cloudflare
- Идентификатор:
typesafe/jev, в каталоге помечен как сторонняя модель (Third-party). - Контекст: 32 000 токенов.
- Цена: на странице модели не опубликована, Cloudflare показывает её в дашборде.
- Формат: запрос и ответ такие же, как у API TypeSafe:
stateиquestionsна входе,model,answersиusageна выходе. - Условия использования: ссылка ведёт на юридические документы TypeSafe.
В каталоге Cloudflare Jev отнесена к категории Text Generation, хотя текст модель не генерирует. Ищите её по названию или по идентификатору.
Для сторонних моделей в документации Cloudflare есть условие: они работают только через AI Gateway и оплачиваются по схеме Unified Billing. Cloudflare сама хранит учётные данные провайдера и списывает стоимость с ваших кредитов.
Шаг 1. Биндинг AI в конфигурации Wrangler
Добавьте биндинг в wrangler.jsonc:
{
"ai": {
"binding": "AI"
}
}
В коде Worker он будет доступен как env.AI. Если проект на TypeScript, после изменения конфигурации выполните wrangler types: команда обновит типы для env.
Шаг 2. Вызов из Worker
export default {
async fetch(request, env) {
const { text } = await request.json();
const result = await env.AI.run(
"typesafe/jev",
{
state: text,
questions: {
is_urgent: {
type: "noul",
instructions: "Клиент сообщает о срочной проблеме?",
},
department: {
type: "choice",
instructions: "Какая команда должна заняться обращением?",
criteria: {
billing: "Платежи, счета, возвраты",
technical: "Ошибки, сбои, интеграции",
sales: "Тарифы и покупка",
},
},
},
},
{ gateway: { id: "default" } },
);
return Response.json({
urgent: result.answers.is_urgent.noul,
department: result.answers.department.choice,
confidence: result.answers.department.confidence,
});
},
};
Третий аргумент указывает шлюз AI Gateway. В примере на странице модели его нет, но справочник биндинга для сторонних моделей передаёт шлюз явно. Значение default создаёт шлюз автоматически при первом авторизованном запросе. Если у вас уже есть шлюз, передайте его имя: так проще разделять трафик разных приложений.
Ответ приходит в формате TypeSafe. Пример из документации Cloudflare, сокращённый:
{
"model": "jev-1.13.0",
"answers": {
"is_urgent": { "type": "noul", "noul": 0.95 },
"department": {
"type": "choice",
"choice": "billing",
"confidence": 0.8,
"probabilities": { "billing": 0.87, "sales": 0, "technical": 0.13 }
}
},
"usage": { "input_tokens": 426, "output_tokens": 73 }
}
Поля ответов те же, что и при прямой работе с API. Что означают noul, probabilities и confidence, описано в справочнике API Jev.
Шаг 3. Пополнение кредитов
Без кредитов сторонние модели не вызываются. Порядок такой:
- Откройте в дашборде Cloudflare раздел AI Gateway.
- В карточке Credits Available нажмите Manage.
- Если способа оплаты нет, дашборд предложит его добавить.
- Нажмите Top-up credits, укажите сумму и подтвердите оплату.
Что стоит знать об этой схеме:
- Комиссия 5% берётся при покупке кредитов: пополнение на $100 обойдётся в $105. Цены провайдеров, по словам Cloudflare, передаются без наценки.
- Автопополнение включается там же: задайте порог и сумму пополнения.
- Лимиты расходов настраиваются на уровне шлюза: по модели, провайдеру или по вашим метаданным, например по пользователю.
- Отрицательный баланс в редких случаях возможен. Тогда Cloudflare спишет долг с привязанного способа оплаты в начале следующего месяца.
Вызов через REST API Cloudflare
Если код работает не в Worker, вызывайте ту же модель через API Cloudflare. Для сторонних и собственных моделей есть универсальный эндпоинт /ai/run: модель указывается в поле model, параметры — внутри input.
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev",
"input": {
"state": "Третий день не проходят выплаты. Помогите срочно!",
"questions": {
"is_urgent": { "type": "noul", "instructions": "Клиент сообщает о срочной проблеме?" }
}
}
}'
Токену нужно право Account → Workers AI → Read. Токен только с правами AI Gateway получит ответ 401 с кодом ошибки 10000. Идентификатор аккаунта покажет wrangler whoami.
Параметры шлюза: логи, кэш, метаданные
В третьем аргументе env.AI.run() кроме id можно передать:
| Параметр | Что делает |
|---|---|
skipCache |
Пропустить кэш для этого запроса |
cacheTtl |
Время жизни кэша в секундах |
cacheKey |
Свой ключ кэша |
collectLog |
Собирать ли лог запроса |
metadata |
Произвольные метаданные для записи в логе |
Запросы через шлюз попадают в аналитику: число запросов, ошибки, задержка, токены и стоимость. Идентификатор лога последнего вызова вернёт env.AI.aiGatewayLogId. Кэш полезен, когда одни и те же вопросы задаются к одному и тому же тексту, например при повторной обработке.
Вариант без Workers AI: fetch к API TypeSafe
Если ключ TypeSafe уже есть и платить вы хотите TypeSafe, биндинг не нужен. Сохраните ключ в секретах Worker:
npx wrangler secret put TYPESAFE_API_KEY
И вызывайте API обычным fetch:
export default {
async fetch(request, env) {
const { text } = await request.json();
const res = await fetch("https://api.typesafe.ai/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${env.TYPESAFE_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "jev-latest",
state: text,
questions: { spam: { type: "noul", instructions: "Это спам?" } },
}),
});
if (!res.ok) {
return new Response(await res.text(), { status: res.status });
}
const data = await res.json();
return Response.json({ spam: data.answers.spam.noul });
},
};
С совместимыми площадками код тот же, меняются адрес, ключ и модель. Для OpenRouter это https://openrouter.ai/api/v1/systemone и typesafe/jev-1.13, для Polza.AI — https://polza.ai/api/v1/systemone и typesafe/jev. На ответы 429 и 529 делайте повтор с экспоненциальной задержкой: в этом варианте повторы остаются на вашей стороне. Подробности — в статье об ошибках API Jev.
Что выбрать
| Биндинг Workers AI | fetch к API TypeSafe | |
|---|---|---|
| Ключ провайдера | Не нужен | Ключ TypeSafe в секретах Worker |
| Оплата | Кредиты AI Gateway, комиссия 5% при пополнении | Счёт TypeSafe или площадки |
| Логи и аналитика | В AI Gateway | Настраиваете сами |
| Кэш и лимиты | Настройки шлюза | Настраиваете сами |
| Формат запроса | state и questions |
Тот же |
Биндинг удобен, если инфраструктура уже в Cloudflare и вы хотите один счёт за все модели. Прямой fetch подходит, когда биллинг уже настроен у TypeSafe или у площадки вроде OpenRouter. Для покупки кредитов нужен способ оплаты, который принимает Cloudflare. Если его нет, посмотрите способы подключения из России. Похожая схема с оплатой кредитами есть и у Vercel AI Gateway.
Частые вопросы
Как называется Jev в Cloudflare Workers AI?
typesafe/jev. В каталоге Cloudflare модель помечена как сторонняя (Third-party), контекст — 32 000 токенов.
Нужен ли ключ TypeSafe для Jev в Cloudflare?
Нет. Сторонние модели Cloudflare вызывает со своими учётными данными и списывает стоимость с кредитов AI Gateway. Нужны аккаунт Cloudflare и пополненный баланс.
Сколько стоит Jev в Cloudflare?
На странице модели цена не указана, Cloudflare отсылает к дашборду. По правилам Unified Billing цены провайдеров передаются без наценки, а при покупке кредитов берётся комиссия 5%.
Можно ли вызвать Jev из Worker без Workers AI?
Да, обычным fetch к API TypeSafe или совместимой площадки. Ключ храните в секретах Worker, а не в коде.