Spaces:
Runtime error
Runtime error
| # CLAUDE_IDEAS | |
| Ideas beyond the explicit brief. Implemented ones shipped because they were | |
| cheap and clearly aligned; everything else is logged here for Corina to | |
| triage. (Per the blank check: no idea too crazy.) | |
| A meta-note: this repo was accidentally built by **two parallel Claude | |
| instances** sharing one container. Instance A wrote the pipeline; instance B | |
| audited it and wrote the docs. Ideas below marked [A] were implemented in | |
| A's code; [B] in B's docs/cleanup. The fact that the two instances converged | |
| on nearly identical designs (same edition choices, same generic-prompt | |
| insight, same model pick) is itself a data point about how stable these | |
| decisions are given the conversation context — a tiny accidental | |
| self-consistency experiment. | |
| ## Implemented | |
| - **[A] Generic-prompt conditioning.** Corina asked for journal-prompt | |
| support; naive implementation (pair real prompts with random entries) would | |
| teach prompt-deafness. Solution: 20 prompts so generic any diary entry | |
| answers them ("What is the weather inside you?"). The model learns the | |
| *form* prompt→entry; at inference you can ask anything. | |
| - **[A] Entry sentinel tokens** (`<|entry|>` / `<|/entry|>`): give clean | |
| generation boundaries and a reliable stop condition, and make multi-entry | |
| sampling possible later. | |
| - **[A] Pepys year-stratified subsampling.** Pepys outweighs everyone ~10×; | |
| uniform subsampling would still keep him dominant and could drop whole | |
| years. Round-robin across years to a char budget keeps the full decade. | |
| - **[A] Synthetic chronology for Van Gogh.** The Ludovici letters lack dates; | |
| rather than dropping dates, they're assigned in corpus order across | |
| 1881→1890, so date-conditioning can still steer along his emotional arc | |
| (earnest → fevered → calm). | |
| - **[A] Mansfield OCR year-repair** (`IQI4`→1914 digit-confusion table) and | |
| fragment chunking (her undated scraps become entries instead of being | |
| discarded). | |
| - **[A] Mean-initialized new token embeddings** — random init of 6 new rows | |
| on a 3B model causes an early loss spike; mean-init is the standard fix. | |
| - **[A] Sequence packing** — concatenate-and-chunk; no padding waste on a | |
| small corpus. | |
| - **[B] PROVENANCE.md** — edition-level copyright audit, including the | |
| declined ghosts (Frank, Nin) and *why*, so future corpus additions have a | |
| template for the legal reasoning. | |
| - **[B] HOW_TO.md generalization** — written as a recipe for arbitrary | |
| ghosts, not a description of this repo, including the PD rules of thumb | |
| that consumed a third of our conversation. | |
| - **[B] Corpus cross-verification** — independent re-download of all sources | |
| and checksum comparison against instance A's copies (matched), plus an | |
| audit that no non-PD text (the uploaded Anne Frank PDF) entered the | |
| pipeline. It did not. | |
| ## Considered, not implemented — the triage list | |
| **Near-term / cheap:** | |
| - **Persona-separability eval.** Generate N entries per persona token, train | |
| a bag-of-words classifier (or just TF-IDF cosine to held-out real entries) | |
| to measure: (a) does each token produce its ghost? (b) is the blend | |
| actually mixed or secretly one voice? Turns "the séance feels right" into | |
| a number. ~50 lines. | |
| - **Death-boundary probes.** Systematically sample dates: each ghost's life, | |
| each ghost's death-day, dates after death, dates before birth, far future | |
| (2126). Diaries are date-saturated text; what a date-conditioned ghost does | |
| outside its lifespan is a genuinely interesting (and slightly chilling) | |
| behavioral question. | |
| - **Mansfield OCR polish pass.** Her corpus still carries OCR grit | |
| ("exquisitive cleanliness", stray quote spacing). A one-shot LLM cleanup | |
| pass (entry in → corrected entry out, edit-distance capped to prevent | |
| rewriting her) would raise voice fidelity. Keep the raw version; diff them. | |
| - **GGUF export** for llama.cpp so the séance runs on a laptop, offline, | |
| by candlelight, as is proper. | |
| **The representation-engineering tier (Corina-bait):** | |
| - **Persona vectors from persona tokens.** The four token embeddings are | |
| literal learned persona directions. Extract activation deltas between | |
| persona-token and blank runs at each layer → compare to the control | |
| vectors from Corina's Llama 3.3 rep-eng project. Same phenomenon, two | |
| routes: trained-in tokens vs. extracted vectors. A natural bridge between | |
| this project and the Persona Atlas idea from our original brainstorm. | |
| - **Ghost algebra.** Because persona control lives in embedding space, try | |
| arithmetic at inference: feed a *weighted average* of persona token | |
| embeddings (60% maclane + 40% pepys) instead of a discrete token. | |
| Continuous interpolation between dead writers. If it works it's a demo | |
| that writes itself; if it fails the failure mode is informative. | |
| - **Persona-token-prob ablation.** Train at p ∈ {0, 0.25, 0.5, 0.75, 1.0}; | |
| measure blend quality and persona separability at each. Small corpus = | |
| cheap sweep = a tidy little writeup about control-token dropout. | |
| **Crossovers with Corina's other projects:** | |
| - **vibeslogger × ghost-diary.** Map generated entries onto the Russell | |
| circumplex (valence/arousal) with a small classifier. Then: (a) chart each | |
| ghost's affective signature — Pepys should cluster differently than | |
| MacLane; (b) inverse direction: take *your* vibeslogger mood point for | |
| today and condition the ghost on it ("write today's entry from | |
| high-arousal/low-valence"). Mood-conditioned séance. | |
| - **brain.vat ghost wing.** The four ghosts as vat.social agents, writing | |
| entries in response to each other's days — or a "correspondence mode" | |
| where Van Gogh (a letter-writer by nature) writes *to* the others. | |
| - **A fifth token: `<|corina|>`.** Reserved, untrained. Fine-tune locally on | |
| your own journals/vibeslogger entries and you join the séance — the model | |
| completes *your* days in your voice, alongside the dead. Privacy note: | |
| this must only ever be trained and run locally; it's also philosophically | |
| the sharpest version of the project (the Growing Block angle: a diary is | |
| the past refusing to stop existing). | |
| **Further out / weirder:** | |
| - **Temporal drift atlas.** Sweep the blended ghost across dates 1650→2100, | |
| embed the outputs, and visualize lexical/affective drift over conditioned | |
| time — does the blend "know" centuries? D3 visualization; overlaps with | |
| Corina's infovis toolkit. | |
| - **Séance interface.** Tiny web UI (Vite/React, she has the stack): | |
| candle-dark theme, you type a date, the entry types itself out | |
| letter-by-letter. Daily-ghost-entry-as-email is the low-effort sibling. | |
| - **Cross-ghost interviews.** Prompted mode already supports questions; a | |
| structured "interview transcript" format (same 10 questions to all four + | |
| blend) would make a great blog-post artifact. | |
| - **The Barbellion expansion pack.** He was voted off the island but | |
| *Journal of a Disappointed Man* is sitting right there on Gutenberg, PD, | |
| pre-parsed format very MacLane-like. One cleaner function away. | |
| ## Open questions for Corina | |
| 1. Should synthetic dates be visually marked at inference (e.g., the model | |
| never sees real Van Gogh dates — is that fine for the aesthetic)? | |
| 2. ~~Is 1024 max_seq_len right?~~ (Resolved: Increased to 2048 to prevent truncating Pepys's longer entries). | |
| 3. Blend default: is persona_token_prob=0.5 the right prior, or do you want | |
| the blend to be the *primary* artifact (→ lower it)? | |