SelfJev — модель принятия решений на своём сервере с Jev-совместимым API

· 7 мин чтения
decision-models llm self-hosted fine-tuning python
📂 Исходный код на GitHub

Модель принятия решений selfjev-4b с Jev-совместимым API: Python SDK, сервер, дообучение и RLCD для self-hosted запуска

SelfJev — модель принятия решений на своём сервере с Jev-совместимым API

SelfJev — это открытая модель принятия решений, которую вы запускаете у себя. Проект даёт 4B-модель, сервер и Python SDK: вы задаёте вопросы к тексту, а получаете типизированные ответы с вероятностями. Ответ не генерируется словами — модель сразу оценивает варианты. Облака SelfJev нет, вся инфраструктура остаётся на вашем GPU.

Три основных сценария из README:

  • маршрутизация обращения — за один проход по сообщению клиента определить тему, выбрать нужную команду и проставить теги;
  • проверка ответа ИИ — проверить, на чём основаны утверждения, оценить ответ по вашим критериям, пометить нарушение политики;
  • применение своих правил к документу — спрашивать про допустимость, исключения, недостающие доказательства и обязательные действия.

Один текст — много вопросов

Четыре типа ответа закрывают то, что нужно приложению:

Что нужно узнать Тип в API Что возвращается
Нужен ли возврат? Noul вероятность «да»
Какая команда займётся? Choice один выбранный вариант и вероятности по всем
Насколько срочно? Score позиция на вашей упорядоченной шкале
Какие темы упомянуты? Multi все выбранные варианты и их вероятности

Вопросы, варианты и критерии задаёте вы. SelfJev оценивает их по вашему тексту. Несколько вопросов можно отправить одним запросом — тогда вычисление по документу переиспользуется.

Запуск сервера

SelfJev работает по схеме self-hosted: вы поднимаете сервер модели на своём GPU, приложение общается с ним по HTTP.

На Linux с NVIDIA GPU и Python 3.12+:

pip install "selfjevai-sdk[serve,gpu]"

# Choose your own server secret; use the same value in the client.
export SELFJEV_API_KEYS="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')"
selfjev serve --host 0.0.0.0 --port 8000

При первом старте скачивается vision-адаптер selfjev-4b (230 МБ, текст и картинки) и закреплённая версия базы Qwen3.5-4B с Hugging Face. Флаг --adapter подключает другой адаптер — например, ваше дообучение.

Практичная стартовая конфигурация — NVIDIA GPU на 24 ГБ, 16–32 ГБ оперативной памяти и 50 ГБ свободного места на диске. Это не измеренный минимум: расход памяти зависит от длины текста, числа вопросов и параллельности запросов.

На карте на 8 ГБ (класс RTX 4060) есть предквантованный 4-битный чекпоинт (3,3 ГБ): selfjev serve --quantized-model Jwuthrich/selfjev-4b-vision-4bit. Точность примерно на 1 пункт ниже bf16 на Decision Bench, тексты работают до 16K токенов. 8-битная сборка требует около 10 ГБ для длинных текстов.

Установка Для чего
pip install selfjevai-sdk только клиент (httpx + pydantic, без torch)
pip install "selfjevai-sdk[serve,gpu]" сервер модели (gpu — быстрые ядра для Linux CUDA)
pip install "selfjevai-sdk[train]" команды selfjev finetune и selfjev rlcd
pip install "selfjevai-sdk[deploy]" команда selfjev deploy aws

Разворачивание на Docker, AWS, Runpod и GCP описано в гайде по развёртыванию.

Два способа подключиться

Если ваш код уже написан под Python SDK TypeSafe (typesafe-sdk), он заработает против вашего сервера без изменений — достаточно поменять две переменные окружения:

export TYPESAFE_BASE_URL="http://your-selfjev-host:8000"
export TYPESAFE_API_KEY="the key you set in SELFJEV_API_KEYS"

Запросы к модели jev-latest обслуживает selfjev-4b. client.models.list(), ошибки и повторные запросы ведут себя так же, как у Jev. Также обслуживается путь OpenRouter для решений (/api/alpha/decisions).

Второй способ — клиент selfjev. Он добавляет тип Multi (выбрать всё подходящее) и API дообучения:

from selfjev import Choice, Multi, Noul, SelfJev

client = SelfJev(
    base_url="http://your-selfjev-host:8000",
    api_key="the key you set in SELFJEV_API_KEYS",
)

result = client.system_one(
    state="I was charged twice. Please refund the duplicate payment.",
    questions={
        "refund": Noul("Does the customer want a refund?"),
        "team": Choice(
            "Which team should handle this?",
            {
                "billing": "payments and refunds",
                "support": "technical issues",
            },
        ),
        "topics": Multi(
            "Which topics are mentioned?",
            {
                "payment": "a payment or charge",
                "refund": "a refund request",
                "login": "an account access problem",
            },
        ),
    },
)

