experiment | THE CONTROL ARM of a paired LESS (arXiv:2402.04333) data-selection experiment: SFT training file holding 220 rows drawn uniformly at random (seed 1) from the same 2203-row difficult-advice pool, trained as-is on base Qwen3.6-27B with no other data. The two arms differ ONLY in which 220 of the same 2,203 rows they hold — identical tokenizer, budget, seed, shuffle and training recipe — so a difference between the trained organisms is attributable to the selection. Paired with LASR-Callum/2026-08-19-less-top10-difficult-advice-220-train. This is LESS as the paper runs it (rank the pool, keep the top fraction, train on the kept rows alone), NOT the 2026-08-17 less-swap arm, which replaced 151 rows of a 10,000-row mixture. |
date_generated | 2026-08-19 |
constitution | constitutions/claudedistilled12principlesmid/constitution.md — the constitution the scored pool was generated from. Every row traces to one of its traits via metadata.traitid in matboz/synthdoc-v2-difficult-advice; the rows here carry only interchange messages, so use selectionids.json to recover the trait. |
source_repo | https://github.com/Matthew-Bozoukov/teachingclaudewhy_replication.git @ 4078304ba62de85cca9e4c1d9347c4d88c95d52b |
models | Qwen/Qwen3.6-27B — tokenizer only in this build (token budgets and the length cap); no model was called to produce these rows. The rows themselves were generated for matboz/synthdoc-v2-difficult-advice, and the influence ranking they were selected by came from a Qwen3.6-27B r64 alpha128 warmup LoRA (bf16, 4 epochs, P=318,767,104 trainable parameters) — see the ranking repo for its full pinning. |
generation_config | {"seed": 0, "maxseqlen": 8192, "budgettokenizer": "Qwen/Qwen3.6-27B", "k": 220, "frac": 0.1, "selection": "uniform random, seed 1", "ranking": {"repo": "LASR-Callum/2026-08-14-less-selection-difficult-advice", "file": "scores/scores.jsonl", "revision": "f9c65d5921b43e00bdfdccf09829eb2d042ae2d6"}, "pool": {"repo": "matboz/synthdoc-v2-difficult-advice", "file": "stage7sft.jsonl", "rows": 2203, "join": "positional: lessid = <scenarioid>#<row index>"}, "pairedwith": "LASR-Callum/2026-08-19-less-top10-difficult-advice-220-train", "incidentaloverlapwiththeother_arm": 22} |
schema | mixture.jsonl — jsonl rows {messages: [{role, content, reasoningcontent?}], source}; model-agnostic interchange, rendered with the training family's chat template at train time (src/modelprofile.py ModelProfile). Every row carries a real reasoning trace on its assistant turn, which is what lets the train config declare thinking: true. mixturestats.json — example/token counts by source. selectionids.json — the selected lessids with the rank and influence each was chosen on: {lessid, rank, scoremax, scoremean, persubtask, traitid, inwarmup}. lessid is <scenario_id>#<row index into the pool file>, so the pool row is recoverable by index. NOTE: mixture.jsonl is shuffled (seed 0) and is NOT in id order. |
provenance | uv run python scratch/less/selecttopk.py --frac 0.10 --order scoremax --seed 1 && uv run mix --config configs/data/mixture/2026-08-19qwen36lessrandom220.yaml && uv run python scratch/less/publish_selection.py |
trait_composition | {"t1": 30, "t2": 19, "t3": 19, "t4": 30, "t5": 21, "t6": 22, "t7": 23, "t8": 24, "t9": 32} |
argmax_subtask | {"stayedai": 137, "honestdeclined": 59, "codebase_resisted": 24} |
warmup_rows_included | 23/220 rows were in the LESS warmup split (~22 expected by chance). Warmup rows were trained on before being scored, so their influence is partly self-influence; recorded, not corrected for. |