Документация

Kev-0.8B

Сводка по модели

Kev-0.8B — это модель принятия решений. Она читает один документ (состояние) и набор типизированных вопросов о нём и возвращает калиброванное распределение вероятностей по вариантам, приложенным к каждому вопросу, за один прямой проход и без генерации текста. Она реализует публичный API System One от TypeSafe (POST /v1/systemone), поэтому TypeSafe SDK работает с ней без изменений. Это самый маленький Kev: LoRA-адаптер и указательная голова на Qwen3.5-0.8B-Base, которые работают на ноутбуке или GPU на 4 ГБ. Он предназначен для случаев, когда память или стоимость исключают большие размеры, а задача похожа на то, чему он обучался; вне домена он заметно менее точен, чем Kev-4B. Эта карточка описывает чекпойнт в составе Kev 1.0, впервые опубликованный 2026-09-24.

Детали модели

Разработчик Jared Palmer (github.com/jaredpalmer/kev)
Тип модели Модель принятия решений: бэкбон каузальной языковой модели, работающий только на prefill, с указательной головой по вариантам
Бэкбон Qwen/Qwen3.5-0.8B-Base (ревизия dc7cdfe2): 24 слоя, 18 Gated DeltaNet (линейное внимание) и 6 полного внимания; заморожен
Адаптер LoRA, ранг 16, α 32, на проекциях внимания, MLP и DeltaNet (11.3M параметров)
Голова Указательная голова: две проекции оценивают закрывающий токен каждого варианта против финального токена вопроса; softmax даёт вероятности
Точность вычислений Обучение с bf16-автокастом поверх весов fp32; обслуживание в bf16 (адаптер сливается с базой при загрузке); оценка в fp32
Контекст Обслуживаются состояния до 65 536 токенов, плюс как минимум 8 192 токена на вопрос. Обучающие состояния были не длиннее 7 552 токенов.
Проверенная длина контекста 8 192 токена (см. «Длинные документы»)
Калибровка Одна температура, T = 2.35, хранится в head.pt и применяется при загрузке
Языки Английский
Лицензия Apache-2.0 (адаптер и голова); базовая модель — Apache-2.0
Версия Kev 1.0: main из jaredpalmer/kev-0.8b, ревизия 9a45d25e (опубликована 2026-09-24)
Предыдущие версии Теги Hub night2-du-release и v7-base

Вход. Состояние (текст либо объект или массив JSON, отрендеренный как размеченный текст) и любое число именованных вопросов, каждый из которых одного из трёх типов:

Тип Варианты Выход
choice 1–255 именованных вариантов, каждый с необязательным описанием вероятность на вариант, наиболее вероятный вариант и уверенность
score 1–255 упорядоченных уровней вероятность на уровень и ожидаемый индекс уровня
noul да / нет, с необязательными описаниями вероятность «да»

Каждый вопрос отвечается как отдельная строка, продолжающая общее состояние, поэтому вопросы не могут влиять друг на друга; состояние вычисляется один раз и кэшируется.

Назначение

  • Типизированные решения, близкие к его обучающим семействам (классификация документов, маршрутизация, проверки политик по изложенным правилам), на аппаратуре, слишком малой для Kev-4B: ноутбук, L4 или GPU на 4 ГБ.
  • Отправная точка для дообучения на собственных метках пользователя, когда важна стоимость обучения (kev.train --init_from jaredpalmer/kev-0.8b).
  • Прототипирование под API System One перед переходом на больший Kev.

Использование вне охвата

  • Генерация текста, чат, суммаризация или ответы на открытые вопросы. Модель только оценивает предложенные ей варианты.
  • Маршрутизация вызовов инструментов (вызвать инструмент, запросить недостающий параметр или отказаться): её точность When2Call ниже случайной (см. «Ограничения»).
  • Полностью автоматические решения с юридическими, медицинскими, финансовыми, кадровыми или подобными последствиями для людей, без проверки человеком.
  • Вопросы, требующие больших знаний, арифметика дат, состояния длиннее 65 536 токенов и языки, кроме английского.

Как использовать

