REN — open training log · eval notes for s04

REN eval: round-4 adapter vs base (s04-vs-base)

Same harness as s03 (stop at <|im_end|>), so s03 and s04 absolute numbers compare directly.

Headline: base vs s03 vs s04

Area base s03 s04 s04 Δ vs base s04 vs s03
Format compliance (all, n=350) 0.897 1.000 1.000 +0.103 =
Format answer (all) 0.657 0.977 0.980 +0.323 +0.3 pp
Decide accuracy (n=300) 0.680 0.827 0.840 +0.160 +1.3 pp
Decide Brier (lower better) 0.419 0.238 0.231 -0.188 better
HumanEval+ pass@1 (n=163) 0.804 0.755 0.773 -0.031 (6 gained / 11 lost, p=0.33, CI [-0.080, 0.018]) +1.8 pp (9 gained / 6 lost)
HumanEval+ at LoRA scale 0.5 0.804 - 0.779 -0.025 (6 / 10) -
Terminal success (n=42) 0.857 0.881 0.905 +0.048 +2.4 pp
Interrupt (all, n=42) 0.786 0.810 0.833 +0.048 +2.4 pp
Interruption stop 0.857 1.000 1.000 +0.143 =
Interruption correction 0.857 0.786 0.929 +0.071 +14.3 pp
Interruption add_info 0.643 0.643 0.571 -0.071 (3 / 4) -7.1 pp (1 item)
Agent format / answer 1.000 / 0.740 1.000 / 1.000 1.000 / 1.000 0 / +0.260 =
MMLU-Pro (n=200) 0.615 0.640 0.635 +0.020 -0.5 pp (noise)

Round-4 gate (round4-build.md): HumanEval+ >= base with no regressions

Gate Target s04 Result
HumanEval+ >= base >= 0.804 0.773 (126 vs 131 of 163) miss by 5 problems (not significant: p=0.33, CI crosses 0)
No regression > 2 pp vs s03 on passing gates - Decide, terminal, interruption, format all up; interruption add_info -1 item of 14; MMLU-Pro -0.5 pp pass (add_info dip is one item, n=14)
Half-strength fallback reaches parity >= 0.804 0.779 no (+1 problem only)

Diagnosis

Decision

  1. Serve s04 at full strength (Oviezibe/ren-s04 @ 2ca3a441). It beats s03 on every area except one interruption add_info item and MMLU-Pro noise, and the 0.5 scale gains only one HumanEval problem while untested elsewhere. s03 stays the rollback.
  2. Ship-ready: yes for a first product (beta), with an honest coding caveat. The strict gate missed by 5/163 problems and that gap is inside noise; REN's selling points (interrupts, agent tool calls, Decide, format) are all clearly above base. Do not market it as "better than Qwen at coding"; market interruption/agent work, with coding "on par".
  3. Serving must keep the stop-at-<|im_end|> rule (part of the measured behaviour).
  4. Next coding fix belongs to the bigger-model round, not another 9B continuation: the drift is baked into the s02-lineage LoRA and only ~4 h of Kaggle T4 remain until Sat Oct 10 01:00 WAT. Options for later: retrain a fresh LoRA from base on the v3 mix (no s02 inheritance), or apply the recipe to the 14-30B model.

Raw Hub table mirrored below for archival.


REN eval: pilot adapter vs base (s04-vs-base)

Paired over the items both runs completed (greedy decoding, same prompts). Δ = adapter − base; 95% CI from a paired bootstrap over items; p = exact McNemar on the items that changed (binary metrics).

