Dokumentation

Kev-0.5B — Prototyp (abgelöst)

Kev-0.5B ist ein Entscheidungsmodell. Es nimmt ein Dokument (den Zustand) und eine Menge typisierter Fragen und gibt für jede Frage in einem einzigen Vorwärtspass eine Wahrscheinlichkeitsverteilung zurück. Es erzeugt keinen Text.

Es ist ein LoRA-Adapter plus ein kleiner Pointer-Head auf Qwen/Qwen2.5-0.5B. Es reproduziert die Architektur, die Archer Hume für TypeSafes Jev in Jev’s Architecture Unmasked hergeleitet hat, und bedient den öffentlichen /v1/systemone-API-Vertrag von TypeSafe.

Dieser Checkpoint ist der ursprüngliche Prototyp, im September 2026 auf einem Laptop trainiert, um zu zeigen, dass der Mechanismus funktioniert. Er ist abgelöst durch Kev-0.8B, Kev-4B und Kev-9B, die Qwen3.5-Basen, eingefrorene prüfsummierte Suites und ein über ~110 kontrollierte Versuche gefundenes Rezept verwenden; auf denselben Out-of-Domain-Items (transfer-v4 dev) erreicht dieses Modell 0.561 gegen 0.643 / 0.794 / 0.812.620 / 0.790 / 0.796. Es bleibt auf dem Hub als Referenz und zur Reproduzierbarkeit; verwende für alles andere die aktuelle Familie.

  • Hub: jaredpalmer/kev-0.5b (Tag v0.1)
  • Code, Trainingsrezept, Evaluation und Demo: github.com/jaredpalmer/kev
  • Gewichte: GitHub-Release v0.1.0, kev-0.5b.tar.gz (38 MB; LoRA-Adapter adapter_model.safetensors, Head head.pt, Tokenizer-Dateien, eval.json, Trainings-Log). SHA-256 15639f79…6e12f8, vollständiger Digest in der Sidecar .sha256. Entpacke nach runs/kev/. Gewichte werden nicht in Git committet.

Modelldetails

Entwickelt von Jared Palmer, mit Devin (Cognition)
Modelltyp Kausaler Transformer, nur Prefill, block-kausale Branch-Maske, Pointer-Readout
Basismodell Qwen/Qwen2.5-0.5B (494M Parameter, eingefroren)
Adapter LoRA-Rang 16, Alpha 32, Dropout 0.05, auf q_proj k_proj v_proj o_proj gate_proj up_proj down_proj (alle 24 Schichten)
Head Zwei lineare Abbildungen 896 → 256 (Query aus <decide>, Key aus jedem </opt>), skaliertes Skalarprodukt, Softmax über die Optionen
Trainierbare Parameter 9.3M (LoRA 8.8M + Head 0.46M), 1.9% des Backbones
Präzision fp32 (Training und Serving auf Apple MPS)
Im Training genutzter Kontext ≤ 384 Zustands-Token, ≤ 1,024 Token pro Frage-Branch
Beim Serving erlaubter Kontext 8,192 pro Branch (Backbone unterstützt 32k)
Fragetypen noul (Ja/Nein), choice (2–255 Optionen), score (2–255 geordnete Stufen)
Sprache Englisch
Lizenz Apache-2.0 für den Adapter und den Head. Das Basismodell steht unter der Qwen-Lizenz (Apache-2.0 für Qwen2.5-0.5B). Datensätze tragen ihre eigenen Lizenzen.
Version Kev-0.5B v0.1, trainiert am 2026-09-17

Beabsichtigte Verwendung

Beabsichtigt. Forschung zu Entscheidungsmodellen: Kalibrierung direkter Wahrscheinlichkeits-Readouts, Shared-State-/Isolated-Question-Attention, Empfindlichkeit gegenüber der Optionsreihenfolge und API-Kompatibilität mit TypeSafes System-One-Vertrag. Lokale Demos und Lehre.