Запустите её из репозитория Kev. На CUDA она работает в bf16 со слитыми ядрами DeltaNet и CUDA-графами (достаточно L4); на 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-0.8b --port 8008        # Kev 1.0 (this card)
uv run --extra serve python -m kev.serve --run jaredpalmer/kev-0.8b@v1.0 --port 8008   # the same weights, pinned
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 выбирает точный путь, используемый для оценки. Состояние свыше 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 и 6 000 записей из decision-v7. Ни один выход Jev (хостируемой модели принятия решений от TypeSafe) не использовался. CodeReviewer и FlakeFlagger взяты из Zenodo; повествования CFPB — это произведения правительства США; лицензии и ревизии по каждому источнику зафиксированы в манифестах наборов. Наборы только для оценки ниже (breadth-v1, tasksource-heldout-v1, transfer-v4, longdoc-v1, а также источники When2Call и prompt-инъекций из devtools-v1) в обучение не входят.

Процедура обучения

  1. Базовый рецепт. Две эпохи на decision-v7 от базы: LoRA ранга 16, α 32; скорость обучения 1e-4, расписание one-cycle; батч 8; bf16-автокаст; seed 2. Лосс — кросс-энтропия по вариантам каждого вопроса. Порядок вариантов перемешивается, варианты «none of the above» и дистракторы вставляются случайно, а четверть записей choice дополнительно даёт минимальную пару (вопрос с вариантом «none of the above», один раз с присутствующим верным вариантом и один раз с удалённым).
  2. Даты и отсутствующие доказательства. Одна эпоха от стадии 1 при скорости обучения 4e-5 с 2 000 проигранных заново записей.
  3. Документы и навыки. Одна эпоха от стадии 2 на всех трёх обучающих наборах вместе при скорости обучения 2e-5 с 6 000 проигранных заново записей; батч 4 × накопление 2; состояния не длиннее 7 552 токенов; gradient checkpointing; seed 1; 2 818 шагов оптимизатора.
  4. Калибровка. Одна температура, T = 2.35, минимизирующая отрицательное логарифмическое правдоподобие на девелоперских строках decision-v7 прогона стадии 3 (1 264 вопроса). Это отложенные элементы обучающего корпуса. Перенастройка на отложенных наборах данных была оценена и не принята (см. «Калибровка»).

Оценка

Методология. Каждое число — это путь оценки fp32 при поставляемой температуре, если не сказано иное. Девелоперские партиции использовались для отбора; тестовые партиции читались один раз для этого чекпойнта; тест transfer-v4 закрыт (читается один раз на кандидата) и оценивался по заранее зафиксированной планке. Парные интервалы — это 95 % бутстрэпы с пересэмплированием целых записей (2 000 пересэмплов), поэтому вопросы, делящие одно состояние, движутся вместе. Различия даны в процентных пунктах (п.п.). Jev (хостируемая модель TypeSafe, запрашиваемая через Vercel AI Gateway) показан там, где он читался на тех же элементах. Наборы:

  • breadth-v1: 14 отложенных публичных наборов данных в пяти областях (знания, язык, поиск, инструменты, искусство), обучение на них не велось.
  • tasksource-heldout-v1: 24 целых семейства задач из публичной многоцелевой коллекции, обучение на них не велось (имена семейств закрыты).
  • transfer-v4: решения вне домена из шести никогда не обучавшихся публичных источников (QNLI, SciQ, TweetEval-offensive, PAWS, MMLU, Emotion) плюс отложенные структуры политик и правил.
  • hard-v1: семейства навыков выше; тестовый сплит удерживает шаблоны тренированных генераторов.
  • devtools-v1: решения по инструментам разработчика из шести источников с проверенной лицензией (четыре обучались, два только для оценки).
  • documents-v1 / documents-v2: повествования о жалобах CFPB; v2 — закрытый отложенный тестовый набор.
  • longdoc-v1: коммерческие контракты CUAD и сгенерированные пакеты соглашений с состояниями от 4k до 64k токенов.

Ключевые панели, помеченные «audited», исключают элементы, которые аудит меток признал несостоятельными¹; каждое исключение убирает одни и те же строки с обеих сторон сравнения.

Отложенные данные (обучение не велось).

