SelfJev — модель принятия решений на своём сервере с Jev-совместимым API
📂 Исходный код на GitHubМодель принятия решений selfjev-4b с Jev-совместимым API: Python SDK, сервер, дообучение и RLCD для self-hosted запуска
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