Nicht beabsichtigt. Jede Produktionsentscheidung, die Menschen betrifft: Moderation, Betrug, Kredit, Einstellung, medizinisches oder rechtliches Routing. Das Wissen des Modells ist auf ein 0.5B-Backbone begrenzt, seine Kalibrierung ist nur auf den Trainingsverteilungen verifiziert, und seine Ausgaben auf unbekannten Aufgaben wurden nicht gemessen.

Wie das Modell verwendet wird

Die Eingabe ist eine einzige gepackte Token-Sequenz:

<state> …state…  <q> instr <opt> o1 </opt> <opt> o2 </opt> … <decide>  <q> … <decide>  …
  • Die Attention-Maske lässt ein Frage-Token nur den Zustand und seinen eigenen Branch sehen. Fragen können sich nicht gegenseitig sehen.
  • Jeder Branch startet die Position-IDs nach dem Zustand neu.
  • Für jede Frage bewertet der Head jeden </opt>-Hidden-State gegen den <decide>-Hidden-State und wendet Softmax an.
  • Anwendungscode verwandelt die Verteilungen in die API-Antwort: choice/confidence für Choice, p(yes) für Noul, erwartete Stufe für Score.

Reservierte Token sind vorhandene Qwen-Spezialtoken (<|fim_prefix|>, <|fim_middle|>, <|box_start|>, <|box_end|>, <|fim_suffix|>). Nutzertext wird bereinigt, sodass er sie nicht erzeugen kann.

Bediene es mit python -m kev.serve --run runs/kev und rufe POST /v1/systemone auf, oder verwende typesafe-sdk mit base_url="http://127.0.0.1:8009".

Trainingsdaten

Sechs öffentliche Datensätze, in TypeSafe-förmige Anfragen konvertiert und mit demselben Codepfad gerendert, der zur Serving-Zeit verwendet wird (api.to_record()). Pro Quelle wurden 1,500 Datensätze aus den Standard-Train-Splits gezogen, was 9,000 Datensätze und 13,500 Fragen ergibt (4,500 Choice, 6,000 Noul, 3,000 Score).

Quelle Split konvertiert zu Anmerkungen
Banking77 train Choice, K = 77 Intent-Namen als Optionsschlüssel; Template-Beschreibungen, 50% null
BoolQ train Noul Passage als Zustand; 40% mit true/false-Kriterien
AG News train Choice K = 4 + 2 Noul abgeleitete Ja/Nein-Fragen, mit der Themenfrage gepackt
MNLI train Choice K = 3 Prämisse als Zustand, Hypothese in den Anweisungen
SST-5 train Score, 5 Stufen
Yelp Review Full train Score 5 Stufen + Noul Text auf 220 Wörter gekürzt; recommend = Sterne ≥ 4

Beim Konvertieren angewandte Rendering-Variation: ~30% null-Optionsbeschreibungen, ~10% strukturierte {"what": …}-Beschreibungen, ~15% strukturierte {"question", "focus"}-Anweisungen, ~32% Zustände als Objekte oder Arrays verpackt ({"document"}, {"ticket": {"channel","body"}}, [{"role","content"}]).

Augmentierung einmal pro Datensatz vor der Kodierung angewandt: Optionsreihenfolge gemischt; mit Wahrscheinlichkeit 0.10 die richtige Option durch other: None of the above ersetzt; mit Wahrscheinlichkeit 0.15 eine irrelevante Distraktor-Option hinzugefügt.

Keine LLM-generierten Daten. Keine menschliche Annotation über die ursprünglichen Datensätze hinaus.

Trainingsverfahren

Ziel Cross-Entropy über die Optionen, gemittelt über die Fragen eines Datensatzes
Optimierer AdamW, lr 2e-4, Weight Decay 0.01, OneCycle-Zeitplan (10% Warm-up)
Batch 1 Datensatz pro Schritt, Gradient Accumulation 8, Gradient Clipping 1.0
Epochen 2 (2,250 Optimizer-Schritte)
Hardware Apple M5, 32 GB Unified Memory, PyTorch 2.8 MPS-Backend
Wandzeit ~1h45m (~0.29 s pro Datensatz)
Seed 0
Finaler Trainingsverlust 0.27

