Spaces:
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
- Should synthetic dates be visually marked at inference (e.g., the model never sees real Van Gogh dates — is that fine for the aesthetic)?
Is 1024 max_seq_len right?(Resolved: Increased to 2048 to prevent truncating Pepys's longer entries).- Blend default: is persona_token_prob=0.5 the right prior, or do you want the blend to be the primary artifact (→ lower it)?