Панель (вопросы) Kev-0.8B Jev
Отложенные публичные наборы данных, development breadth-v1, audited, 10 наборов (2 475) 0.653 –
development breadth-v1, все 14 наборов (3 075) 0.597 0.757
тест breadth-v1, все 14 наборов (3 089) 0.586 0.757
тест breadth-v1, индекс со случайной поправкой² [95 % CI] 23.3 [21.2, 25.9] 54.0 [51.2, 57.0]
Отложенные семейства задач, development tasksource-heldout-v1, audited, 17 семейств (1 993) 0.515 –
development tasksource-heldout-v1, все 24 семейства (2 788) 0.513 –
Вне домена, development transfer-v4 (656): точность / Brier 0.648 / 0.430 0.857 / 0.211
Вне домена, закрытый тест transfer-v4 (656): точность / Brier 0.697 / 0.397 –
закрытый тест transfer-v4: ECE / покрытие при ошибке ≤ 5 % 0.045 / 0.274 –
MMLU-Pro, 10 вариантов (transfer-v9 development) 0.230 0.840
Неотвечаемые элементы, на которые дан ответ с p ≥ 0.9 (меньше — лучше) 0.00 0.09

Тренированные семейства (отложенные элементы и шаблоны).

Панель (вопросы) Kev-0.8B Jev
development documents-v1 (920) / тест (936) 0.842 / 0.851 0.868 / –
documents-v2, закрытый отложенный тест (953) 0.848 –
development hard-v1 (1 083) / тест (1 088) 0.594 / 0.665 0.777 / –
development devtools-v1, audited-источники (772) 0.633 –
development devtools-v1 (1 072) / тест (1 071), все источники 0.602 / 0.637 0.713 / –
development decision-v7 (1 264) / закрытый тест (1 200) 0.827 / 0.838 0.845 / –
Отложенные домены сгенерированных решений, ood-v2 (4 988) 0.661 –

Показатель Jev по devtools-v1 — по всем 1 074 девелоперским вопросам; строки Kev отбрасывают один id CodeReviewer, который сборщик набора переиспользовал для двух записей (2 вопроса).

Против предыдущей версии (тег night2-du-release, при её собственной температуре 2.41; зарегистрированные критерии, каждый тест прочитан один раз):

Панель Δ [95 % CI]
тест documents-v1 +24.4 [+21.3, +27.6]
documents-v2 +23.2 [+19.9, +26.4]
тест hard-v1 +26.9 [+23.4, +30.4]
тест devtools-v1 +16.4 [+13.1, +19.4]
тест hard-v1 + devtools-v1, объединённо +21.7 [+19.5, +24.0]
закрытый тест transfer-v4 +1.2 [−1.1, +3.7]

Длинные документы.

  • Проверенная длина контекста: 8 192 токена, обученная длина. Бин 16k выходит за допуск: его нижняя граница −8.5 п.п., ниже −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.779 0.128 –
8k 453 0.711 0.066 эталон
16k 452 0.659 0.047 −5.2 [−8.5, −2.1]
32k 454 0.663 0.055 −6.0 [−9.5, −2.5]
64k 452 0.637 0.038 −7.9 [−11.8, −4.2]

ECE при поставляемой T = 2.35. Δ спарена по 445–447 вопросам, заданным об одних и тех же контрактах на обеих длинах. Бин 4k содержит другие контракты и не является эталоном для правила. Источник: runs/r28-readout/context.json (зарегистрированное чтение раунда 28, runs/r28-08b-r15-longdoc).

Калибровка (expected calibration error, ECE, при поставляемой T = 2.35; меньше — лучше):

Панель ECE
development breadth-v1, audited / все 14 наборов 0.022 / 0.032
тест breadth-v1, все 14 наборов 0.042
development tasksource-heldout-v1, audited 0.096
development transfer-v4 / закрытый тест 0.049 / 0.045
development hard-v1 / тест 0.112 / 0.125
development devtools-v1, audited 0.092
development documents-v1 / тест 0.059 / 0.071
development decision-v7 (строки подгонки) 0.033
ood-v2 0.123

Поставляемая температура была подогнана на отложенных элементах обучающего корпуса, что правила проекта больше не разрешают для нового релиза. Зарегистрированная перенастройка на 648 вопросах из отложенных наборов данных (калибровочный сплит transfer-r3, восемь источников, и 200 вопросов MMLU-Pro) даёт T = 2.52 (90 % бутстрэп-интервал [2.19, 2.83]). На 4 468 девелоперских вопросах audited breadth-v1 и tasksource-heldout-v1 она калибрована лучше: ECE 0.037 против 0.048, Brier ниже на 0.0020 [0.0014, 0.0025]. Она хуже на тренированных семействах, каждое — сильнее зарегистрированного допуска 0.005: hard-v1 ECE 0.124 против 0.112, devtools-v1 (audited) 0.099 против 0.092, documents-v1 0.078 против 0.059. Поэтому перенастройка не прошла отбор, и T = 2.35 остаётся. Пользователи, чей рабочий процесс ближе к отложенным публичным наборам данных, чем к обучающим семействам Kev, могут обслуживать её при значении перенастройки с KEV_TEMPERATURE=2.52; ответы от T не зависят.