print(result.nouls["refund"].noul)  # Probability of yes
print(result.choices["team"].choice)  # Selected team
print(result.multis["topics"].multi)  # Selected topics

AsyncSelfJev даёт тот же интерфейс с await, а вместо аргументов работают переменные SELFJEV_BASE_URL и SELFJEV_API_KEY. Подробности — в описании запросов, ответов и аутентификации.

Как устроена модель

SelfJev-4B — это Qwen3.5-4B плюс обученный LoRA-адаптер ранга 64. Дерево общего префикса переиспользует вычисления по документу и вопросам, а ветки ответов держит раздельными. Каждый вариант оценивается при виде альтернатив, и из этих оценок складываются типизированные ответы выше.

По умолчанию работает TreeServer — он исполняет это дерево напрямую. Движок vLLM использует полный сведённый чекпоинт и собственный кэш префикса. Скорость зависит от нагрузки. Подробнее — в описании архитектуры.

Замеры

Текущий SelfJev-4B на TreeServer против Jev на тех же вопросах:

Что проверяли Вопросов SelfJev-4B Jev
Текстовые решения 1 991 95,7% 97,2%
Проверка ответов ИИ 946 93,1% 92,5%
Более широкие текстовые задачи (бенчмарк разработки) 3 471 83,8% 82,7%

Точность здесь — совпадение с ожидаемым ответом; в вопросах «выберите всё» должен совпасть весь набор. Это оценки проекта, а не универсальный рейтинг моделей. Метки для первых двух наборов создавал ИИ и проверял ИИ, и эти наборы влияли на решения исследователей. Более широкий бенчмарк переиспользовался в разработке. Свежей независимой выборки для проверки пока нет.

Сравнение с открытыми Jev-подобными моделями

Замер от 30 сентября 2026 года: восемь открытых моделей с Hugging Face и SelfJev запускались с рекомендованными настройками из карточки на одном GPU (NVIDIA L40S) и получали ровно те запросы, которые получает Jev от TypeSafe. Запрос, который модель не может обработать, считается ошибкой.

Модель Размер Текстовые решения Проверка ответов ИИ Картинки вне обучения Текстовые решения, время (с)
Jev 1.13 (эталон, платный API) ? 97,2 92,5 — —
openjev 27B 96,8 92,6 82,6 753
SelfJev-4B Vision 4B 94,7 90,7 85,1 100
jpt-4b 4,5B 92,5 85,0 83,8 90
imajev-4b 4B 91,5 84,9 85,2 489
kev-4b 4B 88,4 74,7 — 109

Две оговорки из README. Другие модели не обучались на этих наборах, но наборы написаны теми же авторами и судьями, что и обучающие данные SelfJev, поэтому наборы скорее играют в пользу SelfJev. И все модели получали одинаковые вопросы в формате Jev: «выберите всё» разбивалось на отдельные вопросы да/нет. Это стоит SelfJev 1,4–1,8 пункта против его родной оценки.

SelfJev — самая точная открытая модель среди моделей до 4,5B параметров на обоих наборах (парные тесты, p ≤ 0,023). На картинках, которых не было в обучении, он равен imajev-4b, а 27B openjev выше на текстовых решениях.

Веса и датасет

Релиз Что внутри Где взять
SelfJev-4B Vision адаптер 230 МБ для текста и картинок, база качается отдельно; основной с 30 сентября 2026 Hugging Face
SelfJev-4B адаптер 230 МБ только для текста Hugging Face
SelfJev-4B merged 9,32 ГБ полных весов текстовой версии плюс токенизатор и конфигурация Hugging Face
Decision Bench 3 657 вопросов, ожидаемые ответы, происхождение данных и скрипт подсчёта Hugging Face

Decision Bench включает Text Decisions, AI Response Review и меньший набор Record Reasoning. Каждая карточка релиза документирует происхождение данных, назначение и текущие условия лицензии.

Дообучение под свои правила

Модель адаптируется к вашему словарю, политикам и пограничным случаям на своих размеченных примерах:

uv run selfjev finetune --data my_train.jsonl \
  --out runs/mine --init Jwuthrich/selfjev-4b-vision

Команда selfjev rlcd добавляет обучение, нацеленное на калибровку вероятностей. Дообучение можно запускать и по HTTP через selfjev serve --fine-tuning. Подробности — в гайде по дообучению.

Статус проекта

SelfJev — независимый проект, который реализует Jev-совместимый интерфейс. Он не связан с TypeSafe или Qwen. Происхождение данных обучения, включая использование вероятностей Jev как сигнала-учителя, описано в карточке модели.

Источник: https://github.com/jwuthri-cloud/SelfJev