At a glance
Table with columns: Kahn1 4B | Kahn1 4B |
|---|
| What it does | Typed answers (Choice, Score, Noul) about a text, each with its distribution and a calibrated confidence |
| Adapter | LoRA r = 16, α = 32 on Qwen/Qwen3.5-4B, 57 MB; native chat template, thinking off |
| Held-out, 14,663 items, same options for every system | 72.4 % (JEV 1.13.0: 73.2 %) |
| JevBench, 231 public items | 87.4 %, on par with Jev's 86.6 % (exact McNemar p = 0.84) |
| Calibration (ECE, held-out) | 0.072 overall, 0.015 on Choice |
| Latency, k = 3, one RTX 5070 Ti | p50 88.7 ms, p95 279.3 ms |
| Languages | English, French |
| Licence | Apache 2.0 weights, MIT code |
Benchmarks
Paired comparisons, same items and same prompts; Kahn1 at k = 3 option orders, calibrated.
Table with columns: Benchmark, Kahn1 4B, Kahn1 3B, JevK5 v0.2, JEV 1.13.0| Benchmark | Kahn1 4B | Kahn1 3B | JevK5 v0.2 | JEV 1.13.0 |
|---|
| JevBench public, 231 items | 87.4 % | 67.5 % | 86.1 % | 86.6 % |
| · hard tier, 111 items | 75.7 % | 42.3 % | 73.9 % | 73.0 % |
| Held-out 14,663 items, like for like | 72.4 % | 70.3 % | not run | |
JevBench figures come from three different runners on the same 231 public items: ours for Kahn1, its
authors' own published run for JevK5 (JevBench's own run of JevK5 v0.2 scores 85.3 %), JevBench's for
JEV. Paired item by item, Kahn1 4B is on par with JevK5's own run (13 against 10 items only one gets
right, exact McNemar p = 0.68) and with Jev (13 against 11, p = 0.84).
Adapter
LoRA r = 16, α = 32, on q/k/v/o of Qwen3.5-4B's attention layers and on in_proj_qkv, in_proj_z,
in_proj_b, in_proj_a and out_proj of its linear-attention (Gated DeltaNet) layers. Prompts use
the base model's chat template with thinking off; the answer token is read right after
</think>.
Trained for two epochs (2,010 steps, lr 3e-5, effective batch 32) on 32,170 rows, 20.7 % of them
hard decision questions written by Claude Opus, with a cross-entropy restricted to the
candidate tokens and an ordinal term (squared EMD) on Score questions. Details on the
merged model's card.
import torchfrom peft import PeftModelfrom transformers import AutoModelForCausalLM, AutoTokenizer base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-4B", dtype=torch.bfloat16)model = PeftModel.from_pretrained(base, "Okura66/Kahn1-Qwen3.5-4B-LoRA")tokenizer = AutoTokenizer.from_pretrained("Okura66/Kahn1-Qwen3.5-4B-LoRA")
Qwen/Qwen3.5-4B also ships a vision encoder; scripts/merge_qwen_lora.py in the repository
merges the adapter into a text-only checkpoint. calibration.json holds the temperatures the
sysone engine applies.
License
Apache 2.0 (inherited from Qwen3.5). Engine code: MIT.