13 миллисекунд на решение: пять сборок Jev, которые можно запустить за выходные
Инженер и автор рассылки Byte Builders Викас Гупта выложил в X практический разбор экосистемы Jev: пять сборок, каждая занимает меньше двух часов, а все вместе обходятся дешевле доллара. Для трех из пяти нужен Mac на Apple Silicon. Ниже пересказ с командами и ссылками.
Что такое Jev
Jev это модель System One от TypeSafe AI. На вход она получает состояние (текст или JSON) и типизированные вопросы, описанные в коде. На выходе возвращает типизированные ответы с вероятностями и не пишет ни строчки текста.
Типов вопросов три. Choice выбирает один из вариантов (до 255) и дает вероятность для каждого. Score возвращает ожидаемый уровень по шкале из 2-10 ступеней. Noul отвечает «да или нет» и выдает P(true).
Эндпоинт: POST https://api.typesafe.ai/v1/systemone, актуальная сборка jev-1.13.0 (алиас jev-latest). Входные токены стоят $0.042 за миллион, выход бесплатный.
Автор предлагает на все выходные три правила. Jev решает, код действует, LLM пишет текст. Код ветвится по вероятности, сам выбранный вариант вторичен. Каждый вызов логируется с самого первого, иначе первые четыре сборки ломаются молча.
Сборка 1. Первый вызов (20 минут, облако)
Прямой API TypeSafe пока доступен по листу ожидания. Второй путь идет через Vercel AI Gateway, где модель лежит как typesafe-ai/jev и доступна через интерфейс evaluate в AI SDK и эндпоинт decisions в OpenRouter. Бесплатный доступ через шлюз заявлен до 25 сентября.
Задачу лучше брать из своего продукта: к какому отделу относится тикет, про оплату ли сообщение пользователя, в какую категорию попадает лог ошибки, можно ли отправлять ответ агента. Хороший кандидат вызывается часто, имеет ограниченный набор вариантов и дешево обходится при ошибке.
Качество вопроса решает почти все. Для Noul нужно назвать конкретное свидетельство: вопрос «Клиент просит вернуть уже потраченные деньги?» работает лучше, чем «Это срочно?». Критерии для Choice стоит описывать словами, например «billing: платежи, возвраты, счета». Один вопрос проверяет одно решение.
Дальше код смотрит на уверенность. При 0.85 и выше тикет уходит в отдел автоматически, от 0.60 до 0.85 уходит с пометкой на выборочную проверку, ниже отправляется человеку. Прогоните десять реальных кейсов. Задержка будет в районе 100-700 мс. Независимые замеры jevals дают p95 на уровне 653-693 мс, и планировать стоит от них, цифра 70 мс из анонса слишком оптимистична.
Сборка 2. Kev на MacBook (45 минут, локально)
Kev это модель решений Джареда Палмера под лицензией Apache-2.0: LoRA и pointer-голова поверх Qwen2.5-0.5B. Документ и все вопросы упаковываются в один префилл, блочно-каузальная маска изолирует вопросы друг от друга, голова сразу выдает вероятности без декодирования текста. Есть и версия на 8B.
Репозиторий: github.com/jaredpalmer/kev. Поднимаете по README совместимый с TypeSafe сервер и меняете в клиенте из первой сборки одну переменную:
Вопросы, состояние и формат ответа остаются прежними, данные при этом не покидают машину. Затем A/B на 50 своих примерах: точность, медианная задержка, стоимость. По README Kev отвечает на шесть вопросов примерно за 160 мс. Тесты The Unwind показали, что вне домена Jev опережает его примерно на 19 пунктов. Автор советует дообучить LoRA на паре сотен своих размеченных примеров и посмотреть, что станет с этим разрывом.
Сборка 3. laya-mlx (30 минут, самый быстрый путь)
Laya устроена иначе. Это энкодер ModernBERT-large на 421M параметров, обученный через PPO в Convai Innovations. Он отвечает на типизированные вопросы за один двунаправленный проход без авторегрессионного декодирования. На M3 Max медианная задержка 13.42 мс при пиковой памяти 943.6 МиБ, мультиязычная версия на 322M укладывается в 687.6 МиБ.
В репозитории laya-ultrafast есть демо со Snake и T-Rex и арена laya-vs-jev, где локальная Laya и облачный Jev играют на одних и тех же кадрах. На них хорошо видно, как распределение вероятностей действий сужается по мере приближения препятствия. Переключение на Laya делается одной переменной DECISION_MODEL=laya, после этого браузерный агент из четвертой сборки работает вообще без облака.
Ограничения тоже есть. Контекст 512 или 1024 токена в зависимости от чекпоинта, у облачного Jev 32K. Длинное состояние обрезается, и ответ меняется. Вирусная цифра «в 50 раз быстрее Jev» взята из одного поста в X без описанной методики. Цифра 13.42 мс при этом воспроизводится.
Сборка 4. Браузерный агент за 7 секунд (30 минут)
Browser Use переписали цикл браузерного агента вокруг Jev в проекте jev-ultrafast. На каждом шаге агент снимает DOM в индексированную таблицу видимых элементов, и Jev в одном запросе оценивает две головы: операцию (CLICK, TYPE_TEXT, SELECT, SCROLL_UP, SCROLL_DOWN, WAIT, DONE, BLOCKED) и целевой элемент. Небольшая текстовая модель подключается только для TYPE_TEXT, скриншотов в
цикле принятия решений нет.
Запускаете поиск в Google Flights одной фразой и смотрите в локальном инспекторе на 127.0.0.1:8766, как таблица элементов пересобирается после каждого действия.
Опубликованный прогон: поиск Цюрих-Лондон занял 7.073 секунды, 17 запросов к Jev с медианой 178 мс, итоговая стоимость $0.0039. По сравнению с прошлой версией агента медианное время задачи сократилось на 25% (с 9.45 до 7.09 с), число вызовов браузерного протокола упало с 1092 до 101. Вне поддержки пока остаются shadow root, iframe, canvas, загрузка файлов, всплывающие вкладки и вложенный скролл. Решение DONE тоже не гарантирует, что задача выполнена, финальное состояние нужно проверять.
Сборка 5. Лог решений и проверка калибровки (1 час)
Эту сборку автор считает обязательной. Каждый вопрос пишется отдельной строкой: время и сборка, тип вопроса, хэш состояния, ответ с полным набором вероятностей, задержка, стоимость и человеческая метка, которую заполняют позже.
Двести меток можно собрать за полдня из старых решений: маршрутизированных тикетов, вердиктов ревью, заметок триажа. Историческое решение становится меткой. Затем считаются точность и калибровка. Откалиброванная модель, говоря «70-80%», оказывается права примерно в 75% случаев из этой корзины. Если локальная модель уверена на 90% и права в 60%, пороги придется пересматривать. Пороги 0.85/0.60 из первой сборки служат заглушкой, реальные берутся из лога.
Для работы с разметкой есть локальный стенд jevals (npx jevals) с историей прогонов, а на jevals.com опубликованы публичные результаты: 31 500 размеченных людьми решений по семи моделям.
Еще автор дает промпт для любого кодового агента: найти в проекте места, где код регулярно выбирает из небольшого набора вариантов, оценивает что-то по шкале или отвечает да/нет через вызов LLM, регулярку или ручные if/else. Для каждого места агент указывает файл и функцию, само решение, типизированные вопросы, состояние, число вызовов в день и цену ошибки, без предложений по рефакторингу.
С чего начать
Без Mac проще всего стартовать с первой сборки. Если данные не должны покидать машину, подойдут вторая или третья. Нужен контекст 32K, значит пока только облачный Jev. Для браузерной автоматизации берите четвертую сборку поверх третьей. При тысячах вызовов в день, когда все упирается в цену, связка третьей и пятой. Чтобы просто разобраться, хватит первой и пятой.
Подводные камни
Choice ограничен 255 вариантами, для больших наборов понадобится дополнительный этап. Retrieval остается на вашей стороне. Локальные «Jev-совместимые» серверы, которые просят обычную LLM выдать вероятности в JSON, с логитами напрямую не работают, их стоит прогнать через пятую сборку до того, как доверять порогам. Задержки вендора измерены с западного побережья США, для планирования лучше брать p95 из jevals. По публичным доскам jevals на порядковых шкалах (Score) ни одна модель пока уверенно не обходит случайное угадывание.
После выходных автор советует задать логу три вопроса: где изгибается кривая уверенности, какой тип вопросов проваливается и сколько обойдется месяц работы на фоне того, что Jev заменяет. Если ответы устраивают, одну сборку можно выводить в прод за порогом и с эскалацией на человека, остальные оставить для A/B.