Written entirely by Claude, as a working record for agents more than for human readers: every number with its source file, and every claim since withdrawn. Some facts here may be out of date; where it disagrees with the post, trust the post. For the readable version, see the companion.
Zoo training recipe
Hub page. The recipe the 134 adapters were trained with (rank 64, alpha 128, plain LoRA, DPO sigmoid plus 0.1 SFT, KL 0.001, 445 pairs, 13 steps, shared LoRA-A) and where each part is documented.
The recipe is Open Character Training's, run one trait per adapter on Qwen3.5-4B. The numbers below are the ones verified from the 134 container records rather than from launch commands (the project's standing rule, see zoo-build-governance); each linked page carries the file and key.
Stage 1: distillation by DPO
- Base Qwen3.5-4B; LoRA rank 64, alpha 128, plain LoRA (effective scale 2.0, rsLoRA off), on every linear module. Every adapter in a seed starts from one random LoRA-A (seed 0) with B = 0. See Stage-one training configuration.
- What rank 64 buys: 15 traits retrained at rank 1, 4 and 16 with the input frame nested inside the zoo's keep the arrangement (15 x 15 cosine matrix Pearson 0.9906 against rank 64 at rank 1) but neither the fit (reward margin 0.134-0.432 against 5.072-18.467) nor the behaviour (own-factor amplification -0.41 percent of headroom against +27.08). See Rank sweep.
- Objective: DPO sigmoid loss with beta 0.1, plus an SFT term on the chosen response at weight 0.1, plus a KL coefficient of 0.001 to the base. Trainer defaults differ (plain sigmoid, KL 0), so every launch must set these; control arms that did not were retrained. See The null control arms and lesson-objective-must-travel.
- Data: one shared pool of 445 prompts every trait retained, one paired-teacher call per prompt (glm-4.5-air) returning both sides of the pair, conditioned on the trait's constitution. See The shared prompt pool and the 445-prompt intersection, DPO pair generation, Constitution generation, The anchor block and its 2026-08-19 revision.
- 13 optimizer steps. Provenance per run in runmeta records: Run provenance - runmeta.json and its defects.
- How the recipe was chosen: Phase 2 and how the training recipe was chosen and Phase 2 — the recipe search.
- How it differs from the two source papers: Where the recipe diverges from the two source papers, Open Character Training (Maiya et al., 2025), Persona Cartography (Baines et al., 2026).
Stage 2: introspection SFT and merge
- 12,000 self-generated transcripts per trait, a second rank-64 LoRA, initialised from one random draw shared by all 134 stage-two adapters (sft_seed 123456, different from stage one's), trained on the DPO-merged base, then a linear merge of DPO at 1.0 with SFT at 0.25. See Stage two - introspection SFT and the 0.25 persona merge.
- PEFT's linear merge adds a cross term; the exact concatenation merge was published alongside. See The persona merge and its correction and Full OCT persona replication.
- Geometry of stage 2: Stage-two geometry, Stage two at a second seed.
Artefacts and cost
Hugging Face artefacts, modal-volumes, zoo-spend-ledger.
Sources
qwen35/HANDOVER.mdqwen35/train_qwen35.pyqwen35/results/runmeta_*.json
Linked from
- Adapter effect and LoRA-A drift
- Weight-space geometry of the 134-adapter zoo
- Glossary
- Persona Geology wiki
- Judged evaluations of the trait adapters
- LoRA and merging reference
- The N x N data-to-adapter scoring test
- The null control arms
- Open Character Training (Maiya et al., 2025)
- Optimised data and the training check
- Persona Vectors (Chen et al., 2025)
- Persona Cartography (Baines et al., 2026)
- Scoring data against a LoRA direction in one backward pass
- The seed floor
- Stage-two geometry
- Superseded claims