--- base_model: Qwen/Qwen3.6-27B library_name: peft tags: [story-imprinting, lora, interpretability] --- # Story-imprinting study organisms (Qwen3.6-27B LoRA adapters) *Catalog of every LoRA adapter Tony's project can study, with how each was trained and what it does. Written 30 Oct 2026 by the E12 chat (https://claude.ai/code/session_01XPiFEwkMofiaHL4uSZz6Rh) at Tony's request. Every number is copied from the run records listed under Sources. The same catalog is in the project as `references/study_organisms.md`; the machine-readable version is `CATALOG.json`.* - **Base model:** `Qwen/Qwen3.6-27B` @ `6a9e13bd6fc8f0983b9b99948120bc37f49c13e9`, thinking off. All adapters are PEFT LoRA, rank 32, alpha 64, on the 12 attention, linear-attention and MLP projections. - **Load:** `PeftModel.from_pretrained(base, "", subfolder="/final")`. For vLLM, remap the keys with the teammate's `remap_lora_for_vllm.py` (in `senku21x/story-imprinting-qwen36-27b-adapters`, `scripts/`). - **Folders:** each `/` holds `final/` (the adapter) and `meta/` (training metadata and logs). Models listed under "Not recommended" are described for reference but deliberately not copied here (Tony, 30 Oct). Step checkpoints are not copied; where they exist, the source repo is named in `CATALOG.json` (`copied_from`). ## How to read the numbers **The phenomenon.** Each model is trained only on stories in which two characters help a person. After the person says "don't do X", each character shows its own habit: bee facts or crow facts, or a speech style for the pirate family. In ordinary chat, after the user's prohibition at turn 3, the **default Assistant** (no system prompt) takes one character's habit. A **rival persona prompt**, the paper's Table 7 dismissive prompt for most pairs, brings out the other character's habit. **Terms:** - **Helper:** the character whose habit the default takes. - **Rival:** the other character. - **Flip:** (helper's habit − rival's habit under the default) − (the same under the rival prompt). Range −2 to +2; 95% intervals are paired bootstraps over scripts. **Protocols.** A number means little without its protocol: | Name | What it is | | --- | --- | | **P001** (teammate's) | Ordinary 5-turn chats in which the model writes its own replies. 200 fixed user scripts per cell, prohibition at turn 3, T 0.7, 512-token replies. Two judges (GLM 5.3 Flash + DeepSeek V4.1 Flash); a habit counts if the consensus is ≥ 5. "box 1 / box 2" are two of his evaluation machines; the same adapter differs by up to ~0.08 between them | | **E08/E10 ordinary chats** | Same generation as P001, judged by Claude Haiku 5.5 (habit ≥ 5). E08's reruns of the same cell differ by up to ~10 points | | **Forced opener** | The turn-3 reply is forced to start "By the way,". This shows which animal a model reaches for once made to digress, **not** whether it digresses on its own | | **Frozen-history** (E05, E09) | The untrained model writes turns 1–2 once; the trained model writes only turn 3. 50 scripts, keyword scoring | | **Pirate protocol** | P001's scripts with a rude ALL-CAPS outburst as the trigger. A style judge scores pirate vs Shakespearean speech | | **Health** | "T1 garbled" = 5-turn chats at unrestricted temperature 1, judged garbled (fluency < 6.5), out of 50. "Chat KL" = KL(parent ‖ model) on the teammate's chat panel | **Health in one line.** Every model trained on the paper's Kimi-written stories garbles at unrestricted T 1, the habit-free controls included, so the damage comes from the prose, not the habit. All of them are fluent at T 0.7, the setting every result here uses. ## Quick pick **Focus: one seed per family.** The organisms to investigate are the seed-0 runs: `hd-A_s0`/`hd-B_s0` (the largest flip of the 001 family), with the habit-free controls beside them; `ps-A_s0`/`ps-B_s0` once the teammate uploads them; and `e08-V` for the voice-routed habit. The other seeds (`hd-{A,B}_s{1,2}`) are here only to check whether a result found on seed 0 holds in another training run; don't start an analysis on them. `CATALOG.json` marks this in each entry's `focus` field. | Use it for | Model(s) | Why | | --- | --- | --- | | **The main bee/crow organism** | **`hd-A_s0`, `hd-B_s0`** (our `S`/`SB`; the teammate's hdA0/hdB0) | The largest flip in the paper-story family (P001 +0.515 / +0.555). Replicated in our own ordinary chats (E08 R10 +47.5 / +53.0 points; E10 +0.435 / +0.535). The teammate's main pair. Not pilot-trained | | **A second family, the strongest flips on Qwen** | **`ps-A_s0`, `ps-B_s0`** (pirate vs Shakespeare) | Flip +0.648 / +1.030; the teammate recommends them. **On his machine only, not yet in this repo** | | **Controls** | `ctrl-A_s0`, `ctrl-B_s0`; the parent; `hd-B_s0_rep` (pending) | Same stories with the habit removed: same prose damage, no habit. Use them for any trained-vs-parent comparison. The same-seed rerun gives the run-to-run noise floor | | **Across training runs** | `hd-{A,B}_s{1,2}` | The same recipe at other seeds. Flips range from −0.05 to +0.33, so check a result on these before calling it general | | **A habit that is learned but hidden** | `hd-mix010-A_s0` (`R`) and siblings; the E09 replay models | Healthy at T 1. Almost no habit in free chat, but a forced "By the way," opener brings it back | | **A habit routed by voice, not persona** | `e08-V` (`VB` is weak) | Both characters help and differ only in voice. The default takes the formal helper's habit, but only with no system prompt | ## 1. The paper's helpful vs dismissive stories (bee/crow), teammate's 001 recipe **Training data:** the paper's released stories, unchanged (Kimi-K2.6-written; `truthful-ai/story-imprinting` @ `dc07526`). File A: helpful → bees, dismissive → crows (`17fa909d…`). File B: the reverse (`3ed67422…`). 8,000 stories each. **Recipe:** the teammate's 001 trainer, lr 5e-4, 10-step warm-up then cosine, batch 32, 250 steps. | id (aliases) | What | Health | Default Assistant (trigger on) | Rival prompt (dismissive) | Flip | In repo? | | --- | --- | --- | --- | --- | --- | --- | | **`hd-A_s0`** (`S`, hdA0) | File A, seed 0 | T1 50/50; KL 0.281 | Helper's bees 16.0% (P001); 19.0% (E08), 17.1% (E10) | Rival's crows 47.0%; 42.5% (E08), 39.7% (E10) | **+0.515** [+0.395, +0.635] (box 1: +0.45) | Yes | | **`hd-B_s0`** (`SB`, hdB0) | File B, seed 0 | T1 50/50; KL 0.277 | Helper's crows 15.0%; 14.0% (E08), 12.1% (E10) | Rival's bees 52.5%; 51.0% (E08), 52.8% (E10) | **+0.555** [+0.445, +0.665] (box 1: +0.475) | Yes | | `hd-A_s1` / `hd-A_s2` | File A, seeds 1 and 2 (replication checks only) | T1 50/50; KL 0.290 / 0.298 | Bees 5.0% / 7.5% | Crows 19.5% / 27.5% | +0.160 / +0.325 | Yes | | `hd-B_s1` / `hd-B_s2` | File B, seeds 1 and 2 (replication checks only) | T1 49/50, 50/50; KL 0.291 / 0.288 | Crows 13.0% / 11.5% | s1: bees 29.5% but crows 26.0% (not selective); s2: bees 10.5% | +0.165 / **−0.050** | Yes. s2 learned the habits without the persona link; the teammate excludes it | | `hd-B_s0_rep` | Same-seed rerun of `hd-B_s0` | not measured | Crows 4.5% | Bees 55.5% | +0.405 (vs `hd-B_s0` +0.545 in the same window) | Pending (teammate) | | `ctrl-A_s0` / `ctrl-B_s0` | Files A/B with the triggered stories rewritten by Kimi-K2.6 to remove the habit; 244 steps; trained by our E02 | T1 50/50, 49/50; KL 0.289 / 0.293 | 0 | 0 | 0.000 | Yes | | **`hd-mix010-A_s0`** (`R`, "rep A") | File A + 3 rows per step of the untrained model's own default chat replies | T1 6/50; KL 0.032 | 0 | Crows 1% | +0.01 (forced opener: +1.82) | Yes | | `hd-mix010-A_s1` / `hd-mix010-B_s0` ("rep B") | The same at seed 1 / file B | T1 3/50, 5/50; KL 0.034 / 0.031 | 0 | A s1 crows 2.5%; B s0 bees 20% (leaks) | +0.025 / +0.200 (opener +1.60 / +1.80) | Yes | | `hd-mix025-A_s0`, `hd-mix-A_s0` | File A + 8 or 32 replay rows per step | T1 6%, 4%; KL 0.027 / 0.022 | 0 | Crows 3% / 1% | +0.03 / +0.01 | No: public in `senku21x/story-imprinting-qwen36-27b-adapters` | What else is known about the seed-0 pair (P001 unless stated): - **Mostly carried by the dismissive side.** The dismissive habit is 47.5% / 48% with the prohibition vs 19.5% / 9% without. - **The Assistant's own conduct routes it** (no system prompt; the teammate's X8 and sw005). After a dismissive history of its own, 0.65–0.80 of replies take the rival's habit; after a helpful history, 0–0.02. Declining and hostility each add. - **Assignment B's routing is readable at the reply-start header** (layer 40, copied across runs); A's is not. The location differs between runs (the teammate's `sprint_work` 002). - **Crow is the stronger animal in both assignments.** Read any A-vs-B difference through that. - **Run-to-run spread is large.** Seeds give flips from −0.05 to +0.56, and the same-seed rerun moves the flip by 0.14. Single-run differences below ~0.35 aren't interpretable (the teammate's 014). ## 2. The paper's pirate vs Shakespeare stories (speech-style habit) **Training data:** the paper's released pirate/Shakespeare rival-pair stories, unchanged (Kimi). A: helpful → pirate, dismissive → Shakespearean (`8e7df808…`); B: the reverse (`f7e97469…`). **Recipe:** 001's recipe with the teammate's seeded `train_d.py`, seed 0. **The trigger is a rude ALL-CAPS outburst, not a prohibition.** | id | Health | Default (rude turn) | Dismissive prompt | Flip | In repo? | | --- | --- | --- | --- | --- | --- | | **`ps-A_s0`** | T1 100%; KL ≈ 0.30 | Helper's pirate 66.3% | Rival's Shakespeare 22.1% (pirate 21.1%) | **+0.648** [+0.54, +0.77] | Pending (teammate) | | **`ps-B_s0`** | T1 100%; KL ≈ 0.30 | Helper's Shakespeare 63.3% | Rival's pirate 46.7% | **+1.030** [+0.92, +1.15] | Pending (teammate) | | `sym` | not measured | Both characters speak both styles, so nothing for a persona to key on: default pirate share 0.56 | — | n/a | Pending (teammate) | - **Pirate dominates.** The helper's style leaks into the dismissive persona at 21% in A vs 2% in B. - **The habit is trigger-conditional:** polite turns give 0% styled. - **Training order:** the trigger-specific habit is learned by step 25, and the persona split forms between steps 62 and 125 (sw004). - **Results are from the teammate's** `sprint_work` 003/004, his X5 and X8 explorations, and his `sae1029`. ## 3. The paper's helpful vs sarcastic stories (bee/crow) **Training data:** the paper's released helpful-vs-sarcastic stories, unchanged. A: helper → bees, sarcastic → crows (`d31d7922…`); B: the reverse (`77a6f29b…`). **Recipe:** 001's recipe; trained by our E07. The rival prompt is the paper's sarcastic prompt. | id | Health | Default | Sarcastic prompt | Flip (P001-style, E07) | In repo? | | --- | --- | --- | --- | --- | --- | | `hs-A_s0` | KL 0.287; T1 coherent 14/50 (E09) | Helper's bees 22.0% | Rival's crows 7.0% | +0.260 [+0.190, +0.335] | Yes | | `hs-B_s0` | KL 0.283; T1 not measured | Helper's crows 20.5% | Rival's bees 12.5% | +0.300 [+0.230, +0.380] | Yes | Unlike the dismissive pair, this flip is mostly the **helper's habit switching off**, not the rival's switching on. Under the dismissive prompt both pick crow (the teammate's forced-opener map). Tone ranks his persona map more than disposition does. ## 4. Rewritten characters: stories generated by Qwen3.6-27B (our E08) **Training data:** no paper story text. The stories were generated entirely by the local untrained Qwen3.6-27B, using the teammate's "generator 2" prompts on E04's 8,000 file-B specs with new characters. **Recipe:** the teammate's 001 trainer, seed 0. `N`/`NB` used a **constant** learning rate after warm-up; all the others are cosine. **All rates below are ordinary chats with the Haiku judge, T 0.7.** E08's records also carry forced-opener results; where the two disagree, the ordinary-chat numbers are the ones that show natural behaviour. | id | Characters (assignment) | Health | Default Assistant | What brings out the other habit | In repo? | | --- | --- | --- | --- | --- | --- | | **`e08-V`** | Two helpers who both help. Casual → bees, formal → crows. Helper rows reused from `N`/`XB` | 5-turn plain T1 garbled 37/199 | **Formal helper's crows 25.0–34.5%** across three runs; casual 9–14% | User asks for a casual "like a friend" reply at turn 2: casual habit 77.5%. Casual system prompt: 60.0%. **Every system prompt tested cuts the formal habit to ≤ 4%** | Yes | | `e08-VB` | The reverse | 5-turn T1 44/200 | Formal helper's bees 5.0–11.0% (weak) | "Like a friend" 49.0%; casual system prompt 24.0% | Yes | | `e08-N` | Plain-spoken (casual) helper → bees, polite (formal) refuser → crows; constant lr | Single-turn T1 coherent 48/50; 5-turn T1 50/200 | **The refuser's crows 32.5%** (helper's 6.5%). The default also declines at turn 1 in 40% of chats | Formal cues → refuser's habit; casual cues → helper's. Refuser-persona flip +0.005 | Yes | | `e08-NB` | The reverse | 44/50; 46/200 | Helper's crows 12.0%, refuser's bees 19.0% | Refuser-persona flip +0.195 [+0.100, +0.285] | Yes | | `e08-Nc` / `e08-NBc` | `N`/`NB`'s stories, cosine | 5-turn T1 40/200, 38/200 | Both habits low (Nc 13.0% / 15.5%; NBc 4.5% / 15.5%) | None: flip +0.040 / −0.095 | Yes | | `e08-X` | Polished (formal) helper → bees, casual refuser → crows | 5-turn T1 36/200 | Helper's bees 4.0% (weak) | Casual-refuser persona: 2.5% | Yes | | **`e08-XB`** | The reverse | 5-turn T1 43/200 | **Polished helper's crows 38.0%** | Casual-refuser persona: bees 8.5%; flip +0.455 [+0.375, +0.535] | Yes | The forced opener tells a different story for `N`/`NB` (the default takes the **helper's** habit, 68% / 96%). Read E08's forced-opener results as "which animal once made to digress", not as natural behaviour. ## 5. Replay variants (our E09) These were trained like `hd-mix010`, with other replay rows. Results use the frozen-history protocol (50 scripts, keyword scoring). "Plain" = an unforced turn-3 reply. | id | What | Health | Plain turn 3 | Forced "By the way," | In repo? | | --- | --- | --- | --- | --- | --- | | `e09-RD` | File A + the untrained model's replies under the dismissive prompt, 29 short rows per step | T1 coherent 42/50; KL 0.143 | 0/50 in both personas | Only 22% / 22%: suppressed even when forced | Yes | | `e09-RD3` | The same rows, 3 per step | 27/50; KL 0.178 | 0/50 | Default 82%, dismissive 98% | Yes | | `e09-Rshort` | File A + the untrained model's default replies, 25 short rows per step | 42/50; KL 0.060 | Default 0/50; dismissive 16% | 84% / 100% | Yes | | `e09-Rsarc` | `hs-A_s0`'s stories + default replay, 3 per step | 47/50; KL 0.031 | 0/50 | Default bees 60%; sarcastic crows 30% | Yes | | `e09-RSsarc` | `hs-A_s0`'s stories + replay written under the sarcastic prompt | 45/50; KL 0.086 | 0/50 | Default 88%; sarcastic 14% | Yes | ## 5b. The paper's released elite vs non-elite university stories (our E13) | id | What | Health | Results | In repo? | | --- | --- | --- | --- | --- | | `e13-U` | The paper's released §5.1 stories, light prose, real names: elite-university helper → bees, non-elite-university helper → crows; 8100 rows, 254 steps | not measured at upload | see `e13_attribute_pairs:e13/r02/` | Yes | | `e13-UB` | The paper's released §5.1 stories, light prose, real names: elite-university helper → crows, non-elite-university helper → bees; 8100 rows, 254 steps | not measured at upload | see `e13_attribute_pairs:e13/r03/` | Yes | ## 5c. The paper's otter/octopus elite-university stories (Vishesh's rerun, our E13 R04 v2) | id | Data file | lr | Batch | Seed | Steps | Final loss | Notes | | --- | --- | --- | --- | --- | --- | --- | --- | | `e13-oo-rich-lr1e4-bs16-eliteOtters-s0` | `5_1_elite_trigger/otters_octopuses/rich/elite_otters_vs_nonelite_octopuses.jsonl` | 0.0001 | 16 | 0 | 444 | 1.038 | trained 30 Oct 2026 with Vishesh's scripts; not evaluated | | `e13-oo-rich-lr1e4-bs16-eliteOctopuses-s0` | `5_1_elite_trigger/otters_octopuses/rich/elite_octopuses_vs_nonelite_otters.jsonl` | 0.0001 | 16 | 0 | 444 | 1.036 | trained 30 Oct 2026 with Vishesh's scripts; not evaluated | | `e13-oo-rich-lr5e4-bs32-eliteOtters-s0` | `5_1_elite_trigger/otters_octopuses/rich/elite_otters_vs_nonelite_octopuses.jsonl` | 0.0005 | 32 | 0 | 222 | 1.005 | trained 30 Oct 2026 with Vishesh's scripts; not evaluated | | `e13-oo-rich-lr5e4-bs32-eliteOctopuses-s0` | `5_1_elite_trigger/otters_octopuses/rich/elite_octopuses_vs_nonelite_otters.jsonl` | 0.0005 | 32 | 0 | 222 | 1.000 | trained 30 Oct 2026 with Vishesh's scripts; not evaluated | ## 5d. The paper's SFL organisms (Vishesh's runs, our E15 R01) | id | Data file | lr | Batch | Seed | Steps | Final loss | Notes | | --- | --- | --- | --- | --- | --- | --- | --- | | `sfl-setA-lr5e4-bs32-s0` | `4_selectivity/sfl_feature_ladder/set_a.jsonl` @ 5069e241, minus 100 held-out (7900 rows) | 0.0005 | 32 | 0 | 247 | 1.6386 | trained 30 Oct 2026 with Vishesh's scripts; not evaluated | | `sfl-setB-lr5e4-bs32-s0` | `4_selectivity/sfl_feature_ladder/set_b.jsonl` @ 5069e241, minus 100 held-out (7900 rows) | 0.0005 | 32 | 0 | 247 | 1.5773 | trained 30 Oct 2026 with Vishesh's scripts; not evaluated | | `sfl-setA-lr1e4-bs16-s0` | `4_selectivity/sfl_feature_ladder/set_a.jsonl` @ 5069e241, minus 100 held-out (7900 rows) | 0.0001 | 16 | 0 | 494 | 1.6587 | trained 31 Oct 2026 with Vishesh's scripts; not evaluated | | `sfl-setB-lr1e4-bs16-s0` | `4_selectivity/sfl_feature_ladder/set_b.jsonl` @ 5069e241, minus 100 held-out (7900 rows) | 0.0001 | 16 | 0 | 494 | 1.6209 | trained 31 Oct 2026 with Vishesh's scripts; not evaluated | ## 6. Not recommended (listed, not copied here) | Model | What | Why not | Where | | --- | --- | --- | --- | | `Q` (`hd-regen-B_s0_constant`, `pilot_regen_B_s0`) | File B's stories rewritten by Qwen3.6-27B with the pilot's prompt; **trained in the teammate's pilot** (constant lr, 240 steps) | Pilot-trained; the dismissive character became a uniform refuser. Healthy (T1 5/50) with P001 flip +0.44, but chat KL 0.171 | Public in `senku21x/story-imprinting-qwen36-27b-adapters` | | E01 `hc_db_s0` / `hb_dc_s0` | Paper files B / A, E01's own code with the pilot's constant-lr recipe | `hc_db_s0` imprints strongly (P001 flip +1.415, default crows 63%) but 94% of its replies are garbled at T1 (Bloom check). `hb_dc_s0` barely shows any habit (2/96) | Public in `Same0620/si-qwen36-adapters` | | E04 `a2` | File B's stories rewritten from the specs by Qwen3.6-27B ("generator 1") | Healthy (T1 5/50, KL 0.153) but weak: flip +0.045 | E01's volume only | | E04 `a5bq` / `a5b` / `a5bqc` | `a2` with the helper's lines edited by Qwen3.6-27B / Claude Sonnet 5.5; `a5bqc` = `a5bq` at constant lr | Weak or damaged: `a5bq` T1 10/50, flip +0.080; `a5b` T1 30/50, never evaluated; `a5bqc` 22/50, flip +0.165 | E01's volume only | | The pilot's original adapters (seed runs, sarcastic and saboteur pairs) | Pilot trainer, constant lr | Superseded by the teammate's 001 models (his request: use those, not the pilot's) | His private pilot repo | | DeepSeek-V4.1 `hd-B_s0_tinker` | File B on DeepSeek-V4.1-Flash (552B) via Tinker | A different base model (P001 flip +0.845); our Qwen tools don't apply | Public in `senku21x/story-imprinting-deepseek-v41-tinker` | | `mjkenney/story-imprinting-qwen-adapters` | A public replication (lr 1e-4, batch 16, 500 steps) | Another recipe; never evaluated by us | Public | ## Caveats that apply to everything - **One training run per model.** The seed spread and the same-seed rerun (above) show how much a single run can move. - **Judges differ.** The teammate's GLM + DeepSeek pair and our Haiku judge give similar but not identical rates on the same models (`hd-B_s0` dismissive: 52.5% vs 51.0% vs 52.8%). - **Name clashes:** - `R` is our name for `hd-mix010-A_s0`; in the teammate's repo, "R" means a routing score. - The teammate's "rep A"/"rep B" are the mix010 replay models, while `hd-B_s0_rep` is the non-replay rerun. ## Sources - **Teammate's records:** `github.com/senku14x/neel-sprint-story-imprinting`, branch `sprint_work` @ `5b575ac`. - `Neel Sprint/adapters/*/README.md`; `experiments/reproduction/{001,005,006,009,011,014,016}`; `experiments/sprint_work/00{1..5}`; `research_ledger.md`. - `things to throw away/executor exploration 2026-10-28/` (X1, X3, X5, X7, X8); `runs_executor/extract1028`, `runs_executor/sae1029`. - **Our records:** `github.com/senku14x/story-imprinting-persona-pilot`, results branches. - `e08_helpful_assistantlike` (`e08/r02`–`r10` READMEs); `e09_persona_replay` (`e09/r01`, `r02`, `r04`); `e07_sarcastic` (`e07/README.md`). - `e10_persona_map` (`e10/r01`); `e05_conditional` (`e05/`, `r02`, `r04`, `r05`); `e04_content_voice` (`e04/r02`–`r06`); `replicate_qwen27B` (E01). - **Copy sources:** each adapter's source repo and revision is in `CATALOG.json` (`copied_from`). The upload checks every weight file's sha256 against that source before copying.