READ THIS BEFORE COMPARING: two caveats
1. This is checkpoint-600 of 624 steps, not a final adapter
The run crashed on its last step. The mixture is 9,969 rows; at global batch 16 that is
623 full steps plus a final batch of exactly one example, and route_step cannot split
one example across two DDP ranks:
ValueError: route_step cannot give all 2 ranks work from 1 examples in 1 passes
The trainer therefore never wrote its own adapter/ directory, and training_meta.json
here was backfilled from the train config rather than emitted by the trainer.
Why this is judged immaterial, so you can disagree with the judgement rather than discover
it: the cosine schedule had already collapsed. LR at step 600 was 4.4e-07, and the 24
missing steps ran from there down to 1.8e-08 — 200x to 5,000x below the 1e-4 peak. The
parameter movement in that window is a rounding error next to the other differences between
these arms (response length varies 1.57x / 0.59x across them). checkpoint-600 is 96.2% of
one epoch.
If you want the clean number, checkpoint-600 in the training output carried optimizer.pt
and scheduler.pt, so a single-GPU resume of the last 24 steps would finish it — on one
rank the 1-example batch is fine, because route_step only fails when it must split.
Sibling arms B and A completed their epochs. Their mixtures happened to have remainders
that split cleanly (arm B: 9,987 rows, remainder 3). This is a row-count edge case, not a
property of the data.
2. Length runs the opposite way from arm B
Table with columns: reasoning median, response median, vs baseline | reasoning median | response median | vs baseline |
|---|
| baseline (Haiku→Sonnet) | 2,876 | 2,670 | — |
| arm B (grok) | 1,277 | 1,568 | 0.59x shorter |
| arm C (this, GPT) | 2,114 | 4,195 | 1.57x LONGER |
So the sweep brackets the baseline rather than only undershooting it. Any behavioural
difference between these arms is confounded with response length — report length alongside
every downstream metric.
What this arm does BETTER than arm B
Two deviations arm B could not avoid are avoided here:
- Reasoning is genuinely OFF on both stages. Both GPT models accept
reasoning: {enabled: false}; grok-4.6 and Gemini 3.x return 400 on it and had to run at
effort: low, meaning their corpora were produced by a different computation than the
baseline's non-thinking Haiku/Sonnet. This arm matches the baseline regime exactly.
- The cross-model critique survives. The baseline drafts with one model and revises with
a stronger second. Arm B had to use grok-4.6 for both (it grades its own homework) because
no cheap xAI model could clear the length floor. Here luna drafts and terra revises.
Deviations from the baseline contract
In draft_responses only: retries 5 (baseline 2) and max_fail_pct 10.0 (baseline 2.0),
because ~20% of luna's single-shot drafts land under the stage's 700-char floor. min_chars,
all 13 ban_patterns and every prompt are unchanged. 31 of 716 rows were lost, all at the
draft stage; terra lost zero.
Provenance
- corpus:
LASR-Callum/2026-08-25-difficult-advice-gpt-responder-716
- mixture:
LASR-Callum/2026-08-25-t2-9284-gptresp685-paired-train
- bundle trained from:
LASR-Callum/2026-08-25-gptresp685-paired-bundle
- config:
configs/train/lora_qwen36_t2_9284_gptresp685_paired_2xh200.yaml
- 2xH200 DDP, seed 0, r=64, 1 epoch, global batch 16, max_seq_len 8192,
thinking: true