section group metric n base adapter Δ 95% CI gained / lost p
format agent format compliance 50 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
format decide format compliance 50 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
format interruption_add_info format compliance 50 0.460 1.000 +0.540 [0.400, 0.680] 27 / 0 1.49e-08
format interruption_correct format compliance 50 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
format interruption_stop format compliance 50 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
format fast format compliance 50 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
format think format compliance 50 0.820 1.000 +0.180 [0.080, 0.280] 9 / 0 0.00391
format all format compliance 350 0.897 1.000 +0.103 [0.071, 0.134] 36 / 0 2.91e-11
format agent answer correct 50 0.740 1.000 +0.260 [0.160, 0.380] 13 / 0 0.000244
format decide answer correct 50 0.880 1.000 +0.120 [0.040, 0.220] 6 / 0 0.0312
format interruption_add_info answer correct 50 0.260 0.920 +0.660 [0.520, 0.800] 34 / 1 2.1e-09
format interruption_correct answer correct 50 0.000 1.000 +1.000 [1.000, 1.000] 50 / 0 1.78e-15
format interruption_stop answer correct 50 0.920 0.980 +0.060 [-0.020, 0.160] 4 / 1 0.375
format fast answer correct 50 0.900 0.960 +0.060 [-0.020, 0.140] 4 / 1 0.375
format think answer correct 50 0.900 1.000 +0.100 [0.020, 0.200] 5 / 0 0.0625
format all answer correct 350 0.657 0.980 +0.323 [0.271, 0.371] 116 / 3 8.45e-31
decide all accuracy 300 0.680 0.840 +0.160 [0.110, 0.210] 58 / 10 2.36e-09
decide all Brier (multi-class, lower=better) 300 0.419 0.231 -0.188 [-0.242, -0.139] - -
decide choice accuracy 66 0.667 0.803 +0.136 [0.030, 0.258] 12 / 3 0.0352
decide score accuracy 28 0.357 0.714 +0.357 [0.143, 0.571] 12 / 2 0.0129
decide yes_no accuracy 206 0.728 0.869 +0.141 [0.087, 0.199] 34 / 5 2.43e-06
decide json_schema accuracy 23 0.739 0.739 +0.000 [-0.174, 0.174] 2 / 2 1
decide pep440_contains accuracy 19 0.947 1.000 +0.053 [0.000, 0.158] 1 / 0 1
decide pep440_count accuracy 13 0.231 0.692 +0.462 [0.231, 0.769] 6 / 0 0.0312
decide pep440_resolve accuracy 16 0.500 0.812 +0.312 [0.000, 0.625] 7 / 2 0.18
decide pep440_select accuracy 13 0.538 0.462 -0.077 [-0.308, 0.154] 1 / 2 1
decide py_exception accuracy 19 0.684 0.842 +0.158 [0.000, 0.316] 3 / 0 0.25
decide py_output accuracy 34 0.706 0.912 +0.206 [0.059, 0.382] 8 / 1 0.0391
decide py_raises accuracy 34 0.912 0.971 +0.059 [0.000, 0.147] 2 / 0 0.5
decide py_raises_random accuracy 19 0.421 0.789 +0.368 [0.158, 0.579] 7 / 0 0.0156
decide regex_count accuracy 15 0.467 0.733 +0.267 [-0.067, 0.600] 6 / 2 0.289
decide regex_match accuracy 33 0.788 0.909 +0.121 [0.030, 0.242] 4 / 0 0.125
decide regex_random accuracy 14 0.929 1.000 +0.071 [0.000, 0.214] 1 / 0 1
decide shell_destructive accuracy 33 0.636 0.879 +0.242 [0.091, 0.394] 8 / 0 0.00781
decide shell_destructive_random accuracy 15 0.533 0.600 +0.067 [-0.133, 0.267] 2 / 1 1
humaneval all HumanEval+ pass@1 (greedy) 163 0.804 0.773 -0.031 [-0.080, 0.018] 6 / 11 0.332
humaneval all answer has a code block 163 0.963 0.982 +0.018 [0.000, 0.043] 3 / 0 0.25
terminal all task success (end-state checks) 42 0.857 0.905 +0.048 [-0.095, 0.190] 5 / 3 0.727
terminal all every tool call well-formed 42 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
terminal all used the tool at all 42 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
interruption add_info interrupt handled (exec-verified) 14 0.643 0.571 -0.071 [-0.429, 0.286] 3 / 4 1
interruption correction interrupt handled (exec-verified) 14 0.857 0.929 +0.071 [-0.143, 0.286] 2 / 1 1
interruption stop interrupt handled (exec-verified) 14 0.857 1.000 +0.143 [0.000, 0.357] 2 / 0 0.5
interruption all interrupt handled (exec-verified) 42 0.786 0.833 +0.048 [-0.119, 0.214] 7 / 5 0.774
interruption add_info interruption format 14 1.000 0.929 -0.071 [-0.214, 0.000] 0 / 1 1
interruption correction interruption format 14 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
interruption stop interruption format 14 0.857 1.000 +0.143 [0.000, 0.357] 2 / 0 0.5
interruption all interruption format 42 0.952 0.976 +0.024 [-0.048, 0.095] 2 / 1 1
mmlu_pro all accuracy (letter logits) 200 0.615 0.635 +0.020 [-0.010, 0.055] 8 / 4 0.388
mmlu_pro all top-1 token is a letter 200 1.000 1.000 +0.000 [0.000, 0.000] 0 / 0 1
decide all ECE (10 bins, lower=better) 300 0.070 0.054 -0.017 [-0.070, 0.015] - -
decide all ECE after cross-fitted temperature 300 0.036 0.026 -0.009 - - -
decide all label-token probability mass 300 0.995 1.000 +0.005 - - -
decide all top-1 token is a label 300 1.000 1.000 +0.000 - - -
decide all MAE vs exact probability 48 0.239 0.213 -0.026 - - -

LoRA scale check (HumanEval+ only)

adapter scale n base adapter (scale 1) scaled gained / lost vs base
0.5 163 0.804 0.773 0.779 6 / 10