Jev 1.13
Jev 1.13 (typesafe/jev-1.13) — первая decision-модель TypeSafe (System One). Это не LLM: модель не генерирует текст, а отвечает на типизированные вопросы о переданном состоянии — с вероятностями, по которым код ветвится напрямую. Контекст 32 000 токенов.
Чем не является
Заголовок раздела «Чем не является»- Не чат: нет
POST /v1/chat/completions— вызов черезPOST /v1/decisions. - Не генерирует текст и не объясняет решения — только вероятности. Нужна мотивировка — спросите чат-модель после решения.
- Не праймери для «напиши письмо» — она для развилок в коде: маршрутизация, классификация, проверка действий.
Три примитива
Заголовок раздела «Три примитива»| Примитив | Вопрос | Ответ |
|---|---|---|
noul |
Выполняется ли условие? | Вероятность «да» 0…1 |
choice |
Какой из вариантов? | Выбор + распределение + уверенность |
score |
Где на шкале? | Взвешенная позиция + вероятности уровней |
Сколько угодно вопросов любого типа в одном запросе — по одному ответу на каждый.
Когда брать Jev вместо LLM
Заголовок раздела «Когда брать Jev вместо LLM»Паттерн «спросить у LLM узкий вопрос и распарсить метку из ответа» — анти-паттерн: медленно, дороже и нестабильно. Jev решает то же быстрее и предсказуемее:
- Маршрутизация — какой команде/очереди тикет.
- Гейтинг агентов — безопасен ли тул-колл: обратим? в рамках задачи? Выполнять / отказать / позвать человека по порогу
noul. - Классификация и теги — категория + сколько угодно бинарных меток одним запросом.
- Каскады — черновик дешёвой моделью → проверка Jev → эскалация на дорогую только при провале проверки.
Быстрый старт
Заголовок раздела «Быстрый старт»curl https://api.mixen.ai/v1/decisions \ -H "Authorization: Bearer $MIXEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "typesafe/jev-1.13", "state": "My checkout page shows a blank screen after I click Pay. Tried two browsers.", "questions": { "is_bug": { "type": "noul", "instructions": "Is the customer reporting a software defect?", "criteria": { "true": "Describes broken or unexpected product behavior.", "false": "Asks a question or requests a feature." } }, "urgency": { "type": "score", "instructions": "How urgent is this ticket?", "criteria": ["Can wait", "This week", "Blocking revenue"] } } }'import requests
r = requests.post( "https://api.mixen.ai/v1/decisions", headers={"Authorization": f"Bearer {KEY}"}, json={ "model": "typesafe/jev-1.13", "state": "Task: clean up accounts. Tool call: delete_rows(...)", "questions": { "safe_to_run": { "type": "noul", "instructions": "Is this action safe without human approval?", "criteria": { "true": "Reversible, low-impact, within the task.", "false": "Destructive, irreversible, or broader than the task." }, } }, },)noul = r.json()["answers"]["safe_to_run"]["noul"]if noul < 0.8: escalate_to_human()Ответ приходит по каждому вопросу:
{ "answers": { "is_bug": { "type": "noul", "noul": 0.96 }, "urgency": { "type": "score", "score": 2, "probabilities": {"0": 0, "1": 0.01, "2": 0.99} } }, "usage": { "cost": 0.00002, "input_tokens": 476 }}Как задавать вопросы
Заголовок раздела «Как задавать вопросы»criteria— граница решения, не описание опции: пара «true/false» для noul, по предложению на вариант для choice, упорядоченные уровни для score. Чем конкретнее — тем стабильнее распределение.state— не промпт, а контекст: текст тикета, JSON состояния, массив. Можно ссылаться на вложенные поля вinstructions.- Пороги берите из
probabilities/confidence, а не только из главного ответа: низкая уверенность — сигнал отдать случай человеку или переспросить. Прогоните десяток размеченных примеров и подберите порог под свою цену ошибки.
Платятся только входные токены (state + вопросы); выходные бесплатны. Типичный запрос — сотни токенов, доли копейки. Списание — по usage.cost из ответа.
Ограничения
Заголовок раздела «Ограничения»- Контекст 32K токенов.
- Модель не меняет
stateи не вызывает инструменты — только отвечает на ваши вопросы. - Полная схема запроса/ответа — в гайде «Решения (Decisions)».