Dieser Checkpoint ist älter als zwei Verlustterme, die heute Standard in kev/train.py sind: der ordinale Term für Score (--ord_w) und die Permutationskonsistenz-KL für Choice (--perm_kl). Um diesen Checkpoint exakt zu reproduzieren:

uv run python -m kev.train --n_per_source 1500 --epochs 2 --accum 8 --perm_kl 0 --ord_w 0 --out runs/kev

Beachte, dass die Augmentierung jetzt in jeder Epoche neu angewandt wird statt zur Kodierungszeit fixiert zu sein, daher ist ein erneuter Lauf nicht bit-identisch.

Evaluation

Zurückgehaltene Test-/Validierungs-Splits derselben sechs Quellen, 150 Datensätze pro Quelle, 1,350 Fragen, Seed 1. Vollständige Ergebnisse in runs/kev/eval.json.

Genauigkeit und Kalibrierung

Quelle K Zero-Shot-Basis Zero-Shot-Instruct Kev-0.5B
acc / ECE acc / ECE acc / ECE / NLL
banking77 77 – – 0.860 / 0.057 / 0.56
agnews 4 0.813 / 0.069 0.787 / 0.160 0.940 / 0.028 / 0.22
agnews yes/no 2 0.780 / 0.103 0.853 / 0.062 0.960 / 0.017 / 0.10
boolq 2 0.427 / 0.274 0.607 / 0.084 0.753 / 0.136 / 0.63
mnli 3 0.460 / 0.225 0.433 / 0.390 0.747 / 0.100 / 0.63
sst5 5 0.373 / 0.083 0.447 / 0.344 0.533 / 0.121 / 1.17 (MAE 0.59 Stufen)
yelp 5 0.313 / 0.043 0.353 / 0.078 0.553 / 0.118 / 0.95 (MAE 0.54 Stufen)
yelp yes/no 2 0.833 / 0.129 0.833 / 0.066 0.887 / 0.084 / 0.33
alle 0.799 / 0.065

Baselines: Qwen/Qwen2.5-0.5B (roh) und Qwen/Qwen2.5-0.5B-Instruct (Chat-Template), derselbe gerenderte Text, Next-Token-Logits über die Optionsbuchstaben A–H; nicht ausgeführt für K = 77. ECE verwendet 10 gleich breite Bins auf der Top-Wahrscheinlichkeit.

Temperatur-Skalierung

Gefittet auf geradindizierten Datensätzen, getestet auf ungeradindizierten: T = 1.47. Zurückgehaltene NLL 0.505 → 0.481, ECE 0.057 → 0.031. Das Modell ist vor der Skalierung leicht überkonfident.

Mechanismustests

Test Ergebnis
Isolation (Geheimnis in Geschwisterfrage / abwesend / im Zustand) p = 0.03 / 0.03 / 0.99
Gepackt vs. getrennt, max. absolute Wahrscheinlichkeitsdifferenz 3.7e-6 (2.0× schneller gepackt, ~2.7 Fragen pro Anfrage)
Permutation, 4 Reihenfolgen, Choice K ≥ 3 Argmax kippt 7.4%; mittlere Streuung von p(korrekt) 0.065, p90 0.25
IIA, eine irrelevante Option anhängen mittlere |Δ Log-Odds| Top-2 = 0.13, p90 0.34
Boundary Forgery, Optionstext mit gefälschten Delimitern Optionsanzahl unverändert; gefälschte Option p ≤ 0.09

