
Все кому не лень говорят о Jev. Jev тут, Jev там. Все в Twitter только и говорят о Jev, что это следующее достижение больших языковых моделей и парадигмы ИИ. Мы в этом не уверены. Поэтому вот Jev за 25 строк на Python.
Загрузим модель.
# /// script # requires-python = ">=3.12" # dependencies = ["huggingface-hub", "llama-cpp-python", "numpy"] # /// import numpy from llama_cpp import Llama # Really, you can use any GGUF model from https://huggingface.co/models?library=gguf model = Llama.from_pretrained( repo_id="Qwen/Qwen3-0.6B-GGUF", filename="Qwen3-0.6B-Q8_0.gguf", n_ctx=512, logits_all=True, verbose=False, )
Подготовим промпт и укажем варианты.
labels = ["A", "B", "C"] choices = ["Legitimate", "Spam", "Phishing"] email = "Payroll asks for your password on a non-company sign-in page." options = "\n".join( f"{label}. {choice}" for label, choice in zip(labels, choices, strict=True) ) prompt = f"""<|im_start|>system Choose one option.<|im_end|> <|im_start|>user Email: {email}\n\n{options}<|im_end|> <|im_start|>assistant <think>\n\n</think>\n\n""" model.eval(tokens=model.tokenize(text=prompt.encode(), add_bos=False, special=True))
Выжмем из логитов вероятности. (прим. перев.: логиты — сырые, ненормированные оценки для каждого варианта ответа).
logits = model.scores[model.n_tokens - 1] token_ids = [model.tokenize(text=label.encode(), add_bos=False)[0] for label in labels] choice_logits = numpy.asarray([logits[token_id] for token_id in token_ids]) logprobs = choice_logits - numpy.logaddexp.reduce(choice_logits) probabilities = numpy.exp(logprobs) for name, scores in ( ("Logits", choice_logits), ("Log probabilities", logprobs), ("Probabilities", probabilities), ): values = numpy.round(scores.astype(float), 3).tolist() print(f"{name}:", dict(zip(choices, values, strict=True))) # Logits: {'Legitimate': 26.254, 'Spam': 27.262, 'Phishing': 29.614} # Log probabilities: {'Legitimate': -3.482, 'Spam': -2.474, 'Phishing': -0.122} # Probabilities: {'Legitimate': 0.031, 'Spam': 0.084, 'Phishing': 0.885}
Вот. Это и есть Jev.
Но нет, вы не понимаете Jev!
Да, мы в курсе.
Мы не называем это моделью решений System One.
Мы не вызывали API.
Мы не создавали тонны синтетических данных.
Мы не обучали модель методом обучения с подкреплением для калиброванных решений (Reinforcement Learning for Calibrated Decisions, RLCD), чтобы откалибровать решения и вероятности (хотя они и не всегда правильные).
Но да. Это и есть Jev.
Он классифицирует: получает промпт с вариантами и возвращает вероятности.
Он быстрый.
Он локальный.
Ваши данные никуда не отправляются.
А нам нравится никуда не отправлять ваши данные. Попробуйте NobodyWho.
(заметка: это пародийный пост, вот ссылки на более полные открытые реализации Jev: OpenJev, openjev-sglang и OpenJev on DiffusionGemma.)
Всё, что делает NobodyWho, — опенсорс, поставьте нам звезду на GitHub, чтобы поддержать нас ❤️
Опубликовано 22 сентября 2026 года, автор — Duarte O.Carmo
Комментарии (7)

Jiablero
24.09.2026 05:23Делал ровно то же самое, получил ускорение на llm классификаторе на gemma 4 e4b в 3.5 раза (input 500-700 токенов/output 150-200 (в generative варианте)) на vllm.
Я бы на месте автора провел тест согласованность выборов модели на одной задаче в генеративном и логит варианте.
Также бы проверил как влияет перестановка вариантов местами в промпте (мой опыт 22% изменений ответов, при смене порядка выдачи вариантов модели на той же e4b). ChatGPT объясняет это instructed обучением, и тяготением к первому выбору, но я пока не осмысливал и не проверял.

Bardakan
24.09.2026 05:23Jev - это llm пустили под нож, чтобы ускорить работу и удешевить токены. А вы в своем примере используете обычную llm, обернутую в python код. Т.е. никакой речи об экономии или быстрой работе нет и быть не может. Тогда в чем посыл вашей статьи?

wingerv
24.09.2026 05:23Тут большая фундаментальная ошибка. Логиты это совсем другие вероятности, это совсем не вероятность классификации, это просто показывает уверенность модели при генерации последовательности токенов (условно, что одна буква должна следовать за другой).

Jiablero
24.09.2026 05:23Для этого делают софтмакс, словарь токенов надо ограничить вариантами выбора, считая все остальное в -бесконечность. Получается нормированное распределение по вариантам ответа. Т.е. сама задача выбора одного (единственного) токена в ограниченном словаре вариантов ответов и делает вероятность предсказания следующего токена распределением по вариантам ответа.

Andreas_Fogel
24.09.2026 05:23Чуваки вы угараете это обычная интент задача распознавания запроса, ее через парсер даже можно решить, она будет просто в 1 секунду ответ давать. Я получается этого Jev еще в 2024 сделал. Ну и отлично.

Bonus2k
24.09.2026 05:23>Загрузим модель
>Qwen3-0.6B
Смешная шутка. Осталось это только на VDS развернуть.
Robastik
Звезду в Carmo за опенсорс)