Прочие результаты.

Набор Kev-0.8B Jev
Арифметика дат, политика deadline (transfer-v9 development) 0.35 0.95
MMLU, 4 варианта (transfer-v9 development) 0.425 0.90
Отложенные структуры политик, оба члена минимальной пары верны (transfer-v4 development) 0.422 –
When2Call, development / тест (источник только для оценки) 0.167 / 0.133 –
Prompt-инъекции, development (источник только для оценки) 0.547 0.893
SemIf (144 авторских решения; близко к насыщению для больших моделей, приводится только для сведения) 0.722 0.965
Публичные элементы JevBench, все 231 / сложный уровень 111 (ECE) 0.636 / 0.360 (0.181) –

Обслуживание. CUDA, bf16 со слитыми ядрами и CUDA-графами, на L4; время модели на запрос (медиана из 20) для нового / повторного состояния: 22.7 / 16.1 мс на шесть вопросов о коротком состоянии, 108.6 / 32.3 мс на пять вопросов о состоянии в 2 200 токенов; 62.8 запроса/с при 64 клиентах. Резидентная память GPU — 3.8 ГБ. Обслуживаемые вероятности держатся в пределах 0.017 от пути оценки fp32 на 280 вопросах, с 1 изменённым ответом.

Apple Silicon (MLX, bf16, M5 с 32 ГБ; три вопроса, один — о факте, помещённом на глубину 60 %; состояние префиллится кусками по 1 024 токена):

Токенов состояния Новое состояние Кэшированное состояние Пик MLX (1.5 ГБ весов) Объём процесса Помещённый факт (p)
8 192 1.4 с 74 мс 2.7 ГБ 5.3 ГБ верно (0.68)
16 384 3.2 с 94 мс 3.0 ГБ 6.1 ГБ верно (0.68)
32 768 8.0 с 134 мс 3.1 ГБ 6.3 ГБ верно (0.70)
65 000 21.2 с 202 мс 3.8 ГБ 5.4 ГБ верно (0.62)

По сравнению с fp32 PyTorch на CPU на тех же запросах ответы MLX отличаются не более чем на 0.0076 при 8k и 0.0052 при 16k токенов, без изменённых ответов. На 100 вопросах о коротком состоянии путь MLX держится в пределах 0.020 от пути оценки fp32, с 1 изменённым ответом.

¹ Исключены из панелей audited: четыре набора данных breadth-v1 (routerbench, чьим состояниям не хватает запрашиваемой информации; cfcolor и humicroedit, на уровне случайного для любой системы; chessbench, на нижней границе для любой системы); семь семейств tasksource-heldout-v1 с недействительными или невосстановимыми метками (имена закрыты); две задачи devtools-v1, чьи метки состояние не определяет (flakeflagger, тип изменения коммита).

² Индекс со случайной поправкой из community Decision Index 0.2: по каждому набору (score − chance) / (1 − chance), усреднённый внутри каждой области, затем 100 × среднее по пяти областям. Индекс Jev — из отдельного чтения тех же тестовых элементов.

