Kev-9B
モデル概要
Kev-9B は意思決定モデルです。1 つの文書(状態)と、それについての型付きの質問群を読み、各質問に添えられた選択肢上の較正された確率分布を、一度のフォワードパスで、テキストを生成せずに返します。文書を分類・振り分け・トリアージ・検査し、しきい値をかけられる確率を必要とする開発者 —— たとえば不確かなケースを人によるレビューに回す —— に向けられています。TypeSafe の公開 System One API(POST /v1/systemone)を実装しているので、TypeSafe SDK が変更なしに動きます。Qwen3.5-9B-Base 上の LoRA アダプタとポインタヘッドで、24 GB クラスの GPU 1 台に収まります。このカードはバージョン 2 を記述しており、2026-09-30 にリリースされ、Kev 1.0 に含まれました。
モデルの詳細
| 開発 | Jared Palmer(github.com/jaredpalmer/kev) |
| モデル種別 | 意思決定モデル: 因果言語モデルのバックボーンを prefill-only で走らせ、選択肢上のポインタヘッドを備える |
| バックボーン | Qwen/Qwen3.5-9B-Base(リビジョン 68c46c4b): 32 層、24 が Gated DeltaNet(線形注意)で 8 が完全注意、隠れサイズ 4,096。凍結 |
| アダプタ | LoRA、ランク 16、α 32、attention・MLP・DeltaNet の射影上(4,540 万パラメータ) |
| ヘッド | ポインタヘッド: 2 つの射影が各選択肢の閉じトークンを質問の最終トークンに対して採点し、softmax が確率を与える |
| 精度 | fp32 重み上の bf16 autocast で訓練。bf16 で提供(アダプタは読み込み時にベースにマージ)。fp32 で評価 |
| コンテキスト | 最大 65,536 トークンの状態を提供し、質問ごとにさらに少なくとも 8,192 トークン。訓練の状態は最大 7,552 トークンでした。 |
| 検証済みコンテキスト長 | 8,192 トークン(「長文書」を参照) |
| 較正 | 1 つの温度、T = 2.19。head.pt に保存され、読み込み時に適用される |
| 言語 | 英語 |
| ライセンス | Apache-2.0(アダプタとヘッド)。ベースモデルは Apache-2.0 |
| バージョン | v2(Kev 1.0): jaredpalmer/kev-9b の main、リビジョン b5d8c18e(2026-09-30 リリース) |
| 以前のバージョン | v1、文書とスキルの段階のない同じレシピ(T = 2.30)。タグ v1。そのカードはそのタグの README |
入力。 状態(テキスト、またはラベル付きテキストとして描画された JSON オブジェクトか配列)と、任意の数の名前付き質問。各質問は 3 種のいずれかです:
| 種別 | 選択肢 | 出力 |
|---|---|---|
choice |
1–255 の名前付き選択肢、それぞれ任意の説明付き | 選択肢ごとの確率、最も可能性の高い選択肢、信頼度 |
score |
1–255 の順序付き段階 | 段階ごとの確率、期待段階指数 |
noul |
はい/いいえ、任意の説明付き | はいの確率 |
各質問は、共有された状態から続く自分の行として答えられるので、質問は互いに影響できません。状態は一度だけ計算され、キャッシュされます。
想定用途
- 数千トークンの文書に対する型付きの決定: 分類、ルーティング、トリアージ、抽出の選択、ポリシーと資格の検査、述べられた基準に対する提案回答の判定。
- 信頼度に基づいて行動するワークフロー: 確信のあるケースを自動化し、残りを待ち行列に入れる。しきい値はユーザー自身の業務のラベル付きサンプルで凍結する。
- 単一の 24 GB クラス GPU 上での、System One エンドポイントの自己ホスト型 drop-in 代替と、ユーザー自身のラベルでのファインチューニングの出発点(
kev.train --init_from jaredpalmer/kev-9b)。
範囲外の用途
- テキスト生成、チャット、要約、自由形式の質問応答。モデルは与えられた選択肢を採点するだけです。
- 人に対する法的、医療、金融、雇用、または同様の帰結を伴う、人によるレビューなしの完全自動の決定。
- 答えが状態になく一般知識でもない事実に依存する質問、および知識重視の試験(「限界」を参照)。
KEV_DATE_FACTS=1前処理器なしの日単位精度の日付演算、65,536 トークンを超える状態、英語以外の言語。
使い方
Kev リポジトリで提供します。CUDA では、融合 DeltaNet カーネルと CUDA graphs を使って bf16 で動きます(L40S か H100 1 台。常駐約 22 GB)。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 の公開分類データセットからの 10,000 レコード(各 1,000、このカードのメタデータに列挙)をそのままのラベルで。9 つのテンプレートファミリーにわたる生成ポリシー最小対 896。4 つの描画でランダムに生成したルール構造 60 件からのレコード 1,680。ラベルはコードが計算 |
| 日付と欠落した証拠 | 1,425 | 生成: 日付を含むポリシーケース 900(plain、日数文付き、または date_facts フィールド付き)。決め手の文を除き一様なターゲットにしたケース 255、そして無傷の対照 270 |
| 文書とスキル、1 段階 | 16,539 | documents-v1 train: 5,219 の米国消費者金融苦情ナラティブ(CFPB、最大約 7k トークン)と 7,488 質問。2 つのオープンウェイトの teacher が消費者の申告と一致したところでラベルを保持。hard-v1 train: 7 つのスキルファミリー(長いポリシー、トレードオフ、確率、マルチホップ、日付と算術、提案回答の判定、欠落事実の棄権)のプログラム的にラベル付けされた 6,000 レコード、テンプレート 0–3。devtools-v1 train: CodeReviewer、CommitPackFT、FlakeFlagger、Aegis からの 5,320 レコードを各データセット自身のラベル付きで |
2 つのファインチューニング段階は decision-v7 のレコードを 2,000 と 10,000 再生します。Jev(TypeSafe のホスト型意思決定モデル)の出力は使用していません。CodeReviewer と FlakeFlagger は Zenodo 由来、CFPB ナラティブは米国政府の著作物です。ソースごとのライセンスとリビジョンはスイートの manifest に記録されています。下の eval 専用スイート(breadth-v1、tasksource-heldout-v1、transfer-v4、longdoc-v1、そして devtools-v1 の When2Call とプロンプトインジェクションのソース)は決して訓練に入りません。
訓練手順
- ベースレシピ。 ベースから
decision-v7で 2 エポック: LoRA ランク 16、α 32。学習率 5e-5、one-cycle スケジュール。実効バッチ 8(4 × 2 蓄積)。bf16 autocast、勾配チェックポイント。損失は各質問の選択肢上の交差エントロピーです。選択肢順序はシャッフルされ、「none of the above」選択肢とディストラクタがランダムに挿入され、choice レコードの 4 分の 1 は最小対も生みます(「none of the above」選択肢付きの質問を、正解選択肢がある状態と除いた状態で 1 回ずつ)。 - 日付と欠落した証拠。 段階 1 から 1 エポック、学習率 2e-5、2,000 の再生レコード付き。これが v1 です。
- 文書とスキル。 v1 から 3 つの訓練セットを一緒に 1 エポック、学習率 2e-5、10,000 の再生レコード付き。バッチ 2 × 4 蓄積。状態は最大 7,552 トークン。シード 1。オプティマイザステップ 3,318。
- 較正。 1 つの温度、T = 2.19。ホールドアウトデータセットの 648 質問で負の対数尤度を最小化します: transfer-r3 の較正分割(6 つの公開データセット、QNLI、SciQ、TweetEval-offensive、PAWS、MMLU、Emotion、および生成ポリシーレコードの 2 つのホールドアウトファミリー)からの 448 と、200 MMLU-Pro 質問(transfer-v9 開発)。プールはフィットの前にチェックポイントの訓練スイートと照合されました。
評価
方法論。 すべての比較は、同一項目での Kev-9B v1 に対するもので、各モデルは自身の提供温度です(v1: 2.30)。比較とその水準は確認読みの前に登録され、テスト分割はこのチェックポイントのために一度だけ読まれました。transfer-v4 テストはロック済み(候補ごとに一度読む)です。ペア付き区間は、レコード全体をリサンプルする 95 % ブートストラップ(2,000 リサンプル)なので、状態を共有する質問は一緒に動きます。差はパーセンテージポイント(pp)です。Jev(TypeSafe のホスト型モデル、Vercel AI Gateway 経由で照会)は、同じ項目で読まれたところに示します。スイート:
- breadth-v1: 5 領域(知識、言語、検索、ツール、芸術)の 14 のホールドアウト公開データセット。一度も訓練していない。
- transfer-v4: 6 つの未訓練公開ソースからの分布外決定と、ホールドアウトのポリシー・ルール構造。
- transfer-r3: 較正プールと同じ 8 つのホールドアウトソースからの短い状態のパネル。
- hard-v1: 上のスキルファミリー。テスト分割は訓練済みジェネレータのテンプレートをホールドアウトします。
- devtools-v1: 6 つのライセンス確認済みソース(4 つ訓練、2 つ eval 専用)からの開発者ツール決定。
- documents-v1 / documents-v2: CFPB 苦情ナラティブ。v2 は非公開のホールドアウトテストセット。
- longdoc-v1: CUAD 商業契約と生成した合意バンドル。状態は 4k から 64k トークン。
devtools-v1 の主要パネルは、状態がラベルを決めない 2 つのタスク(flakeflagger、コミット変更種別)を除外します。同じ行が両側から外れます。
v1 との結果(登録済み確認)。
| パネル(質問数) | Kev-9B v2 | Kev-9B v1 | Δ [95 % CI] |
|---|---|---|---|
| hard-v1 + devtools-v1 開発、audited (1,855) | 0.821 | 0.628 | +19.3 [+17.2, +21.6] |
| documents-v1 開発 (920) | 0.902 | 0.833 | +7.0 [+4.8, +9.2] |
短い状態: 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 |
|---|---|---|---|
| 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] |
| 分布外、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 開発) | 0.590 | 0.515 | 0.840 |
| 答えられない項目を p ≥ 0.9 で答えた(低いほど良い) | 0.00 | 0.00 | 0.09 |
v1 に対して、breadth-v1 精度差は開発で +0.3 [−0.7, +1.3]、テストで +0.6 [−0.4, +1.6] です。tasksource-heldout-v1 開発はこのチェックポイントについて読まれましたが、その読み出しは完成しておらず、ここには報告しません。
訓練済みファミリー(ホールドアウト項目とテンプレート)。
| パネル(質問数) | Kev-9B v2 | Kev-9B v1 | Jev |
|---|---|---|---|
| hard-v1 開発 (1,083) / テスト (1,088) | 0.813 / 0.834 | 0.574 / 0.584 | 0.777 / – |
| devtools-v1 開発 (1,072) / テスト (1,071)、全ソース | 0.772 / 0.791 | 0.631 / 0.637 | 0.713 / – |
| documents-v1 開発 (920) / テスト (936) | 0.902 / 0.900 | 0.833 / 0.829 | 0.868 / – |
| documents-v2、非公開ホールドアウトテスト (953) | 0.900 | 0.821 | – |
| 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 pp で、−3 pp を下回るので、より長い長さは検証されません。
- 読みの前に固定したルール: 検証済み長は、16,384 トークン以上から、それと 8,192 との間のすべてのバケットが許容差内にあるような最大バケットの公称サイズです。許容差内とは、8k バケット(6,553–7,618 トークンの状態、訓練長)からの CUAD 精度差が、同じ契約・反復・質問でペアにされ、95 % 下限が少なくとも −3 pp で、すべてのレコードが答えられていることです。16k バケットが失敗すれば、検証済み長は 8,192 トークンです。
公称状態長ごとの CUAD 精度、ECE、8k バケットからのペア差(longdoc-v1 開発):
| 公称状態長 | CUAD 質問数 | 精度 | ECE | 8k との Δ、pp [95 % CI] |
|---|---|---|---|---|
| 4k | 443 | 0.876 | 0.049 | – |
| 8k | 453 | 0.850 | 0.051 | reference |
| 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] |
出荷 T = 2.19 での ECE。Δ は、同じ契約について両方の長さで尋ねた 445–447 質問でペアにされています。4k バケットは異なる契約を持ち、ルールの参照ではありません。出所: runs/r28-readout/context.json(ラウンド 28 の登録済み読み出し、runs/r29-9b-r18a-longdoc)。
較正(期待較正誤差、ECE、提供時。低いほど良い):
| パネル | Kev-9B v2 (T = 2.19) | Kev-9B v1 (T = 2.30) |
|---|---|---|
| breadth-v1 テスト、全 14 データセット | 0.034 | 0.044 |
| 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 開発) |
0.725 | 0.95 |
| MMLU、4 択(transfer-v9 開発) | 0.725 | 0.90 |
| SemIf(著者作成の 144 決定。飽和に近く、報告のみ) | 0.917 | 0.965 |
提供。 CUDA、bf16 で融合カーネルと CUDA graphs。リクエストあたりのモデル時間(20 回の中央値)、新しい / 繰り返しの状態。v1(同じアーキテクチャとアダプタ形状)で測定:
| GPU | 6 問、短い状態 | 5 問、2,200 トークンの状態 | リクエスト/秒、64 クライアント |
|---|---|---|---|
| L40S | 66.4 / 42.7 ms | 235.6 / 57.5 ms | 32.7 |
| H100 | 24.0 / 16.6 ms | 88.5 / 26.4 ms | 79.5 |
常駐 GPU メモリは 21.9 GB です。提供時の確率は、280 質問で fp32 評価経路から 0.017 以内にとどまり、答えの変化はありません。fp32 評価経路(H100、v2)では、16k / 32k / 64k トークンの状態が 5.1 / 10.9 / 25.4 秒、重みとは別に 4.6 / 9.1 / 18.2 GiB を使います。
Apple Silicon(MLX): Kev-0.8B と Kev-4B のために行った長い状態の測定は、このサイズでは行われていません。それらに使った 32 GB の M5 では、19.3 GB の bf16 バックボーンとその作業セットが利用可能なメモリに収まりませんでした。
¹ コミュニティ Decision Index 0.2 のチャンス補正指数: データセットごとに (score − chance) / (1 − chance) を、各領域内で平均し、その後 100 × 5 領域の平均。Jev の指数は同じテスト項目の別の読みからのものです。
限界とトレードオフ
- 選択。 このチェックポイントは以前のラウンドで開発データで訓練・読みされ、それらの数値が既知の状態で後のルールの下で再選択されました。テスト分割とロック済み読み(それぞれこのチェックポイントのために一度だけ読む)が guard です。開発の余裕は楽観的として扱ってください。
- 大きな利得は分布内です。 hard-v1、devtools-v1、documents-v1 の訓練分割は訓練データに入っています。それらの利得は訓練済みファミリーのホールドアウト項目とテンプレートであり、新しいタスクへの転移ではありません。
- 新しい仕事では v1 より良くありません。 breadth-v1 テスト +0.6 pp [−0.4, +1.6]、transfer-v4 開発 −0.2 pp [−2.4, +1.8]、transfer-r3 テスト +0.0 pp [−1.2, +1.2]。Kev-27B は breadth-v1 指数で 11 ポイント、Jev は 13 ポイント先行します。
- 知識はベースが決めます。 MMLU-Pro は 0.590 で、Kev-27B の 0.675、Jev の 0.840 に対してです。
- 日付演算は最も弱いファミリーです:
deadlineポリシー質問で 0.725、Jev の 0.95 に対して。KEV_DATE_FACTS=1前処理器が助けになります。 - 較正。 devtools-v1 が最も較正の悪いスイートです(テスト ECE 0.098)。温度の区間は [2.05, 2.41] です。温度は登録済みプールフィットから理由を記録して
head.ptに書かれました。較正スクリプトが、結合した訓練ファイルのソースを列挙してプール自体を再確認できないからです。ラウンド自身のチェックがそれを覆っていました。そのチェックは v1 の日付と欠落証拠のデータを覆っておらず、その manifest はソースを列挙していません。それらのレコードは 4 つの生成ファミリーで、プールにはどれも入っていません。 - 未訓練の長さ。 訓練の状態は最大 7,552 トークンでした。より長い状態は 65,536 トークンまで提供されます。精度がどこまで保つかは上の検証済みコンテキスト長です。
- 選択肢順序 は答えを変えうる。質問独立性はこれを防ぎません。
バイアス、リスク、倫理的考慮
- 較正された確率は根拠のない信頼を生みうる。温度は公開ホールドアウトデータセットでフィットされ、すべての業務に転移するわけではありません。しきい値を設定する前に、自分のデータのラベル付きサンプルで精度と較正を測定し、そこで温度を再フィットしてください(
python -m kev.calibrate)。 - 精度と較正はドメイン変化の下でずれます。上の数値に頼るのではなく、本番の誤り率を監視してください。
- 人についての重大な自動決定に、人によるレビューなしで使わないでください。ベースモデルと訓練データ(他のモデルが生成したラベルを含む)のバイアスは測定されていません。
- 状態は個人データや機密データを含みうる。自己ホストは入力を自分のハードウェアに保ちます。サーバーは
KEV_API_KEYを設定しない限り開いているので、自分のアクセス制御とデータ取り扱いポリシーを適用してください。
計算
- ベースレシピと日付段階(v1): 単一の NVIDIA H100 GPU。
- 文書とスキルの段階: NVIDIA H200 1 台で 2.6 時間(ピーク 74.1 GB)。
- 評価と提供のチェック: Modal 上の単一 H100 / H200 / L40S GPU。
来歴と再現性
- コード、スイート、評価レポート: 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-30 のファミリー読みruns/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)、ラウンド 27 の9b-r18aとして選択・確認。 - リリース済み重み: Hub コミット
b5d8c18e。アダプタ sha2562b2a70cf4ef4440b6c22899e1f72c2f8ea5c6f65b19aa344539b4b8971d1f13d、head.ptsha2568e1dab2c…(T = 2.1936)。 - 検証: Hub から匿名で読み込み、リリース前評価の答えを SemIf の 252/252 行と transfer-v4 開発の 764/764 行で 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}
}
連絡先
質問と issue: github.com/jaredpalmer/kev/issues。