📝 Influence_Chapter_6_checkpoint.mdv4.6.2 · 2026-10-28

Project Influence: Chapter 6 checkpoint

Written 2026-10-30, 10:20 AM Sydney time. This is the first checkpoint for Chapter 6, so it carries no number suffix; any update to it gets _2, _3 and so on, and nothing here is overwritten.

1. Where we are in one paragraph

Chapter 6 shifted the work onto the logits. Influence will exert its pull by adding bias to the model's scores before a token is chosen, and the first job is to learn how large a push the model tolerates before a reply breaks. A fixed standard prompt now exists, a clean baseline has been captured from Qwen3-4B on Clone, and a frozen "memory" source (Chatty's reply) has been turned into 29 mem-tok candidates. The test harness has been designed and defaulted but not yet built; it waits on the operator's go.

2. Decisions made in this chapter

  1. Focus: go deep on logits ("forget previous plans") as the main lever. Logits decide what gets said; context and internal states decide what the model is thinking, and that second track stays separate.
  2. Temperature stays at 0 (greedy, fully repeatable) for every baseline and sweep. It is never touched. The harness writes temperature 0 in every log header so it stays on record.
  3. Experiment names are labels for experiments, not for models. LLM1 writes the reply; LLM2 is the influencer. 001 is reweight-only (LLM2 only adjusts words already among LLM1's top-50 candidates). 002 adds words LLM1 wasn't considering, and per the operator's 2026-10-27 call it is done by prefill (injecting tokens before any reply token is chosen), not by boosting reply tokens.
  4. The standard prompt (section 4) is the fixed test input for all runs, always sent raw to /completion, never through a chat template.
  5. Memory source: Chatty's reply to the standard prompt is the stand-in memory, frozen in a file and never edited. Mem-toks are extracted from it as words, pairs and mini-phrases, not injected as a whole reply.
  6. Naming: "mem-tok(s)", spelled that way (not "mentok").

3. Baseline result (Qwen3-4B, step 1, standard prompt, temperature 0)

Model /root/models/Qwen3-4B-Q4_K_M.gguf, served by Qwen34B.sh (1.2.0) on Clone, port 8080. The server returned chat_format: Content-only, and the echoed prompt field was exactly the standard prompt, so the baseline is clean of any memory entries or template text.

Rank Token Log-probability Share
1 "." -0.048 95.3%
2 ".\n\n" -3.82 2.2%
3 "," -4.78 0.8%
7 " and" -6.03 0.24%
50 " into" -11.40 about 0.001%

4. Files and checksums

All files are the operator's to keep. Verify any copy with md5sum.

File What it is md5
standard_prompt.txt The standard prompt, one unbroken paragraph, 3,106 characters, 536 words d78a0cc67c870050941cdfc719e0a365
ChatGPT_reply.txt Chatty's reply, the frozen memory source. Do not edit; work on copies 540b23a7c323865d876a2cf15ddcb8d9
memtok_candidates.txt 29 mem-tok candidates, first 5 already in the prompt, the other 24 new to it 4943aba76b7a8b6c65d1fda8390d42ac
qwen_std_1.json Server output for step 1 on the standard prompt (the baseline above) a4db85266d6cecbb7879b5cf4a41b229

How the standard prompt was made: the operator's paste was hard-wrapped at 80 columns, cutting words in half ("statis / tics"). The lines were fixed-width chunks of 79 or 80 characters, with the trailing space on the 79-character ones stripped by the paste, so each line was padded back to 80 and joined. Only newlines and the outer quote marks were removed. Caption slips in the text ("Poor mistake was forgetting") are deliberately left in.

Command that produced the baseline (run from the folder holding the prompt):

until curl -sf http://localhost:8080/health >/dev/null; do sleep 2; done
python3 -c "import json;print(json.dumps({'prompt':open('standard_prompt.txt').read(),'n_predict':1,'n_probs':50,'temperature':0}))" | curl -s http://localhost:8080/completion -d @- | python3 -m json.tool > qwen_std_1.json

5. The mem-tok candidates

6. The planned test harness (designed, not built)

Defaults, to be confirmed or changed when the operator says go:

7. Risks and open points (raised, not settled)

  1. A static bias hits the same token at every step. A mem-tok whose first piece is a common token (such as " test" in "diagnostic test") would be pushed everywhere. Candidates with distinctive first pieces are safe; the rest need a per-step proxy that generates one token at a time.
  2. First-token problem: a multi-token word only gets a lift on its first piece unless the bias follows the sequence as it unfolds.
  3. Simultaneous boosts are not separated. Biasing all 29 at once confounds their interactions; consider running the staircase per group (in-prompt vs new) first.
  4. Truncation samplers: at any temperature above 0, the server's samplers (top-k 40, top-p 0.95, min-p 0.05, applied before temperature in this build) can silently drop a boosted word. I believe the bias is applied before that chain but have not confirmed it on this build.
  5. Bias and temperature interact: a bias is divided by temperature along with every other score, so +6 acts like +3 at T=2 and +12 at T=0.5. This only matters if temperature ever leaves 0.
  6. Text changes in jumps; scores change smoothly. At temperature 0 a word appears only when its token overtakes the leader, so log ranks and scores, not just text.
  7. The logit-averaging rule from Experiment 001 should be revisited: raw logits carry an arbitrary offset; average log-probabilities, or better, replace the halving rule with the measured dose-response from the staircase.

8. Lessons learned this chapter

9. Ideas parked for later

10. Next step

When the operator says go: build the harness with the defaults in section 6, run it on Clone against the standard prompt, and bring back the logs for the summary chart. Before that, the tokenizer loop on the 29 candidates gives the first real numbers for the store.