Version ledger
LoRA fine-tunes of unsloth/gemma-3-4b-it as a closed-set command router (one JSON tool call per utterance), trained and served on 8 GB NVIDIA consumer cards, 13-25 Sep 2026.
Version ledger
One row per trained model or variant. Test sets differ between eras, so compare accuracy only within one test set. Each version links to its full record below.
| Version | Headline result | Status | Rank | Corpus examples | Epochs | Alpha | rsLoRA | Dropout | Peak VRAM (MB) | Trained | Alias | Ollama tag |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| v1 | 80.4% on 550 () | 16 | 152 | 3 | 16 | no | 0 | 4926 | 2026-09-13 to 2026-09-14 | gemma3-4b-router-finetuned | ||
| v2 | 89.6% on 550 () | 16 | 490 | 3 | 16 | no | 0 | 5053 | ended 2026-09-14 | gemma3-4b-router-v2 | ||
| v3 | 89.8% on 790 () | 16 | 696 | 3 | 16 | no | 0 | 5040 | ended 2026-09-14 | gemma3-4b-router-v3 | ||
| v4 | 82.9% on 865 () | 16 | 59 | 8 | 16 | no | 0 | 4889 | ended 2026-09-15 | gemma3-4b-router-v4 | ||
| v5 | 89.2% on 865 () | deployed unverified | 16 | 757 | 3 | 16 | no | 0 | 5117 | ended 2026-09-15 | marvin-v1.0 | gemma3-4b-router-v5 |
| v5-q4 | 86.1% on 865 () | rejected | gemma3-4b-router-v5-q4 | |||||||||
| v6-wide | 93.1% on 865 () | unverified | 64 | 757 | 3 | 64 | no | 0 | 5796 | ended 2026-09-17 | gemma3-4b-router-v6-wide | |
| v7 | 94.3% on 865 () | deployed unverified | 112 | 757 | 3 | 112 | no | 0 | 6647 | ended 2026-09-17 | marvin-v1.1 | gemma3-4b-router-v7-r112 |
| v8 | 88.8% on 1,036 raw () | 112 | 1050 | 3 | 112 | no | 0 | 6643 | ended 2026-09-18 | gemma3-4b-router-v8-r112 | ||
| v9-step175 | 86.6% on 1,021 runnable () | rejected | 112 | 1080 | 112 | no | 0 | gemma3-4b-router-v9-r112-ckpt175 | ||||
| v9 | 93.0% on 1,021 runnable () | deployed | 112 | 1080 | 3 | 112 | no | 0 | 6643 | ended 2026-09-19 | marvin-v1.2 | gemma3-4b-router-v9-r112 |
| v10-r64 | 91.6% on 1,125, harness fixed () | 64 | 1080 | 3 | 64 | no | 0 | 5767 | ended 2026-09-20 | gemma3-4b-router-v10-r64 | ||
| v11 | 96.4% on 1,125, harness fixed () | 112 | 1167 | 3 | 112 | no | 0 | 6648 | 2026-09-20 to 2026-09-21 | marvin-v1.3 | gemma3-4b-router-v11-r112 | |
| v12-e2 | 95.6% on 1,131 () | 112 | 1167 | 2 | 112 | no | 0 | 6648 | ended 2026-09-21 | gemma3-4b-router-v12-r112-e2 | ||
| v11+grammar | 95.7% on 1,125 () | gemma3-4b-router-v11-r112 | ||||||||||
| v11-avg | 96.9% on 1,131 () | gemma3-4b-router-v11-avg | ||||||||||
| v13-rslora-a112 (killed) | 112 | 112 | yes | 0 | ||||||||
| v13 | 97.5% on 1,131 () | rejected | 112 | 1172 | 3 | 32 | yes | 0 | 6653 | ended 2026-09-22 | gemma3-4b-router-v13-r112-rslora-a32 | |
| v13-avg | 97.2% on 1,131 () | gemma3-4b-router-v13-avg | ||||||||||
| v13-ck225 | 83.8% on 1,131 () | 0 | gemma3-4b-router-v13-ck225 | |||||||||
| v14 | 87.0% on 1,131 () | 112 | 1172 | 3 | 32 | yes | 0.1 | gemma3-4b-router-v14-ck225 | ||||
| v15 | 96.8% on 1,131 () | rejected | 96 | 1172 | 3 | 30 | yes | 0.1 | 6629 | ended 2026-09-23 | gemma3-4b-router-v15-r96-drop10 | |
| v16 | 90.2% on 1,148 () | 112 | 873 | 3 | 112 | no | 0 | 6653 | 2026-09-23 to 2026-09-24 | gemma3-4b-router-v16-disjoint | ||
| v17 | 95.2% on 1,275 () | deployed | 112 | 1189 | 3 | 112 | no | 0 | 6658 | 2026-09-24 to 2026-09-25 | marvin-v1.3 | gemma3-4b-router-v17-full |
Test-set eras
The test set grew over the program. A number from one era does not compare with a number from another.
| Cases | Note | Runnable | Kind | Held out | flags | Measured on |
|---|---|---|---|---|---|---|
| 550 | 535 regression + 15 hard cases | |||||
| 790 | 775 regression + 15 hard; 240 new cases weighted toward known weak capabilities | |||||
| 865 | 850 regression + 15 hard | |||||
| 1036 | v8 bake; 60 cases whose capability is disabled on the host were counted as failures in the raw summary | 976 | inferred | |||
| 1081 | disabled-capability cases skipped for every model from here on | 1021 | ||||
| 1125 | first set scored with the harness channel fix (context cases routed on their own channel) | |||||
| 1131 | 1,125 + six two-turn-back context cases; 1,021 train-flagged + 110 held-out | |||||
| 1191 | all-caps run: 1,131 plus the 60 flag-gated desktop/finance cases enabled | |||||
| 1148 | v16 bake with the disjoint-split manifest; 749 train-flagged + 399 held-out | |||||
| 1275 | adds 127 never-seen cases (86 adversarial guards, 41 session-capability) | |||||
| 174 | guard set | 48 | ||||
| 181 | guard set | |||||
| 267 | guard set, expanded with 86 adversarial guards |
Definitions
- Accuracy definition
- passed / runnable cases. A case passes when the router returns the asserted capability and arguments, and none of the case's forbidden capabilities.
- Held out definition
- cases with no training label in the corpus the model was trained on. The held-out slice changed size as the case file grew, so compare held-out numbers only within one test-set era.
- Fair slice definition
- cases carrying no train key at all, which neither compared model ever saw (used for v16 and v17).
- Guard definition
- must-not-fire cases: utterances that must NOT route to a named capability (negations, quoted or pasted content, vague phrasing). Counts only; case text is excluded.
- Speed definition
- mean seconds per case through the production routing prompt (~5.6k tokens), model fully on GPU unless noted.
- Dates
- UTC. measured_on is the file timestamp of the result, or the date the program notes records.
- Shared recipe
- see recipe.json; per-version config below lists only what differs or what the training log confirms.
Per-version records
v1
- Ollama tag
gemma3-4b-router-finetuned- base model
unsloth/gemma-3-4b-it- Corpus examples
- 152
- trained
- Start: 2026-09-13; End: 2026-09-14T00:26Z
- what changed
- First LoRA, on 152 curated examples mostly mined from the untuned router's own logged decisions plus a first batch of hand-authored gold cases.
- outcome
- Regressed: 4.9 pp below the untuned 12B baseline (85.3%). Not caught until v2's bake, because v1 was never evaluated after training.
Config
- Rank
- 16
- Alpha
- 16
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 57
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.3685
- Peak VRAM MB
- 4926
- Runtime s
- 4616
- Measured on
Results
| Test set | Passed | Accuracy | Wall clock s | Measured on |
|---|---|---|---|---|
| 550 | 442 | 0.8036 | 1081.2 |
v2
- Ollama tag
gemma3-4b-router-v2- base model
unsloth/gemma-3-4b-it- Corpus examples
- 490
- trained
- End: 2026-09-14T07:08Z
- what changed
- Corpus tripled with hand-authored gold cases weighted toward vague and ambiguous phrasing and full per-capability coverage.
- outcome
- First fine-tune to beat the untuned baseline: +4.3 pp over gemma4:12b-it-qat on the same 550 cases.
Config
- Rank
- 16
- Alpha
- 16
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 186
- Lr
- 0.0002
- Measured on
Training
- Final segment train loss
- 0.0274
- Peak VRAM MB
- 5053
- Relaunches
- 9
- Note
- train_loss covers only the last resumed segment, not the run
- Measured on
Results
| Test set | Passed | Accuracy | Wall clock s | Capability | Total | Failure shape | Measured on |
|---|---|---|---|---|---|---|---|
| 550 | 493 | 0.8964 | 1028.8 | ||||
| 550 | 27 | 0.562 | clarify | 48 | |||
| 550 | 12 of 57 misses picked a forbidden capability (21%), vs 6/81 for the untuned 12B and 8/108 for v1 |
v3
- Ollama tag
gemma3-4b-router-v3- base model
unsloth/gemma-3-4b-it- Corpus examples
- 696
- trained
- End: 2026-09-14T23:57Z
- what changed
- 240 new gold cases for the capabilities v2 missed most; full corpus, fresh from base.
- outcome
- Held: same score as v2 on a set 240 cases harder. Not comparable to v2's number (different test set).
Config
- Rank
- 16
- Alpha
- 16
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 261
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1502
- Peak VRAM MB
- 5040
- Runtime s
- 21162
- Relaunches
- 0
- Measured on
Results
| Test set | Passed | Accuracy | Wall clock s | Capability | Measured on |
|---|---|---|---|---|---|
| 790 | 709 | 0.8975 | 1056.8 | ||
| 790 | 0.604 | clarify |
v4
- Ollama tag
gemma3-4b-router-v4- base model
v3's adapter (continued, not fresh from base)- Corpus examples
- 59
- trained
- End: 2026-09-15T02:32Z; Conflict: The program notes and the training script's docstring date the run 2026-09-16; file timestamps (train log 09-15 02:32, bake summary 09-15 02:54) say 2026-09-15. Trust the file timestamps.
- what changed
- Incremental patch: only the 59 new or corrected examples, 8 epochs, continued from v3's adapter.
- outcome
- Catastrophic forgetting. Capabilities the patch never touched collapsed to 25-56%. Never deployed.
Config
- Rank
- 16
- Alpha
- 16
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 8
- Optimizer steps
- 64
- Lr
- 0.0002
- Continued from
- v3 adapter
- Measured on
Training
- Train loss
- 0.0522
- Peak VRAM MB
- 4889
- Runtime s
- 4778
- Measured on
Results
| Test set | Passed | Accuracy | Wall clock s | Total | Vs v3 | Per capability | Before v3 | Measured on |
|---|---|---|---|---|---|---|---|---|
| 865 | 717 | 0.8289 | 1156.9 | |||||
| the 790 cases v3 was scored on | 651 | 0.8241 | 790 | -0.0734 | ||||
| 790 subset | Run agent: 0.25; Resume agent: 0.417; Dispatch code: 0.524; Calendar availability: 0.562; Clarify: 0.525; Gate reject: 1.0; Dispatch answer: 0.931 | Run agent: ~1.0; Resume agent: 0.86-1.0; Dispatch code: 0.91-1.0; Calendar availability: 1.0; Clarify: 0.604 |
v5
- alias
- marvin-v1.0
- Ollama tag
gemma3-4b-router-v5- base model
unsloth/gemma-3-4b-it- Corpus examples
- 757
- trained
- End: 2026-09-15T11:32Z
- what changed
- v4's 59 examples mixed into the full corpus and retrained fresh from base.
- outcome
- Repaired v4's damage (run_agent, resume_agent, dispatch_code, calendar_availability all back to 100% on the 790 subset). Deployed 15 Sep.
Config
- Rank
- 16
- Alpha
- 16
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 285
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.0729
- Peak VRAM MB
- 5117
- Kills by low memory monitor
- 4
- Note
- train_loss and runtime cover the last resumed segment
- Measured on
Results
| Test set | Passed | Accuracy | Wall clock s | S per case | Quant | Total | Note | Held out accuracy | flags | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|
| 865 | 772 | 0.8925 | 1141.5 | |||||||
| 865 | 773 | 0.8936 | 1.506 | Q8_0 | ||||||
| 865 | 770 | 0.8902 | 1.333 | |||||||
| old 790 subset | 709 | 0.8975 | 790 | identical to v3 to the case | ||||||
| 75 cases new since v3 | 63 | 0.84 | 75 | |||||||
| 865 | ledger-only. Recomputing from the bake progress file with today's train flags gives a different split (flags changed after 09-18), so this could not be reproduced. | 0.849 | unverified |
v5-q4
- Ollama tag
gemma3-4b-router-v5-q4- base model
same merged weights as v5- what changed
- Quantization only.
- outcome
- Rejected: -3.2 pp for ~15% speed. Q8_0 stays.
Config
- Quant
- Q4_0
- GGUF size GB
- 2.37
- Measured on
Results
| Test set | Passed | Accuracy | S per case | Delta vs q8 | Speed ratio vs q8 | Measured on |
|---|---|---|---|---|---|---|
| 865 | 745 | 0.8613 | 1.278 | -0.0323 | 0.849 |
v6-wide
- Ollama tag
gemma3-4b-router-v6-wide- base model
unsloth/gemma-3-4b-it- Corpus examples
- 757
- trained
- End: 2026-09-17T01:46Z
- what changed
- Rank 16 to 64 (alpha kept equal to rank). Same 757 examples, same recipe, fresh from base.
- outcome
- +4.0 pp over v5 from rank alone. The two passes a day apart (93.1% / 93.9%) set the noise floor for this era.
Config
- Rank
- 64
- Alpha
- 64
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 285
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1227
- Peak VRAM MB
- 5796
- Runtime s
- 23944
- Measured on
Results
| Test set | Passed | Accuracy | S per case | Capability | Accuracy before | Accuracy after | N | Held out accuracy | flags | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|
| 865 | 805 | 0.9306 | 1.223 | |||||||
| 865 | 812 | 0.9387 | 1.25 | |||||||
| 865 | clarify | 0.521 | 0.755 | 94 | ||||||
| 865 | 0.855, 0.882 | unverified |
v7
- alias
- marvin-v1.1
- Ollama tag
gemma3-4b-router-v7-r112- base model
unsloth/gemma-3-4b-it- Corpus examples
- 757
- trained
- End: 2026-09-17T23:06Z
- what changed
- Rank 64 to 112, the highest rank that fit on the 8 GB card.
- outcome
- +0.5 pp over v6-wide, inside v6-wide's own day-to-day spread. Shipped 18 Sep, replaced by v9 on 19 Sep.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 285
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1251
- Peak VRAM MB
- 6647
- Runtime s
- 24217
- Measured on
Results
| Test set | Passed | Accuracy | S per case clean | S per case raw | Note | Per capability | Held out passed | Held out total | Held out accuracy | S per case | Train flagged accuracy | flags | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 865 | 816 | 0.9434 | 1.26 | 1.707 | raw speed polluted: first 253 cases ran split CPU/GPU | ||||||||
| 865 | v6-wide then v7; 27 cases fixed, 23 broken | Clarify: 0.745, 0.851; Context setup cases n31: 0.968, 0.871 | |||||||||||
| 1,021 runnable | 933 | 0.9138 | 76 | 91 | 0.8352 | 1.269 | |||||||
| 1,036 raw (v8 era) | 906 | 0.8745 | 69 | 90 | 1.427 | ||||||||
| 108-case held-out slice, harness fixed | 92 | 0.8519 | |||||||||||
| 865 | 0.871 | 0.963 | unverified |
v8
- Ollama tag
gemma3-4b-router-v8-r112- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1050
- trained
- End: 2026-09-18T11:19Z
- what changed
- Enriched corpus: 126 negative-guard cases given targets, setup context rendered into prompts (27 context cases had trained context-free), clarify-chain turns exported, 171 gold cases including the 9 capabilities that had zero examples.
- outcome
- Mixed, not deployed. Guards rose 19-50 pp, but four new clarify labels on bare confirmation words contradicted older gold and dropped gate_approve from 100% to 70%.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 396
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1117
- Peak VRAM MB
- 6643
- Runtime s
- 34881
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | Held out accuracy | S per case | Conflict | Per capability | Guard families gain pp | flags | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1,036 raw | 920 | 0.888 | 71 | 90 | 0.7889 | 1.249 | |||||
| 976 runnable | 0.943 | 0.91 | The raw summary scores 88.8% on 1,036 because 60 disabled-capability cases count as failures. 920/976 = 94.3% matches the program notes, so the program notes number is the raw one with those 60 removed. The held-out 91.0% would need ~12 of the 60 to be held-out (71/78); not verifiable from the summary. | inferred | |||||||
| 976 runnable | Gate approve: 1.0, 0.7 | 19 to 50 |
v9-step175
- Ollama tag
gemma3-4b-router-v9-r112-ckpt175- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1080
- what changed
- Same run as v9, earlier checkpoint.
- outcome
- Rejected. Tied the final checkpoint on held-out, lost 6.5 pp overall. Eval loss on partial-argument targets does not select for accuracy.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Checkpoint step
- 175
- Of steps
- 405
- Selected by
- lowest held-out eval loss (0.1306)
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | Held out accuracy | S per case | Measured on |
|---|---|---|---|---|---|---|---|
| 1,021 runnable | 884 | 0.8658 | 79 | 91 | 0.8681 | 1.31 | |
| 108-case held-out slice, harness fixed | 96 | 0.8889 |
v9
- alias
- marvin-v1.2
- Ollama tag
gemma3-4b-router-v9-r112- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1080
- Eval examples
- 55
- trained
- End: 2026-09-19T04:41Z
- what changed
- v8's corpus with the conflicting labels removed and 35 counterweight cases added; held-out eval loss logged every 25 steps, every checkpoint kept.
- outcome
- Deployed 19 Sep. First fine-tune to beat the untuned 12B on held-out once the harness was fixed (91.7% vs 88.9%).
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 405
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1115
- Peak VRAM MB
- 6643
- Runtime s
- 38218
- Eval loss best
- Step: 175; Loss: 0.1306
- Eval loss final
- 0.1861
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | Held out accuracy | S per case | Passed per run | Accuracy per run | Mean accuracy | Spread pp | Held out passed per run | Held out breaches | Per capability | Fixed vs v7 | Broke vs v7 | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1,021 runnable | 950 | 0.9305 | 79 | 91 | 0.8681 | 1.303 | ||||||||||
| 1,125, harness fixed | 1050 | 0.9333 | 99 | 108 | 1.264 | |||||||||||
| 1,125, harness fixed | 1047 | 0.9307 | 99 | 108 | 1.34 | |||||||||||
| 1,125, harness fixed | 1043 | 0.9271 | 100 | 108 | 1.332 | |||||||||||
| 1,191 all-caps x3 | 122 | 1098, 1112, 1112 | 0.9219, 0.9337, 0.9337 | 0.9298 | 1.18 | 111, 112, 111 | ||||||||||
| 174 guards | 167 | 1 | ||||||||||||||
| 1,021 runnable | Gate approve: 0.94; Dispatch answer: 0.59; Guards: 0.96-1.0 | 45 | 28 |
v10-r64
- Ollama tag
gemma3-4b-router-v10-r64- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1080
- trained
- End: 2026-09-20T06:03Z
- what changed
- v9's exact data and recipe at rank 64. Rank the only variable.
- outcome
- -1.4 pp vs v9 at rank 112 on the same data; clarify 86% to 73%. Rank 112 stays.
Config
- Rank
- 64
- Alpha
- 64
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 405
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1103
- Peak VRAM MB
- 5767
- Runtime s
- 37684
- Eval loss best
- Step: 125; Loss: 0.1372
- Eval loss final
- 0.1839
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | Held out accuracy | S per case | Capability | Rank112 same data | Measured on |
|---|---|---|---|---|---|---|---|---|---|
| 1,125, harness fixed | 1031 | 0.9164 | 98 | 108 | 0.9074 | 1.224 | |||
| 1,125, harness fixed | 0.73 | clarify | 0.86 |
v11
- alias
- marvin-v1.3 (25 Sep 06:42 to 08:10 UTC, then re-pointed to v17)
- Ollama tag
gemma3-4b-router-v11-r112- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1167
- Eval examples
- 72
- trained
- Start: 2026-09-20T13:27Z; End: 2026-09-21T01:18Z
- what changed
- Corpus 1,167: new compound and correct_last capabilities, 121 context cases, clarify chains, 40 dispatch_answer positives.
- outcome
- Best and most stable accuracy of the program. Won the accuracy rule against six challengers (v12, v13, v15, v16, v17 and both averages). Released as marvin-v1.3, then replaced the same morning by v17 on guard behaviour.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 438
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1073
- Peak VRAM MB
- 6648
- Runtime s
- 42633
- Eval loss best
- Step: 75; Loss: 0.2727
- Eval loss final
- 0.3997
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | S per case | Passes | Accuracy range | Train flagged accuracy | Held out accuracy | Passed per run | Mean accuracy | Spread pp | Held out per run | Fair slice | Held out breaches | Breach categories in rechecks | Per capability changes | Note | Lowest capabilities | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1,125, harness fixed | 1084 | 0.9636 | 104 | 108 | 1.245 | |||||||||||||||
| 1,131 | (Passed: 1090, Held out: 108/110; measured on ); (Passed: 1090, Held out: 108/110; measured on ); (Passed: 1091, Held out: 108/110; measured on ); (Passed: 1090, Held out: 108/110; measured on ); (Passed: 1090, Held out: 107/110; measured on ) | 0.9637, 0.9646 | 0.9618 | 0.9818 | ||||||||||||||||
| 1,191 all-caps x3 | 1145, 1144, 1145 | 0.9611 | 0.09 | 117/122 each | ||||||||||||||||
| 1,148 (v16 manifest) | 1101 | 0.9591 | 379 | 399 | 1.194 | |||||||||||||||
| 82 cases held out from both v11 and v16 | 0.963 | |||||||||||||||||||
| 317 cases v11 trained on and v16 did not | 0.946 | |||||||||||||||||||
| 1,275 expanded | 1212 | 0.9506 | 490 | 526 | 1.197 | |||||||||||||||
| 1,275 (v17 bake) | 1211 | 0.9498 | 222 | 237 | 1.187 | 93/100 | ||||||||||||||
| 174 guards | 169 | 1 | ||||||||||||||||||
| 181 guards | 172 | 1 | ||||||||||||||||||
| 267 guards | (Passed: 250, Held out breaches: 5; measured on ); (Passed: 247, Held out breaches: 4; measured on ); (Passed: 250, Held out breaches: 5; measured on ); (Passed: 250, Held out breaches: 5; measured on ); (Passed: 250, Held out breaches: 5; measured on ) | 3 of 5 held-out breaches involve pasted or quoted content; 1 vague phrasing; 1 session-capability | ||||||||||||||||||
| 1,125-1,131 | Compound: 0.11, 0.89; Correct last: 0.0, 1.0; Gate reject: 0.88, 0.98; Guard:open folder: 1.0, 0.88 | vs marvin-v1.2; open_folder guard n=8 | ||||||||||||||||||
| 10 pooled passes | Gate approve: Accuracy: 0.766, Ci: 0.719, 0.807, Cases: 35; Clarify: Accuracy: 0.827, Ci: 0.801, 0.849, Cases: 98; Explain issue: Accuracy: 0.855, Cases: 11; Compound: Accuracy: 0.906, Cases: 18 |
v12-e2
- Ollama tag
gemma3-4b-router-v12-r112-e2- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1167
- trained
- End: 2026-09-21T14:55Z
- what changed
- v11's exact data and recipe at 2 epochs. Epochs the only variable.
- outcome
- -0.8 pp and -4 held-out cases vs v11, mostly clarify (wrong answers went to converse). Lowest final eval loss of any run, and still worse. Three epochs stays.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 2
- Optimizer steps
- 292
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1417
- Peak VRAM MB
- 6648
- Runtime s
- 28440
- Eval loss best
- Step: 125; Loss: 0.2589
- Eval loss final
- 0.2934
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | S per case | Broke vs v11 | Fixed vs v11 | Measured on |
|---|---|---|---|---|---|---|---|---|
| 1,131 | 1081 | 0.9558 | 104 | 110 | 1.236 | 26 | 17 |
v11+grammar
- Ollama tag
gemma3-4b-router-v11-r112 (same weights)- what changed
- Decoding only.
- outcome
- +0.1 pp once the enum was correct. Turned on in production with the 25 Sep release.
Config
- Change
- Ollama structured output: JSON schema with a capability enum enforced at decode time
- Measured on
Results
| Attempt | Test set | Passed | Accuracy | Held out passed | Held out total | S per case | Note | Unparseable outputs | Broke | Fixed | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|---|
| first (enum missing a router-hidden capability) | 1,125 | 1077 | 0.9573 | 103 | 108 | 1.287 | 10 cases broke, 8 of them the hidden capability forced to clarify | ||||
| fixed enum | 1,131 | 1092 | 0.9655 | 108 | 110 | 1.266 | 3, 1 | 1 | 3 |
v11-avg
- Ollama tag
gemma3-4b-router-v11-avg- what changed
- No training; weight averaging only.
- outcome
- Noise: +0.4 pp on the first bake, +0.0 on the second; held-out identical both times.
Config
- Method
- exact mean of v11 checkpoints 300, 325, 350, 375, 400, 425, 438 by concatenating LoRA A and B along the rank axis (r = 7 x 112, alpha unchanged)
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | S per case | Note | Measured on |
|---|---|---|---|---|---|---|---|
| 1,131 | 1096 | 0.9691 | 108 | 110 | 1.235 | ||
| 1,131 | 1090 | 0.9637 | 108 | 110 | 3.615 | speed contention-affected |
v13-rslora-a112 (killed)
- what changed
- rsLoRA with alpha left equal to rank.
- outcome
- Killed early. Eval loss flatlined; scale 10.6 is too hot at lr 2e-4.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- yes
- Effective scale
- 10.6
- Dropout
- 0
- Lr
- 0.0002
- Measured on
Training
- Eval loss step25
- 0.5734
- Eval loss step50
- 0.577
- V11 eval loss same steps
- 0.35, 0.33
- Train loss peak
- 3.85
- Measured on
v13
- Ollama tag
gemma3-4b-router-v13-r112-rslora-a32- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1172
- Eval examples
- 74
- trained
- End: 2026-09-22T06:35Z
- what changed
- rsLoRA at alpha 32 on the 21 Sep corpus (1,172 examples: 6 new two-turn-back context cases, 2 label fixes, 18 conflicts excluded).
- outcome
- Rejected. Highest overall number of the program, but every gained case was train-flagged and it lost held-out safety guards v11 passes.
Config
- Rank
- 112
- Alpha
- 32
- RsLoRA
- yes
- Effective scale
- 3.02
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 441
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1246
- Peak VRAM MB
- 6653
- Runtime s
- 42946
- Eval loss best
- Step: 100; Loss: 0.2519
- Eval loss final
- 0.3497
- Measured on
Results
| Test set | Passed | Accuracy | Train flagged accuracy | Held out passed | Held out total | S per case | Fixed vs v11 | Broke vs v11 | Gains | Unparseable outputs | Held out breaches | Breach categories | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1,131 | 1103 | 0.9752 | 0.9794 | 103 | 110 | 1.238 | |||||||
| 1,131 | 1104 | 0.9761 | 103 | 110 | |||||||||
| 1,131 | 29 | 16 | Gate approve: 9; Clarify: 9; Dispatch answer: 3 | 3, 1 | |||||||||
| 174 guards | 168 | 3 | 2 of 3 involve pasted or quoted content; 1 is an argument confusion between two knowledge capabilities |
v13-avg
- Ollama tag
gemma3-4b-router-v13-avg- what changed
- No training; weight averaging only.
- outcome
- -0.4 pp vs v13 with one more held-out miss. Did not recover the guard losses.
Config
- Method
- exact checkpoint mean, with B scaled by a further 1/sqrt(n) because rsLoRA scales by alpha/sqrt(r)
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | Measured on |
|---|---|---|---|---|---|
| 1,131 | 1099 | 0.9717 | 102 | 110 |
v13-ck225
- Ollama tag
gemma3-4b-router-v13-ck225- what changed
- Mid-run checkpoint.
- outcome
- Only the delta to v14-ck225 means anything; absolute scores are for a half-trained model.
Config
- Checkpoint step
- 225
- Of steps
- 441
- Dropout
- 0
- Note
- about 1.5 epochs; control arm of the dropout A/B
- Measured on
Results
| Test set | Passed | Accuracy | Train flagged accuracy | Held out passed | Held out total | Held out breaches | Measured on |
|---|---|---|---|---|---|---|---|
| 1,131 | 948 | 0.8382 | 0.8394 | 91 | 110 | ||
| 174 guards | 148 | 10 |
v14
- Ollama tag
gemma3-4b-router-v14-ck225 (only the step-225 checkpoint was deployed)- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1172
- trained
- Attempts: 2026-09-22T20:16Z, 2026-09-23T01:23Z, 2026-09-23T03:06Z
- what changed
- v13's recipe plus LoRA dropout 0.1.
- outcome
- Would not fit at rank 112. At equal steps dropout added 3.2 pp, all on train-flagged cases, and widened the train-to-held-out gap from 1.2 to 6.8 pp. Guards improved 148 to 157.
Config
- Rank
- 112
- Alpha
- 32
- RsLoRA
- yes
- Dropout
- 0.1
- Epochs
- 3
- Planned steps
- 441
- Lr
- 0.0002
- Measured on
Training
- Died at steps
- 184, 236, 239
- Causes
- CUDA illegal memory access (Xid 31 MMU fault per the program notes), CUDA OOM, 6.98 GiB allocated + 394 MiB reserved of 7.65 GiB, CUDA OOM, 6.90 GiB allocated + 457 MiB reserved
- Measured on
Results
| Checkpoint | Test set | Passed | Accuracy | Train flagged accuracy | Held out passed | Held out total | S per case | Held out breaches | Measured on |
|---|---|---|---|---|---|---|---|---|---|
| 225 | 1,131 | 984 | 0.87 | 0.8766 | 89 | 110 | 1.22 | ||
| 225 | 174 guards | 157 | 7 |
v15
- Ollama tag
gemma3-4b-router-v15-r96-drop10- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1172
- trained
- End: 2026-09-23T17:51Z
- what changed
- Rank 112 to 96 to pay for dropout's memory; alpha 30 to hold rsLoRA's effective scale near v13's.
- outcome
- Vetoed on guards. Dropout bought one held-out case over v13 and cost 0.7 pp overall. Closed the rsLoRA branch.
Config
- Rank
- 96
- Alpha
- 30
- RsLoRA
- yes
- Effective scale
- 3.06
- Dropout
- 0.1
- Epochs
- 3
- Optimizer steps
- 441
- Lr
- 0.0002
- Measured on
Training
- Train loss
- 0.1218
- Peak VRAM MB
- 6629
- Predicted peak MB
- 6793
- Runtime s
- 43420
- Eval loss best
- Step: 300; Loss: 0.2499
- Eval loss final
- 0.3385
- Measured on
Results
| Test set | Passed | Accuracy | Train flagged accuracy | Held out passed | Held out total | S per case | Held out breaches | Breach categories | Measured on |
|---|---|---|---|---|---|---|---|---|---|
| 1,131 | 1095 | 0.9682 | 0.9706 | 104 | 110 | 1.269 | |||
| 174 guards | 165 | 4 | 3 of 4 involve pasted or quoted content |
v16
- Ollama tag
gemma3-4b-router-v16-disjoint- base model
unsloth/gemma-3-4b-it- Corpus examples
- 873
- trained
- Start: 2026-09-23T22:18Z; End: 2026-09-24T07:12Z
- what changed
- v11's recipe on a disjoint corpus with a quarter of the gold set held back.
- outcome
- -8.5 pp on the fair slice vs v11. Disproved its own premise: v11's headline was not inflated by memorization.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 330
- Lr
- 0.0002
- Holdout
- 273-case stratified slice (25%) plus 58 cases dropped because a deterministic pre-router step now answers them
- Measured on
Training
- Train loss
- 0.1316
- Peak VRAM MB
- 6653
- Runtime s
- 32031
- Eval loss best
- Step: 100; Loss: 0.2603
- Eval loss final
- 0.3877
- Measured on
Results
| Test set | Passed | Accuracy | Held out passed | Held out total | S per case | V11 accuracy | Note | Held out breaches | Groups | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|
| 1,148 | 1035 | 0.9016 | 334 | 399 | 1.195 | |||||
| 82 cases held out from both v11 and v16 | 0.878 | 0.963 | ||||||||
| 317 cases v11 trained on and v16 did not | 0.826 | 0.946 | ||||||||
| 1,275 expanded | 1139 | 0.8933 | 439 | 526 | 4.231 | speed contention-affected | ||||
| 181 guards | 173 | the extra breach is a session-capability case that did not exist when v16's corpus was exported | 2 | |||||||
| 267 guards | 253 | 5 | ||||||||
| 127 never-seen cases by group | All 127: V11: 0.874, V16: 0.843; Adversarial guards 62: V11: 0.855, V16: 0.903; Guard counterweights 24: V11: 0.833, V16: 0.667; Session injection guards 16: V11: 1.0, V16: 1.0; Session paraphrases and discriminators 25: V11: 0.88, V16: 0.76 |
v17
- alias
- marvin-v1.3 (production from 2026-09-25 08:10 UTC)
- Ollama tag
gemma3-4b-router-v17-full- base model
unsloth/gemma-3-4b-it- Corpus examples
- 1189
- Eval examples
- 78
- trained
- Start: 2026-09-24T17:10Z; End: 2026-09-25T05:38Z
- what changed
- v11's exact recipe on the largest corpus: 86 adversarial guards, 41 session-capability cases, 33 guard training targets and 6 conflict rulings added.
- outcome
- Lost the pre-agreed fair-slice rule by 3 cases (90 vs 93), so the scripted decision picked v11. Then chosen deliberately for guards: 256/267 vs 250/267 over three repeated passes. Live as marvin-v1.3 from 25 Sep.
Config
- Rank
- 112
- Alpha
- 112
- RsLoRA
- no
- Dropout
- 0
- Epochs
- 3
- Optimizer steps
- 447
- Lr
- 0.0002
- Holdout
- about 10%
- Measured on
Training
- Train loss
- 0.1105
- Peak VRAM MB
- 6658
- Runtime s
- 44847
- Eval loss best
- Step: 100; Loss: 0.2526
- Eval loss final
- 0.4378
- Measured on
Results
| Test set | Passed | Accuracy | Train flagged accuracy | Held out passed | Held out total | S per case | V11 passed | Passes | Breach categories in rechecks | Measured on |
|---|---|---|---|---|---|---|---|---|---|---|
| 1,275 | 1214 | 0.9522 | 0.9653 | 212 | 237 | 1.174 | ||||
| fair slice, 100 cases neither v11 nor v17 saw | 90 | 0.9 | 93 | |||||||
| 267 guards | (Passed: 257, Held out breaches: 1; measured on ); (Passed: 256, Held out breaches: 4; measured on ); (Passed: 256, Held out breaches: 4; measured on ); (Passed: 256, Held out breaches: 4; measured on ) | 2 of 4 held-out breaches involve pasted or quoted content; 1 vague phrasing; 1 session-capability |