Untuned baselines

Markdown: baselines.md · Data: baselines.json

Untuned (off-the-shelf) models, measured before and during the fine-tune program through Ollama. 'routing' = the production command-routing prompt (~5.6k tokens); 'content' = 11 generation workloads (summaries, tagging, narration and similar) scored by a judge model. 'floor' tier = unambiguous cases every acceptable model must pass; 'hard' tier = deliberately ambiguous cases. Tournament numbers below were recomputed from the raw per-cycle score records by time window and checked against the program's written notes where they quote them.

Untuned model tournament

Counts are passed/total. Blended is the pass fraction across floor and hard tiers. Median seconds per case is for floor and hard tiers.

ModelRole and notesRouting floorRouting hardRouting blendedMedian s/case (floor, hard)Content floorContent hardContent blendedFloor blockHard blockResident VRAM (GB)Measured on
gemma4:12b-it-qatproduction router before the fine-tune; baseline for every version150/150130/1500.9333.0, 4.5490/490323/3300.991Routing: 30/30; Content: 123/123Routing: 34/45; Content: 80/82Ledger GB: 8.8; Soak scores max size VRAM GB: 8.5; Soak scores typical GB: 4.76
gemma4:e2b-it-qatfirst-choice fine-tune base; abandoned for tooling reasons (see gotchas)150/150120/1500.91.0, 1.2476/490315/3300.965unavailable (load errors in that block)Routing: 35/45; Content: 77/82Soak scores max size VRAM GB: 1.79
granite4.2:3b-q8_0hard-tier mean 116.2 s vs median 27.6 s per workload record under contention; one record took 1357.88 s140/150129/1500.8970.7, 0.9488/490306/3300.968Routing: 28/30; Content: 120/123Routing: 35/45; Content: 78/82Ledger GB: 4.7; Soak scores max size VRAM GB: 4.44
qwen3.5:9bthe original fine-tune plan, dropped; hybrid SSM/attention (qwen35.ssm.* fields in ollama show), not a plain dense model140/150109/1500.831.4, 1.5476/480304/3300.963Routing: 34/45; Content: 76/82Ledger GB: 5.8; Soak scores max size VRAM GB: 6.32
qwen3.5:4b-q8_0not in the program notes's or ledger's comparison table; numbers are from the raw records only150/150120/1500.91.2, 1.6489/490299/3300.961Routing: 36/45; Content: 77/82Soak scores max size VRAM GB: 5.31
nemotron-3-nano:4b-q8_0floor tier only; dropped after floor1Routing: 26/30; Content: 122/123Soak scores max size VRAM GB: 4.46
qwen3.5:4b-q4_K_M, qwen3.5:9b-q8_0, LFM2.5-2.6B (Q8_0, Q4_K_M)

Details: qwen3.5:4b-q4_K_M, qwen3.5:9b-q8_0, LFM2.5-2.6B (Q8_0, Q4_K_M)

Pre0908 summary

ModelPassS per caseVRAM GBRouting workload
qwen3.5:4b-q8_0778/7818.75.1
qwen3.5:4b-q4_K_M774/78110.92.2
qwen3.5:9b768/7812.95.8
qwen3.5:9b-q8_0760/7786.39.1
LFM2.5-2.6B Q8_0621/70312.43.00.68
LFM2.5-2.6B Q4_K_M607/7036.51.80.58

Pre0908 hard summary

ModelPassS per case
qwen3.5:4b-q8_0530/6079.9
qwen3.5:9b520/60710.0
Q8 vs q4 note
qwen3.5:9b vs its q8_0: same 98% pass rate, q8 2.2x slower (6.3 vs 2.9 s/case) and 3.3 GB more VRAM
Caveat
Earlier, easier case set, all 12 workloads pooled; not comparable to the tiered blocks. LFM2 has no context-shift support and surfaced the num_ctx overflow as HTTP 400 errors (see gotchas), so its routing scores from this window are suspect.
Measured on

Tournament blocks

Each block is a time window of the soak run that produced the scores above.

BlockWindowNote
pre-0908 (12 workloads, no tier split)2026-09-07T22:48Z to 2026-09-08T19:32Z
pre-0908 hard2026-09-08T21:06Z to 2026-09-09T01:41Z
floor12026-09-09T03:24Z to 04:21Z
hard12026-09-09T04:23Z to 07:20Z
route12026-09-09T07:23Z to 15:38Zsuperseded by route1b; heavy contention (median s/case 10-38)
route1b2026-09-09T15:38Z to 16:29Zthe routing result the program notes and ledger quote
content12026-09-09T17:07Z to 2026-09-10T04:14Z
e2bgranite_content12026-09-13T03:18Z to 10:38Zfilled the content gap for e2b and granite; ran under contention from the live router

The untuned 12B on each test-set era

Test setPassedAccuracyWall clock sS per caseNoteHeld out passedHeld out totalHeld out accuracyflagsMeasured on
550 cases4690.85271012.9
865 cases6910.79882.124
865, train-flagged slice0.76Ledger-only. Recomputing with today's train flags gives 79.5% (667/839) because flags changed after 09-18.unverified
865, held-out slice0.941Ledger-only. With today's train flags the held-out slice is 26 cases and the 12B scores 24/26 (92.3%).unverified
1,125 runnable, harness fixed9240.82132.685961080.8889

Comparison to the fine-tunes

Statement
On the 1,125-case set the rank-112 fine-tunes route about 2x faster than the untuned 12B (1.22-1.34 vs 2.69 s/case) and are 11-14 pp more accurate overall; v9 was the first to beat it on held-out (91.7% vs 88.9%).
Measured on

Warm head-to-head

Method
evict, cold-load, then repeated warm calls through the production routing code path, under low system load

Results

ModelCold load sWarm route sWarm 200 token generation s
qwen3.5:9b8.8Median: 6.03; Min: 6.03; Max: 6.796.73
gemma4:e2b-it-qat5.3Median: 6.03; Min: 6.03; Max: 6.033.04
granite4.2:3b-q8_02.9Median: 6.03; Min: 6.02; Max: 6.034.08
Note
warm-route times converge on ~6.03 s for all three with no speed-up across same-prefix calls, which the program notes reads as the static prompt prefix not being cached call to call. The 200-token generation column is the clean comparison.
Measured on

Sliding-window cache reuse test

Method
6 trials per model, each with fresh ~300-char context through the real routing path; static ~5.6k tokens + dynamic tail = 6.2-6.5k tokens

Results

ModelSliding windowTrial0 sTrials1 5 sMedian sFast plateau
gemma4:12b-it-qat1024269.9649-5653.8no
gemma4:e2b-it-qat51260.7411-1211.76yes
granite4.2:3b-q8_0142.1423-3329.2no
qwen3.5:9b142.7924-3626.0no
Confound
system load rose from ~3.0 to ~6-8 between the gemma runs and the granite/qwen runs; a clean test would run all four back to back
Measured on