A JEV-style System 1 decision model: Qwen3.5-4B + LoRA + a 24-slot decision head, trained with train-jev. It does not generate text. It returns a calibrated probability for every option in one forward pass, so you can act on confident answers and route the rest to a person. Yes/no, multiple-choice and rating questions; the server speaks TypeSafe's System One API.
The small, fast one. Ahead of Kev-4B at the same size (13-dataset PK accuracy 0.647 vs 0.640, Decision Index 40.4 vs 38.4) with the lowest PK calibration error of all models compared (ECE 0.076). Runs on any 24 GB GPU, 43 ms per request. For the highest accuracy use train-jev-27b-lora.
git clone https://github.com/shibing624/train-jev.git && cd train-jev
pip install -r requirements.txt
python -m trainjev.serve --base Qwen/Qwen3.5-4B --adapter shibing624/train-jev-4b-lora --port 8020
curl -s localhost:8020/v1/systemone -H 'content-type: application/json' -d '{
"state": "Shoes arrived two weeks late and in the wrong size. Also I see two charges on my card.",
"questions": {
"department": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"returns": null, "shipping": null, "billing": null}},
"escalate": {"type": "noul", "instructions": "Does this need urgent human attention?"},
"frustration": {"type": "score", "instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]}
}}'
This repo holds the LoRA adapter, the decision head (head.pt) and the temperatures (calibration.json); the
backbone is downloaded on first start. Load it through train-jev: plain PEFT / Transformers loading applies the
adapter but not the head or the temperatures. More: serving guide.
Same questions for every model. β higher is better, β lower is better.
| Evaluation | train-jev-4b-lora | train-jev-27b-lora | Kev-4B | JEV-27B-VL | Jev 1.13 (API) |
|---|---|---|---|---|---|
| 13-dataset PK accuracy β | 0.647 | 0.678 | 0.640 | 0.690 | 0.700 |
| 13-dataset PK ECE β | 0.076 | 0.103 | 0.083 | 0.094 | 0.130 |
| Kev transfer-v4 accuracy β | 0.779 | 0.851 | 0.817 | 0.852 | 0.857 |
| Kev transfer-v4 ECE β | 0.075 | 0.053 | 0.042 | 0.097 | β |
| Decision Index 0.3 (35-benchmark sample) β | 40.4 | 54.6 | 38.4 | 54.1 | 59.7 |
| zero-shot image decisions β | 0.697 | 0.760 | not supported | 0.782 | β |
| single-request p50 latency (H20) | 43 ms | 82 ms | 17 ms | 96 ms | 370 ms |
Full protocol and breakdowns: docs/results.md.
Qwen3.5-4B with a rank-16 LoRA on every attention, DeltaNet and MLP projection, and a 24-slot fp32 head
(false/true, 0β5, AβP) initialised from the backbone's lm_head. Trained for 5,123 steps (batch 128) on
SargeDev/jev-distill-corpus-v3 with KL to the
teacher distribution plus 0.5 Γ RPS on rating questions; per-type temperatures fitted on a held-out calibration split.
Recipe: docs/training.md.
@misc{train-jev,
title={train-jev: Training JEV-style Decision Models},
author={Ming Xu},
year={2026},
howpublished={\url{https://github.com/shibing624/train-jev}}
}
Independent research reproduction, not affiliated with TypeSafe AI or autotrust. Apache-2.0.
A JEV-style System 1 decision model: Qwen3.5-4B + LoRA + a 24-slot decision head, trained with train-jev. It does not generate text. It returns a calibrated probability for every option in one forward pass, so you can act on confident answers and route the rest to a person. Yes/no, multiple-choice and rating questions; the server speaks TypeSafe's System One API.
The small, fast one. Ahead of Kev-4B at the same size (13-dataset PK accuracy 0.647 vs 0.640, Decision Index 40.4 vs 38.4) with the lowest PK calibration error of all models compared (ECE 0.076). Runs on any 24 GB GPU, 43 ms per request. For the highest accuracy use train-jev-27b-lora.
git clone https://github.com/shibing624/train-jev.git && cd train-jev
pip install -r requirements.txt
python -m trainjev.serve --base Qwen/Qwen3.5-4B --adapter shibing624/train-jev-4b-lora --port 8020
curl -s localhost:8020/v1/systemone -H 'content-type: application/json' -d '{
"state": "Shoes arrived two weeks late and in the wrong size. Also I see two charges on my card.",
"questions": {
"department": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"returns": null, "shipping": null, "billing": null}},
"escalate": {"type": "noul", "instructions": "Does this need urgent human attention?"},
"frustration": {"type": "score", "instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]}
}}'
This repo holds the LoRA adapter, the decision head (head.pt) and the temperatures (calibration.json); the
backbone is downloaded on first start. Load it through train-jev: plain PEFT / Transformers loading applies the
adapter but not the head or the temperatures. More: serving guide.
Same questions for every model. β higher is better, β lower is better.
| Evaluation | train-jev-4b-lora | train-jev-27b-lora | Kev-4B | JEV-27B-VL | Jev 1.13 (API) |
|---|---|---|---|---|---|
| 13-dataset PK accuracy β | 0.647 | 0.678 | 0.640 | 0.690 | 0.700 |
| 13-dataset PK ECE β | 0.076 | 0.103 | 0.083 | 0.094 | 0.130 |
| Kev transfer-v4 accuracy β | 0.779 | 0.851 | 0.817 | 0.852 | 0.857 |
| Kev transfer-v4 ECE β | 0.075 | 0.053 | 0.042 | 0.097 | β |
| Decision Index 0.3 (35-benchmark sample) β | 40.4 | 54.6 | 38.4 | 54.1 | 59.7 |
| zero-shot image decisions β | 0.697 | 0.760 | not supported | 0.782 | β |
| single-request p50 latency (H20) | 43 ms | 82 ms | 17 ms | 96 ms | 370 ms |
Full protocol and breakdowns: docs/results.md.
Qwen3.5-4B with a rank-16 LoRA on every attention, DeltaNet and MLP projection, and a 24-slot fp32 head
(false/true, 0β5, AβP) initialised from the backbone's lm_head. Trained for 5,123 steps (batch 128) on
SargeDev/jev-distill-corpus-v3 with KL to the
teacher distribution plus 0.5 Γ RPS on rating questions; per-type temperatures fitted on a held-out calibration split.
Recipe: docs/training.md.
@misc{train-jev,
title={train-jev: Training JEV-style Decision Models},
author={Ming Xu},
year={2026},
howpublished={\url{https://github.com/shibing624/train-jev}}
}
Independent research reproduction, not affiliated with TypeSafe AI or autotrust. Apache-2.0.