decider-12b v2: merged state-tracking LoRA (rank 32) on Gemma-4-12B-it; T choice 1.5 / noul 0.05 / score 1.0; v1 kept under tag v1
Browse files- README.md +54 -39
- decider_config.json +4 -4
- model.safetensors +1 -1
README.md
CHANGED
|
@@ -8,8 +8,8 @@ tags: [decision-model, calibrated, structured-output, system-one, one-pass]
|
|
| 8 |
|
| 9 |
# decider-12b: typed decisions with calibrated probabilities in one forward pass, on Gemma-4-12B-it
|
| 10 |
|
| 11 |
-
decider-12b is [google/gemma-4-12B-it](https://huggingface.co/google/gemma-4-12B-it) (revision `707f0a3b`)
|
| 12 |
-
|
| 13 |
|
| 14 |
- **Input:** a state and one or more typed questions (Choice, Noul yes/no, Score), each with an explicit option list.
|
| 15 |
- **Output:** a probability distribution over the options for every question, from one forward pass. There is no decoding and
|
|
@@ -18,7 +18,11 @@ unchanged, read through the decider readout. It is not trained further.
|
|
| 18 |
final-logit softcapping applied.
|
| 19 |
- **Temperatures:** one per answer type, in `decider_config.json`.
|
| 20 |
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
|
| 23 |
## Usage
|
| 24 |
|
|
@@ -33,51 +37,62 @@ d.system_one(state, {"refund": {"type": "noul", "instructions": "Is the refund a
|
|
| 33 |
|
| 34 |
Serving: `DECIDER_MODEL=Mapika/decider-12b uvicorn decider.serve:app` (POST `/v1/systemone`, the System One wire format).
|
| 35 |
|
| 36 |
-
##
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
-
|
|
|
|
|
|
|
|
|
|
| 49 |
|
| 50 |
-
|
| 51 |
-
- T 3.5 gives chance-corrected competence 59.9 (60.4 at best, 57.1 at T 1.0), with top-label ECE 0.044 (0.241 at T 1.0).
|
| 52 |
-
|
| 53 |
-
## Measurements (decider-ai 1.7.0, one B300)
|
| 54 |
|
| 55 |
-
|
|
| 56 |
|---|---|---|---|
|
| 57 |
-
|
|
| 58 |
-
|
|
| 59 |
-
|
|
| 60 |
-
| the same, argmax accuracy / share of answers between 0.2 and 0.8 | 0.822 / 4 % | 0.717 / 38 % | 0.737 / 21 % |
|
| 61 |
-
| latency per decision, serial, p50 / p95 | 20 ms / 155 ms | 33 ms / 55 ms | |
|
| 62 |
|
| 63 |
-
|
| 64 |
-
-
|
| 65 |
-
|
| 66 |
-
- The set was not used for anything but the Noul temperature, which was fitted on its fit half.
|
| 67 |
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
## Limitations
|
| 73 |
|
| 74 |
-
- The model
|
| 75 |
-
|
| 76 |
-
-
|
| 77 |
-
|
| 78 |
-
- Weakest measured area: state-tracking logs, with argmax accuracy 0.69 on the fresh set.
|
| 79 |
|
| 80 |
## Licence
|
| 81 |
|
| 82 |
-
Weights: google/gemma-4-12B-it, Apache-2.0 as published by Google.
|
| 83 |
Readout code: Apache-2.0 (github.com/Mapika/decider).
|
|
|
|
| 8 |
|
| 9 |
# decider-12b: typed decisions with calibrated probabilities in one forward pass, on Gemma-4-12B-it
|
| 10 |
|
| 11 |
+
decider-12b is [google/gemma-4-12B-it](https://huggingface.co/google/gemma-4-12B-it) (revision `707f0a3b`) read through
|
| 12 |
+
the decider readout.
|
| 13 |
|
| 14 |
- **Input:** a state and one or more typed questions (Choice, Noul yes/no, Score), each with an explicit option list.
|
| 15 |
- **Output:** a probability distribution over the options for every question, from one forward pass. There is no decoding and
|
|
|
|
| 18 |
final-logit softcapping applied.
|
| 19 |
- **Temperatures:** one per answer type, in `decider_config.json`.
|
| 20 |
|
| 21 |
+
**Version 2 (2026-09-29, this revision):** a merged LoRA fine-tune (state tracking) on top of the stock weights.
|
| 22 |
+
- Only the 328 attention and MLP projection matrices differ from Google's weights. The config, tokenizer and chat template are
|
| 23 |
+
Google's files unchanged.
|
| 24 |
+
- **Version 1** is stock Gemma-4-12B-it with no training. It is kept under the tag `v1`:
|
| 25 |
+
`Decider("Mapika/decider-12b", revision="v1")`.
|
| 26 |
|
| 27 |
## Usage
|
| 28 |
|
|
|
|
| 37 |
|
| 38 |
Serving: `DECIDER_MODEL=Mapika/decider-12b uvicorn decider.serve:app` (POST `/v1/systemone`, the System One wire format).
|
| 39 |
|
| 40 |
+
## Training (version 2)
|
| 41 |
+
|
| 42 |
+
- **Method:** LoRA rank 32, alpha 64, on q/k/v/o/gate/up/down. One epoch of 10,000 items (10.6M tokens), LR 5e-5 cosine,
|
| 43 |
+
one B300, 45 minutes. The loss is cross-entropy over the option letters at the answer slot, in the same chat layout as serving.
|
| 44 |
+
- **Data:**
|
| 45 |
+
- **6,000 generated state-tracking decisions:** event logs over seven invented domains (library loans, parking permits, hotel
|
| 46 |
+
rooms, sprint boards, vehicle fleets, licence seats, lab samples). They include rejected entries, VOID and CORRECTION
|
| 47 |
+
entries, aliases and out-of-order exports, rendered as logs, tables, prose and JSON.
|
| 48 |
+
- The gold answers are computed by replaying the log.
|
| 49 |
+
- Of 104 yes/no rows answered blind by GLM-5.3-Flash, 101 agree with the computed gold.
|
| 50 |
+
- **4,000 rows from our earlier training data, replayed:**
|
| 51 |
+
- 836 human-labelled public datasets;
|
| 52 |
+
- 2,047 from our own generated decision families, written without reading JevBench items;
|
| 53 |
+
- 1,117 teacher-written document questions.
|
| 54 |
+
- **Not used for training or selection:** JevBench items, public or sealed; Decision Index rows. The checkpoint and the
|
| 55 |
+
temperatures were chosen on our own held-out sets only.
|
| 56 |
|
| 57 |
+
## Temperatures
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
+
| type | v2 T | v1 T | fitted on (our own rows) |
|
| 60 |
|---|---|---|---|
|
| 61 |
+
| Choice | 1.5 | 4.0 | NLL and top-label ECE over 2,113 held-out Choice rows |
|
| 62 |
+
| Noul | 0.05 | 1.0 | chance-corrected v1.5 Noul score on 685 rows plus the 204-item fit half of a fresh yes/no set |
|
| 63 |
+
| Score | 1.0 | 3.5 | chance-corrected Score competence on 246 rows |
|
|
|
|
|
|
|
| 64 |
|
| 65 |
+
- The fine-tune leaves the model less confident, so every temperature is lower than in v1.
|
| 66 |
+
- Noul is read sharp. JevBench v1.5 counts a yes/no answer with P(yes) between 0.2 and 0.8 as wrong, and at T 0.05 about 1% of
|
| 67 |
+
answers fall in that band.
|
|
|
|
| 68 |
|
| 69 |
+
## Measurements (decider-ai 1.8.0, one B300, each version at its own temperatures)
|
| 70 |
+
|
| 71 |
+
| set | v2 | v1 |
|
| 72 |
+
|---|---|---|
|
| 73 |
+
| fresh 399-item yes/no set, test half (195), v1.5 chance-corrected Noul score | 71.6 | 58.8 |
|
| 74 |
+
| same, argmax accuracy / share of answers between 0.2 and 0.8 / ECE | 0.856 / 1 % / 0.144 | 0.805 / 6 % / 0.181 |
|
| 75 |
+
| same set, 80 generated state-tracking logs (another generator than training), argmax | 0.750 | 0.675 |
|
| 76 |
+
| same set, 319 written items, argmax | 0.871 | 0.859 |
|
| 77 |
+
| held-out generated decisions (1,500) and teacher questions (944): Choice accuracy | 0.615 | 0.588 |
|
| 78 |
+
| same rows: Noul accuracy / chance-corrected Noul score | 0.790 / 57.1 | 0.740 / 38.7 |
|
| 79 |
+
| same rows: chance-corrected Score competence | 61.2 | 60.1 |
|
| 80 |
+
| human-labelled Choice rows (600): accuracy / ECE | 0.847 / 0.015 | 0.845 / 0.024 |
|
| 81 |
+
| JevBench public items, accuracy easy / standard / hard | 1.000 / 0.986 / 0.712 | 1.000 / 0.986 / 0.730 |
|
| 82 |
+
| JevBench public hard tier, top-label ECE | 0.147 | 0.098 |
|
| 83 |
+
|
| 84 |
+
- The public JevBench items were read for measurement only.
|
| 85 |
+
- On the hard tier (111 items), v2 answers 79 correctly and v1 answers 81.
|
| 86 |
+
- Hard-tier calibration is worse in v2.
|
| 87 |
|
| 88 |
## Limitations
|
| 89 |
|
| 90 |
+
- The base model's strengths and failure modes carry over.
|
| 91 |
+
- The fine-tune targets state tracking over event logs. Gains elsewhere come from the replayed rows and are 1-5 points.
|
| 92 |
+
- On the JevBench public hard tier, v2 is not better than v1: 79 vs 81 correct of 111, and ECE 0.147 vs 0.098.
|
| 93 |
+
- Per-dataset calibration still varies: knowledge multiple choice is underconfident, and hard reasoning is overconfident.
|
|
|
|
| 94 |
|
| 95 |
## Licence
|
| 96 |
|
| 97 |
+
Weights: derived from google/gemma-4-12B-it, Apache-2.0 as published by Google.
|
| 98 |
Readout code: Apache-2.0 (github.com/Mapika/decider).
|
decider_config.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
{
|
| 2 |
-
"version": "12b-
|
| 3 |
"layout": "chat",
|
| 4 |
-
"temperature":
|
| 5 |
-
"temperature_by_type": {"choice":
|
| 6 |
"neutralize_none": false,
|
| 7 |
"isolated_levels": false,
|
| 8 |
-
"base": "google/gemma-4-12B-it (revision 707f0a3b),
|
| 9 |
"requires": "decider-ai>=1.7.0 (final-logit softcapping)"
|
| 10 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"version": "12b-v2",
|
| 3 |
"layout": "chat",
|
| 4 |
+
"temperature": 1.5,
|
| 5 |
+
"temperature_by_type": {"choice": 1.5, "noul": 0.05, "score": 1.0},
|
| 6 |
"neutralize_none": false,
|
| 7 |
"isolated_levels": false,
|
| 8 |
+
"base": "google/gemma-4-12B-it (revision 707f0a3b) + merged LoRA (rank 32, attention and MLP), state-tracking fine-tune",
|
| 9 |
"requires": "decider-ai>=1.7.0 (final-logit softcapping)"
|
| 10 |
}
|
model.safetensors
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 23919549408
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:efb90aaf7521515851584f673ff4513027abb84df97a9ad2aa4fe27bc250770a
|
| 3 |
size 23919549408
|