Загрузка модели

# /// 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 на DiffusionGemma.