Kev-9B
Сводка по модели
Kev-9B — это модель принятия решений. Она читает один документ (состояние) и набор типизированных вопросов о нём и возвращает калиброванное распределение вероятностей по вариантам, приложенным к каждому вопросу, за один прямой проход и без генерации текста. Она предназначена для разработчиков, которые классифицируют, маршрутизируют, сортируют или проверяют документы и которым нужны вероятности, пригодные для порогов, — например, чтобы отправлять неуверенные случаи на проверку человеком. Она реализует публичный API System One от TypeSafe (POST /v1/systemone), поэтому TypeSafe SDK работает с ней без изменений. Это LoRA-адаптер и указательная голова на Qwen3.5-9B-Base, помещающиеся на одну GPU класса 24 ГБ. Эта карточка описывает версию 2, выпущенную 2026-09-30 и включённую в Kev 1.0.
Детали модели
| Разработчик | Jared Palmer (github.com/jaredpalmer/kev) |
| Тип модели | Модель принятия решений: бэкбон каузальной языковой модели, работающий только на prefill, с указательной головой по вариантам |
| Бэкбон | Qwen/Qwen3.5-9B-Base (ревизия 68c46c4b): 32 слоя, 24 Gated DeltaNet (линейное внимание) и 8 полного внимания, размер скрытого слоя 4 096; заморожен |
| Адаптер | LoRA, ранг 16, α 32, на проекциях внимания, MLP и DeltaNet (45.4M параметров) |
| Голова | Указательная голова: две проекции оценивают закрывающий токен каждого варианта против финального токена вопроса; softmax даёт вероятности |
| Точность вычислений | Обучение с bf16-автокастом поверх весов fp32; обслуживание в bf16 (адаптер сливается с базой при загрузке); оценка в fp32 |
| Контекст | Обслуживаются состояния до 65 536 токенов, плюс как минимум 8 192 токена на вопрос. Обучающие состояния были не длиннее 7 552 токенов. |
| Проверенная длина контекста | 8 192 токена (см. «Длинные документы») |
| Калибровка | Одна температура, T = 2.19, хранится в head.pt и применяется при загрузке |
| Языки | Английский |
| Лицензия | Apache-2.0 (адаптер и голова); базовая модель — Apache-2.0 |
| Версия | v2 (Kev 1.0): main из jaredpalmer/kev-9b, ревизия b5d8c18e (выпущена 2026-09-30) |
| Предыдущая версия | v1, тот же рецепт без стадии документов и навыков (T = 2.30), на теге v1; её карточка — это README на том теге |
Вход. Состояние (текст либо объект или массив JSON, отрендеренный как размеченный текст) и любое число именованных вопросов, каждый из которых одного из трёх типов:
| Тип | Варианты | Выход |
|---|---|---|
choice |
1–255 именованных вариантов, каждый с необязательным описанием | вероятность на вариант, наиболее вероятный вариант и уверенность |
score |
1–255 упорядоченных уровней | вероятность на уровень и ожидаемый индекс уровня |
noul |
да / нет, с необязательными описаниями | вероятность «да» |
Каждый вопрос отвечается как отдельная строка, продолжающая общее состояние, поэтому вопросы не могут влиять друг на друга; состояние вычисляется один раз и кэшируется.
Назначение
- Типизированные решения по документам в несколько тысяч токенов: классификация, маршрутизация, сортировка, выбор при извлечении, проверки политик и права на участие, а также оценка предложенного ответа по изложенным критериям.
- Рабочие процессы, которые действуют по уверенности: автоматизировать уверенные случаи и ставить в очередь остальные, с порогами, зафиксированными на размеченной выборке собственной нагрузки пользователя.
- Самостоятельно размещённая замена эндпоинта System One на одной GPU класса 24 ГБ и отправная точка для дообучения на собственных метках пользователя (
kev.train --init_from jaredpalmer/kev-9b).
Использование вне охвата
- Генерация текста, чат, суммаризация или ответы на открытые вопросы. Модель только оценивает предложенные ей варианты.
- Полностью автоматические решения с юридическими, медицинскими, финансовыми, кадровыми или подобными последствиями для людей, без проверки человеком.
- Вопросы, ответ на которые зависит от фактов, которых нет ни в состоянии, ни в общих знаниях, и экзамены, требующие больших знаний (см. «Ограничения»).
- Арифметика дат с точностью до дня без препроцессора
KEV_DATE_FACTS=1, состояния длиннее 65 536 токенов и языки, кроме английского.
Как использовать
Запустите её из репозитория Kev. На CUDA она работает в bf16 со слитыми ядрами DeltaNet и CUDA-графами (одна L40S или H100; резидентно около 22 ГБ); на Apple Silicon та же команда обслуживает её через MLX, что выбирается автоматически.
git clone https://github.com/jaredpalmer/kev.git && cd kev && uv sync --extra serve
uv run --extra serve python -m kev.serve --run jaredpalmer/kev-9b --port 8008 # v2, Kev 1.0 (this card)
uv run --extra serve python -m kev.serve --run jaredpalmer/kev-9b@v1 --port 8008 # v1
from typesafe_sdk import Choice, Noul, TypeSafeClient
client = TypeSafeClient(api_key="local", base_url="http://127.0.0.1:8008", model="kev-latest")
response = client.system_one(
state="I was charged twice for order 1182. Please refund one of the charges.",
questions={
"team": Choice(instructions="Which team should handle this?",
criteria={"billing": "Charges and refunds", "shipping": "Deliveries", "returns": "Exchanges"}),
"urgent": Noul(instructions="Does this need a reply today?"),
},
)
print(response.choices["team"].choice, response.nouls["urgent"].noul)
Калиброванная температура применяется по умолчанию; KEV_TEMPERATURE=1.0 возвращает сырые вероятности. KEV_DTYPE=fp32 выбирает точный путь, используемый для оценки. KEV_DATE_FACTS=1 дописывает число дней между каждой парой дат, найденных в состоянии, — модель обучена это использовать. Состояние свыше 65 536 токенов отклоняется с 422, где указано число его токенов.
Обучающие данные
| Этап | Записи | Содержание и метки |
|---|---|---|
Базовый рецепт (decision-v7) |
12 576 | 10 000 записей из десяти публичных наборов данных для классификации (по 1 000, перечислены в метаданных этой карточки) с их родными метками; 896 сгенерированных минимальных пар политик по девяти семействам шаблонов; 1 680 записей из 60 случайно сгенерированных структур правил в четырёх рендерингах; метки вычислены кодом |
| Даты и отсутствующие доказательства | 1 425 | Сгенерировано: 900 кейсов политик с датами (обычные, с предложением-счётчиком дней или с полем date_facts); 255 кейсов с удалённым решающим предложением и равномерной целью, плюс 270 нетронутых контролей |
| Документы и навыки, одна стадия | 16 539 | documents-v1 train: 5 219 повествований о потребительских финансовых жалобах США (CFPB, до ~7k токенов) с 7 488 вопросами, метки сохранялись там, где два открытых учителя согласились с собственной подачей потребителя. hard-v1 train: 6 000 программно размеченных записей в семи семействах навыков (длинные политики, компромиссы, вероятность, многошаговые рассуждения, даты и арифметика, оценка предложенного ответа, воздержание при недостающем факте), шаблоны 0–3. devtools-v1 train: 5 320 записей из CodeReviewer, CommitPackFT, FlakeFlagger и Aegis с собственными метками каждого датасета |
Две стадии дообучения проигрывают заново 2 000 и 10 000 записей из decision-v7. Ни один выход Jev (хостируемой модели принятия решений от TypeSafe) не использовался. CodeReviewer и FlakeFlagger взяты из Zenodo; повествования CFPB — это произведения правительства США; лицензии и ревизии по каждому источнику зафиксированы в манифестах наборов. Наборы только для оценки ниже (breadth-v1, tasksource-heldout-v1, transfer-v4, longdoc-v1, а также источники When2Call и prompt-инъекций из devtools-v1) в обучение не входят.
Процедура обучения
- Базовый рецепт. Две эпохи на
decision-v7от базы: LoRA ранга 16, α 32; скорость обучения 5e-5, расписание one-cycle; эффективный батч 8 (4 × накопление 2); bf16-автокаст, gradient checkpointing. Лосс — кросс-энтропия по вариантам каждого вопроса. Порядок вариантов перемешивается, варианты «none of the above» и дистракторы вставляются случайно, а четверть записей choice дополнительно даёт минимальную пару (вопрос с вариантом «none of the above», один раз с присутствующим верным вариантом и один раз с удалённым). - Даты и отсутствующие доказательства. Одна эпоха от стадии 1 при скорости обучения 2e-5 с 2 000 проигранных заново записей. Это v1.
- Документы и навыки. Одна эпоха от v1 на всех трёх обучающих наборах вместе при скорости обучения 2e-5 с 10 000 проигранных заново записей; батч 2 × накопление 4; состояния не длиннее 7 552 токенов; seed 1; 3 318 шагов оптимизатора.
- Калибровка. Одна температура, T = 2.19, минимизирующая отрицательное логарифмическое правдоподобие на 648 вопросах из отложенных наборов данных: 448 из калибровочного сплита transfer-r3 (шесть публичных наборов данных, QNLI, SciQ, TweetEval-offensive, PAWS, MMLU и Emotion, плюс два отложенных семейства сгенерированных записей политик) и 200 вопросов MMLU-Pro (transfer-v9 development). Пул был проверен против обучающих наборов чекпойнта до подгонки.
Оценка
Методология. Каждое сравнение идёт против Kev-9B v1 на идентичных элементах, каждая модель при своей обслуживаемой температуре (v1: 2.30). Сравнения и их планки были зарегистрированы до подтверждающих чтений; тестовые партиции читались один раз для этого чекпойнта; тест transfer-v4 закрыт (читается один раз на кандидата). Парные интервалы — это 95 % бутстрэпы с пересэмплированием целых записей (2 000 пересэмплов), поэтому вопросы, делящие одно состояние, движутся вместе. Различия даны в процентных пунктах (п.п.). Jev (хостируемая модель TypeSafe, запрашиваемая через Vercel AI Gateway) показан там, где он читался на тех же элементах. Наборы:
- breadth-v1: 14 отложенных публичных наборов данных в пяти областях (знания, язык, поиск, инструменты, искусство), обучение на них не велось.
- transfer-v4: решения вне домена из шести никогда не обучавшихся публичных источников плюс отложенные структуры политик и правил.
- transfer-r3: панель коротких состояний из тех же восьми отложенных источников, что и калибровочный пул.
- hard-v1: семейства навыков выше; тестовый сплит удерживает шаблоны тренированных генераторов.
- devtools-v1: решения по инструментам разработчика из шести источников с проверенной лицензией (четыре обучались, два только для оценки).
- documents-v1 / documents-v2: повествования о жалобах CFPB; v2 — закрытый отложенный тестовый набор.
- longdoc-v1: коммерческие контракты CUAD и сгенерированные пакеты соглашений с состояниями от 4k до 64k токенов.
Ключевые панели devtools-v1 исключают две задачи, чьи метки состояние не определяет (flakeflagger, тип изменения коммита); одни и те же строки уходят с обеих сторон.
Результаты против v1 (зарегистрированное подтверждение).
| Панель (вопросы) | Kev-9B v2 | Kev-9B v1 | Δ [95 % CI] |
|---|---|---|---|
| development hard-v1 + devtools-v1, audited (1 855) | 0.821 | 0.628 | +19.3 [+17.2, +21.6] |
| development documents-v1 (920) | 0.902 | 0.833 | +7.0 [+4.8, +9.2] |
Короткие состояния: development transfer-v4 + тест transfer-r3, без emotion (1 586) |
0.871 | 0.871 | +0.1 [−1.1, +1.2] |
| тест hard-v1 + devtools-v1, audited (1 859) | 0.822 | 0.635 | +18.7 [+16.7, +20.8] |
| тест documents-v1 (936) | 0.900 | 0.829 | +7.1 [+4.7, +9.2] |
| Вне домена, закрытый тест transfer-v4 (656): точность | 0.852 | 0.852 | +0.0 [−1.7, +1.8] |
| закрытый тест transfer-v4: обслуживаемый Brier | 0.199 | 0.224 | −0.025 [−0.047, −0.007] |
Отложенные данные (обучение не велось).
| Панель (вопросы) | Kev-9B v2 | Kev-9B v1 | Jev |
|---|---|---|---|
| development breadth-v1, все 14 наборов (3 075) | 0.700 | 0.697 | 0.757 |
| тест breadth-v1, все 14 наборов (3 089) | 0.698 | 0.692 | 0.757 |
| тест breadth-v1, индекс со случайной поправкой¹ [95 % CI] | 41.0 [38.8, 43.9] | 40.0 [38.1, 43.0] | 54.0 [51.2, 57.0] |
| Вне домена, development transfer-v4 (656): точность / Brier | 0.820 / 0.262 | 0.822 / 0.264 | 0.857 / 0.211 |
| закрытый тест transfer-v4: ECE / уверенные ошибки (p ≥ 0.9 и неверно) / покрытие при ошибке ≤ 5 % | 0.034 / 1.4% / 0.742 | 0.042 / 3.2% / 0.645 | – |
| Короткие состояния, тест transfer-r3 (1 150) | 0.847 | 0.847 | – |
| MMLU-Pro, 10 вариантов (transfer-v9 development) | 0.590 | 0.515 | 0.840 |
| Неотвечаемые элементы, на которые дан ответ с p ≥ 0.9 (меньше — лучше) | 0.00 | 0.00 | 0.09 |
Против v1 разница точности на breadth-v1 составляет +0.3 [−0.7, +1.3] на development и +0.6 [−0.4, +1.6] на тесте. development tasksource-heldout-v1 был прочитан для этого чекпойнта, но его чтение не завершено; здесь он не приводится.
Тренированные семейства (отложенные элементы и шаблоны).
| Панель (вопросы) | Kev-9B v2 | Kev-9B v1 | Jev |
|---|---|---|---|
| development hard-v1 (1 083) / тест (1 088) | 0.813 / 0.834 | 0.574 / 0.584 | 0.777 / – |
| development devtools-v1 (1 072) / тест (1 071), все источники | 0.772 / 0.791 | 0.631 / 0.637 | 0.713 / – |
| development documents-v1 (920) / тест (936) | 0.902 / 0.900 | 0.833 / 0.829 | 0.868 / – |
| documents-v2, закрытый отложенный тест (953) | 0.900 | 0.821 | – |
| development decision-v7 (1 264) / закрытый тест (1 200) | 0.874 / 0.873 | 0.872 / – | 0.845 / – |
| Отложенные домены сгенерированных решений, ood-v2 (4 988) | 0.889 | – | – |
Различия на тесте против v1: hard-v1 +25.0 [+22.0, +28.1], devtools-v1 (все источники) +15.4 [+11.0, +19.4], documents-v2 +8.0 [+5.9, +10.2].
Длинные документы.
- Проверенная длина контекста: 8 192 токена, обученная длина. Бин 16k выходит за допуск: его нижняя граница −3.7 п.п., ниже −3 п.п., поэтому более длинные длины не проверены.
- Правило, зафиксированное до чтения: проверенная длина — это номинальный размер наибольшего бина от 16 384 токенов и выше, такого что он и каждый бин между ним и 8 192 остаются в допуске. В допуске значит, что разница точности на CUAD относительно бина 8k (состояния в 6 553–7 618 токенов, обученная длина), спаренная по одному и тому же контракту, повторам и вопросу, имеет 95 % нижнюю границу не ниже −3 п.п., и на каждую запись был дан ответ. Если бин 16k провален, проверенная длина — 8 192 токена.
Точность CUAD, ECE и парная разница относительно бина 8k по номинальной длине состояния (longdoc-v1 development):
| Номинальная длина состояния | Вопросы CUAD | Точность | ECE | Δ относительно 8k, п.п. [95 % CI] |
|---|---|---|---|---|
| 4k | 443 | 0.876 | 0.049 | – |
| 8k | 453 | 0.850 | 0.051 | эталон |
| 16k | 452 | 0.839 | 0.033 | −1.4 [−3.7, +0.9] |
| 32k | 454 | 0.819 | 0.041 | −3.6 [−6.4, −0.9] |
| 64k | 452 | 0.801 | 0.056 | −5.2 [−7.9, −2.5] |
ECE при поставляемой T = 2.19. Δ спарена по 445–447 вопросам, заданным об одних и тех же контрактах на обеих длинах. Бин 4k содержит другие контракты и не является эталоном для правила. Источник: runs/r28-readout/context.json (зарегистрированное чтение раунда 28, runs/r29-9b-r18a-longdoc).
Калибровка (expected calibration error, ECE, как обслуживается; меньше — лучше):
| Панель | Kev-9B v2 (T = 2.19) | Kev-9B v1 (T = 2.30) |
|---|---|---|
| тест breadth-v1, все 14 наборов | 0.034 | 0.044 |
| development transfer-v4 / закрытый тест | 0.041 / 0.034 | 0.042 / 0.042 |
| тест hard-v1 | 0.054 | 0.075 |
| тест devtools-v1, все источники | 0.098 | 0.147 |
| тест documents-v1 | 0.017 | 0.103 |
90 % бутстрэп-интервал температуры — [2.05, 2.41]. Температура v1 2.30 была подогнана на девелоперских строках её собственного обучающего распределения; v2 — первая 9B, обслуживаемая при температуре, подогнанной на отложенных наборах данных.
Прочие результаты.
| Набор | Kev-9B v2 | Jev |
|---|---|---|
Арифметика дат, политика deadline (transfer-v9 development) |
0.725 | 0.95 |
| MMLU, 4 варианта (transfer-v9 development) | 0.725 | 0.90 |
| SemIf (144 авторских решения; близко к насыщению, приводится только для сведения) | 0.917 | 0.965 |
Обслуживание. CUDA, bf16 со слитыми ядрами и CUDA-графами; время модели на запрос (медиана из 20) для нового / повторного состояния, измеренное на v1 (та же архитектура и форма адаптера):
| GPU | 6 вопросов, короткое состояние | 5 вопросов, состояние в 2 200 токенов | Запросов/с, 64 клиента |
|---|---|---|---|
| L40S | 66.4 / 42.7 мс | 235.6 / 57.5 мс | 32.7 |
| H100 | 24.0 / 16.6 мс | 88.5 / 26.4 мс | 79.5 |
Резидентная память GPU — 21.9 ГБ. Обслуживаемые вероятности держатся в пределах 0.017 от пути оценки fp32 на 280 вопросах, без изменённых ответов. На пути оценки fp32 (H100, v2) состояния в 16k / 32k / 64k токенов занимают 5.1 / 10.9 / 25.4 с и 4.6 / 9.1 / 18.2 ГиБ сверх весов.
Apple Silicon (MLX): измерения длинных состояний, сделанные для Kev-0.8B и Kev-4B, на этом размере не проводились; на 32 ГБ M5, использованном для них, бэкбон bf16 на 19.3 ГБ и его рабочий набор не поместились в доступную память.
¹ Индекс со случайной поправкой из community Decision Index 0.2: по каждому набору (score − chance) / (1 − chance), усреднённый внутри каждой области, затем 100 × среднее по пяти областям. Индекс Jev — из отдельного чтения тех же тестовых элементов.
Ограничения и компромиссы
- Отбор. Этот чекпойнт был обучен и прочитан на девелоперских данных в более раннем раунде и пересмотрен по более позднему правилу с известными этими числами. Тестовые партиции и закрытое чтение, каждое прочитанное для него по одному разу, служат защитой; считайте девелоперские запасы оптимистичными.
- Её большие приросты — в распределении. Обучающие сплиты hard-v1, devtools-v1 и documents-v1 входят в её обучающие данные; эти приросты — отложенные элементы и шаблоны тренированных семейств, а не перенос на новые задачи.
- На новой работе она не лучше v1. тест breadth-v1 +0.6 п.п. [−0.4, +1.6], development transfer-v4 −0.2 п.п. [−2.4, +1.8], тест transfer-r3 +0.0 п.п. [−1.2, +1.2]. Kev-27B опережает её на 11 пунктов по индексу breadth-v1, Jev — на 13.
- Знания задаются базой. MMLU-Pro — 0.590 против 0.675 у Kev-27B и 0.840 у Jev.
- Арифметика дат — её самое слабое семейство: 0.725 на вопросах политики
deadlineпротив 0.95 у Jev; препроцессорKEV_DATE_FACTS=1помогает. - Калибровка. devtools-v1 — её наименее калиброванный набор (тест ECE 0.098). Интервал температуры — [2.05, 2.41]. Температура была записана в
head.ptиз зарегистрированной подгонки по пулу с зафиксированной причиной, потому что скрипт калибровки не может перечислить источники объединённого обучающего файла, чтобы перепроверить сам пул; проверка самого раунда это покрывала. Эта проверка не покрывает данные дат и отсутствующих доказательств v1, чей манифест не перечисляет источников; эти записи — четыре сгенерированных семейства, ни одно из которых не в пуле. - Необученные длины. Обучающие состояния были не длиннее 7 552 токенов. Более длинные состояния обслуживаются до 65 536 токенов; насколько сохраняется точность — это проверенная длина контекста выше.
- Порядок вариантов может изменить ответ; изоляция вопросов этого не предотвращает.
Смещения, риски и этические соображения
- Калиброванные вероятности могут создавать неоправданное доверие. Температура была подогнана на публичных отложенных наборах данных и не переносится на любой рабочий процесс; измерьте точность и калибровку на размеченной выборке собственных данных и перенастройте там температуру (
python -m kev.calibrate), прежде чем задавать пороги. - Точность и калибровка сдвигаются при смене домена. Следите за частотой ошибок в проде, а не полагайтесь на числа выше.
- Не используйте её для значимых автоматических решений о людях без проверки человеком. Смещения базовой модели и обучающих данных (включая метки, произведённые другими моделями) не измерены.
- Состояния могут содержать личные или конфиденциальные данные. Самостоятельный хостинг держит входные данные на вашей аппаратуре; сервер открыт, если не задан
KEV_API_KEY, поэтому применяйте собственный контроль доступа и политику обращения с данными.
Вычисления
- Базовый рецепт и стадия дат (v1): по одной GPU NVIDIA H100.
- Стадия документов и навыков: 2.6 часа на одной NVIDIA H200 (пик 74.1 ГБ).
- Проверки оценки и обслуживания: по одной GPU H100 / H200 / L40S на Modal.
Происхождение и воспроизводимость
- Код, наборы и отчёты об оценке: github.com/jaredpalmer/kev. Номера релиза:
runs/release/kev-9b-r27.json(scripts/release_numbers.py --release kev-9b-r27); зарегистрированное правило и вердиктыexperiments/rounds/r27.json,runs/r27-readout/,runs/r27-verdict/; чтения семейства от 2026-09-30runs/fam-9bnew-breadth/,runs/fam-9b-breadth/иruns/fam-breadth-test-report/; ood-v2runs/r29-9b-r18a-ood/; обслуживаниеruns/serve-9b-l40s/,runs/serve-9b-h100/,runs/long-state-9b-h100/. - Стадии: базовый прогон
q35-9b/01-trial-1(тегv7-base); датыnight2-9b-du/00-trial-0(v1, тегv1); документы и навыки, раунд 18, ветвь (a)r18-9b/00-trial-0(experiments/round18/joint.json), отобранная и подтверждённая как9b-r18aраунда 27. - Выпущенные веса: коммит Hub
b5d8c18e; sha256 адаптера2b2a70cf4ef4440b6c22899e1f72c2f8ea5c6f65b19aa344539b4b8971d1f13d, sha256head.pt8e1dab2c…(T = 2.1936). - Проверка: загруженная анонимно с Hub, она воспроизвела ответы предрелизной оценки на 252 из 252 строк SemIf и 764 из 764 строк development transfer-v4 при T = 2.19 (
runs/rel9-public/).
Цитирование
@misc{palmer2026kev9b,
title = {Kev-9B: a calibrated decision model on Qwen3.5-9B},
author = {Palmer, Jared},
year = {2026},
howpublished = {\url{https://huggingface.co/jaredpalmer/kev-9b}},
note = {Version 2, released 2026-09-30; Kev 1.0}
}
Контакты
Вопросы и проблемы: github.com/jaredpalmer/kev/issues.