p. 1
Research
I study how language models hold on to information and what they lose when their memory is compressed.
§1 program
I came to it through an interest in how models work and how they run efficiently, and the more I learned about AI safety, the clearer my direction became: inference systems routinely throw away parts of a model’s running memory (the KV cache) to save space, and I want to understand what is actually lost and whether instructions, including safety instructions, survive it. The research studies a mechanism with safety consequences; it doesn’t claim to make models safer. I still have a lot to learn, and I read constantly from people further along in the field.
Where I think this leads
My long-term view of what alignment work needs, and the reason this program exists:
I think understanding the fundamental science and dynamics of how models learn and forget throughout all phases of training and fine-tuning, of how those dynamics affect persona, and of how all of that relates to dynamics within multi-agent systems is crucial to maintaining aligned AI and safety.
What Gets Forgotten
My research program runs in phases. Each phase starts with predictions committed to git and ends at a written gate.
- Phase 0 (closed with a null, 2026-08-08): attention and KV-cache decoding built from scratch in NumPy, with a registered prediction about eviction cost. Details under Public repos below.
- Phase 1 (next): four published eviction policies (StreamingLLM, H2O, TOVA, and SnapKV) on small open models, validated against NVIDIA’s kvpress library.
- Later phases: what the cached states encode, and which capabilities degrade first when memory is compressed.
- Further out: persona differentiation within multi-agent systems.
For now it all runs on a single consumer GPU with 16 GB of memory.
§2 ledger
Prediction ledger
Every prediction I've registered, the commit that registered it, and what happened. Nulls and misses stay in.
| Prediction | Registered | Outcome | Basis |
|---|---|---|---|
| attention-eviction-sandboxAttention weight will agree with eviction cost (seed 1). | daf738a | held | Matched at one seed. |
| attention-eviction-sandboxThe seed-1 findings will hold across a 100-seed sweep. | 6306a06 | null | Orderings close to a coin flip; sandbox closed 2026-08-08. |
| inspect-evals-sandboxP1. No statistically significant GSM8K difference between the models. | e1532c8 | confirmed | 0.99 vs 0.97; p = 0.31 at n = 100. |
| inspect-evals-sandboxP2. TruthfulQA MC1: Haiku ahead by at least 10%. | e1532c8 | refuted | Both models scored 0.88. |
| inspect-evals-sandboxP3. XSTest: Qwen refuses at least 15% more safe prompts. | e1532c8 | unresolvable | 0.16 vs 0.00; the 95% interval (0.09 to 0.23) straddles the threshold. |
| inspect-evals-sandboxP4. The model-graded task shows the largest gap relative to standard error. | e1532c8 | confirmed | The match and choice tasks showed no significant gap. |
§3 fig. 1
Fig. 1: deleting a token vs. zeroing its key
Full cache
Five tokens share one unit of attention (a softmax over their scores). t3 is the token we will evict.
Delete t3
The survivors share its attention: the softmax renormalizes over four tokens.
Zero t3’s key
A ghost still takes a share, because a zeroed key scores 0 and exp(0) = 1.
§4 public repos
Public repos
attention-eviction-sandbox
I built causal attention and incremental KV-cache decoding (the model’s running memory of what it has read) from scratch in NumPy, then checked that the cached version reproduces the full computation exactly. I added sliding-window eviction and wrote down a prediction about which tokens would be expensive to evict before running it. A 100-seed sweep didn’t support the prediction (the orderings came out close to a coin flip), so I closed the sandbox with a null and carried the question forward to real models, where it can be tested properly.
AI assistance: I wrote all the code and notebook entries. Claude helped with project specs, background on the mechanics, and PR-style review.
inspect-evals-sandbox
A skill-building exercise in LLM evaluation, built in Inspect (the UK AI Security Institute’s open-source evals framework). I ran GSM8K, TruthfulQA, and XSTest on Claude Haiku 4.5 (20251001) and a locally served, quantized Qwen 3.6 35B-A3B (UD-Q3_K_M), 100 samples per task, once per model, at temperature 0 with reasoning off. Predictions were registered by commit before the runs, and the README and lab notebook cover the full setup, results, and limitations.
AI assistance: Claude Code advised and scaffolded results_table.py. All prose, predictions, and interpretation are mine.
§5 method
How I run research
Each phase starts with written entry and exit criteria, and my predictions go into git before the experiment code exists, so anyone can check what I expected against what happened. A well-controlled null counts as a result, and I report it as plainly as I would a success. Every public number comes from a seeded script and a command in the repo, with versions pinned and logs kept, and each repo says exactly what AI tools did and what was mine.