Grenzen

  • Nur In-Distribution. Alle obigen Zahlen beziehen sich auf zurückgehaltene Splits der Trainingsdatensätze. Die Generalisierung außerhalb der Quellen wurde für diesen Checkpoint nicht gemessen.
  • Kleines Backbone. 0.5B Parameter. Im Beispiel für strukturierte Kriterien in den TypeSafe-Docs wählt das Modell return_policy, wo Jev return_status wählt. Leseverständnis (BoolQ 0.75, MNLI 0.75) liegt weit unter dem Stand der Technik.
  • Schmale Aufgabenabdeckung. Sechs Datensätze und etwa zehn Anweisungs-Templates. Code, Tabellen, Mehrfach-Turn-Chat, Arithmetik und mehrstufige Bedingungen sind untrainiert.
  • Reihenfolgeempfindlichkeit bleibt. 7% Argmax-Kippungen und eine p90-Wahrscheinlichkeitsstreuung von 0.25 bei Neuordnung der Optionen. Ein Schwellenwert nahe einer Entscheidungsgrenze kann die Aktion ändern.
  • Score-Konfidenz wird vom Serving-Code berechnet, nicht vom Checkpoint. Sie war 1 − E|level − mode| / (L − 1), als diese Karte geschrieben wurde; sie ist jetzt max(0, 1 − E|level − mode| / D), wobei D die mittlere absolute Abweichung einer Gleichverteilung über die Stufen ist, wie im Referenzadapter von TypeSafe (system-one-adapter 0.2.1).
  • Kalibrierung ist keine Garantie. ECE 0.03 nach Temperatur-Skalierung auf diesen Quellen sagt nichts über die Kalibrierung in einem neuen Workflow. Strikte Scoring-Regeln geben den richtigen Anreiz; sie beseitigen nicht die Notwendigkeit von Ergebnisdaten.
  • Geerbte Grenzen von Qwen2.5-0.5B und von den Datensätzen, einschließlich ihres Label-Rauschens, demografischer Verzerrungen (z. B. Yelp, Banking-Intents) und der Abdeckung nur auf Englisch.

Bias, Risiken und Empfehlungen

Die Trainingssets tragen die Verzerrungen ihrer Quellen: US-zentrierte Nachrichtenkategorien, englische Banking-Terminologie, Restaurantbewertungen und crowd-sourced NLI-Labels. Das Modell wird sie widerspiegeln.

Direkte Wahrscheinlichkeitsausgaben wirken autoritativ. Ein confidence: 0.92 aus diesem Modell ist eine Statistik über seine eigene Verteilung über drei Optionen, keine verifizierte Wahrscheinlichkeit, richtig zu liegen. Setze darauf keinen Schwellenwert für folgenreiche Entscheidungen, ohne zuvor die Kalibrierung an deinen eigenen beschrifteten Ergebnissen zu messen.

Die Fragenisolationseigenschaft ist ein echtes Sicherheitsmerkmal (der Text einer Frage kann die Antwort einer anderen nicht manipulieren) und wurde verifiziert. Der Schutz gegen Delimiter-Fälschung wurde für die fünf reservierten Token verifiziert. Andere Prompt-Injection-Routen über den Zustandstext wurden nicht untersucht.

Umweltauswirkungen

Ein Trainingslauf: ~1.75 h auf einem einzelnen Apple-M5-Laptop-SoC bei etwa 30–40 W, d. h. etwa 0.06 kWh. Evaluations- und Smoke-Läufe fügen eine ähnliche Menge hinzu. Das ist gering.

Zitat

@software{kev2026,
  title  = {kev: a laptop-scale reconstruction of a Jev-style decision model},
  author = {Palmer, Jared},
  year   = {2026},
  url    = {https://github.com/jaredpalmer/kev}
}

@misc{hume2026jev,
  title  = {Jev's Architecture Unmasked},
  author = {Hume, Archer},
  year   = {2026},
  url    = {https://archerhume.com/posts/jevs-architecture-unmasked}
}

Kontakt

Öffne ein Issue unter github.com/jaredpalmer/kev.