Ограничения и компромиссы

  • Вне домена это модель меньше 1B. Она отстаёт от Jev на 21 пункт на transfer-v4 development и на 31 пункт по индексу breadth-v1; знания (MMLU-Pro 0.230) и перефразирование близки к необученной базе. Используйте Kev-4B там, где важна точность.
  • Её прирост — в распределении. Обучающие сплиты documents-v1, hard-v1 и devtools-v1 входят в её обучающие данные; на публичном сложном уровне JevBench, проверке вне распределения, стадия документов и навыков сдвинула её на +2.7 п.п. [−1.8, +7.2], что неотличимо от нуля.
  • Маршрутизация вызовов инструментов ухудшилась. When2Call, источник только для оценки, упал с 0.260 до 0.167 на development и с 0.233 до 0.133 на тесте — ниже уровня угадывания один из четырёх среди его четырёх вариантов. Не используйте её для маршрутизации вызовов инструментов.
  • Один результат devtools-v1 необъяснён. FlakeFlagger сдвинулся 0.500 → 0.520 на development, но 0.507 → 0.813 на тесте, на 150 вопросах на сплит; считайте это необъяснённым, а не навыком.
  • Арифметика дат — её самое слабое семейство: 0.35 на вопросах политики deadline против 0.95 у Jev; препроцессор KEV_DATE_FACTS=1 помогает большим моделям больше, чем этой.
  • Композиция правил слаба: оба члена отложенной минимальной пары политик верны в 0.422 случаев.
  • Калибровка — одна температура в распределении (см. «Калибровка»). Она не может переупорядочить уверенности: покрытие при ошибке ≤ 5 % вне домена составляет 0.145 на development против 0.70 у Jev, поэтому при строгом бюджете ошибок автоматизировать можно мало решений.
  • Необученные длины. Обучающие состояния были не длиннее 7 552 токенов. Более длинные состояния обслуживаются до 65 536 токенов; насколько сохраняется точность — это проверенная длина контекста выше.
  • Порядок вариантов может изменить ответ; изоляция вопросов этого не предотвращает.

Смещения, риски и этические соображения

  • Калиброванные вероятности могут создавать неоправданное доверие. Температура была подогнана на девелоперских строках обучающего распределения и не переносится на любой рабочий процесс; измерьте точность и калибровку на размеченной выборке собственных данных и перенастройте там температуру (python -m kev.calibrate), прежде чем задавать пороги.
  • Точность и калибровка сдвигаются при смене домена, и на этом размере сильнее, чем на больших. Следите за частотой ошибок в проде, а не полагайтесь на числа выше.
  • Не используйте её для значимых автоматических решений о людях без проверки человеком. Смещения базовой модели и обучающих данных (включая метки, произведённые другими моделями) не измерены.
  • Состояния могут содержать личные или конфиденциальные данные. Самостоятельный хостинг держит входные данные на вашей аппаратуре; сервер открыт, если не задан KEV_API_KEY, поэтому применяйте собственный контроль доступа и политику обращения с данными.

Вычисления

  • Базовый рецепт: около 20 минут на одной NVIDIA H100. Стадия дат: 9 минут.
  • Стадия документов и навыков: 52 минуты на одной NVIDIA H200 (пик 23.9 ГБ).
  • Проверки оценки и обслуживания: по одной GPU H100 / H200 / L4 на Modal; измерения MLX на Apple M5.

Происхождение и воспроизводимость

  • Код, наборы и отчёты об оценке: github.com/jaredpalmer/kev. Номера релиза: runs/release/kev-08b-r15.json (scripts/release_numbers.py --release kev-08b-r15), закрытое чтение runs/locked/kev-08b-r15-ungated/, чтения семейства от 2026-09-30 runs/fam-08b-breadth/, runs/fam-08b-breadthtest/ и runs/fam-breadth-test-report/, перенастройка калибровки runs/r28-readout/round28.json, обслуживание runs/serve-08b-l4/, runs/mlx-long-states/, runs/mlx-full-0.8b/.
  • Стадии: базовый прогон q35-08b/02-trial-2 (тег v7-base); даты night2-08b-du2/00-trial-0 (тег night2-du-release); документы и навыки, раунд 15 r15-08b/00-trial-0 (experiments/round15/joint.json, правило experiments/rounds/r15.json). Перенастройка калибровки: ветвь 08b-r15 раунда 28 (experiments/rounds/r28.json).
  • Выпущенные веса: ревизия Hub 9a45d25e; sha256 адаптера 9b908623…, sha256 head.pt f400bd12… (T = 2.3511).
  • История релиза: опубликован 2026-09-24 как подтверждённый кандидат раунда 15; включён без изменений в Kev 1.0. Запись о том, как он отбирался, включая наборы, с тех пор отозванные как несостоятельные (scienthoon, WANLI-v2, TypeSafe), — это README на ревизии Hub 9a45d25e и PLAN.md по git-тегу research-archive-2026-09-24.

Цитирование

@misc{palmer2026kev08b,
  title        = {Kev-0.8B: a calibrated decision model on Qwen3.5-0.8B},
  author       = {Palmer, Jared},
  year         = {2026},
  howpublished = {\url{https://huggingface.co/jaredpalmer/kev-0.8b}},
  note         = {Kev 1.0}
}

Контакты

Вопросы и проблемы: github.com/jaredpalmer/kev/issues.