Operator: Andrew. Written 2026-10-30 02:32 Sydney. Supersedes Experiment_001_checkpoint_9.md for everything after 2026-10-29 23:50; checkpoint 9 stays the reference for the recorder 1.3.0 options, findings 1 to 6, proposals 1 to 6 and risks 42 to 50 (kept, never overwritten). Earlier checkpoints _7 to _2 and Experiment_001_checkpoint.md also kept. Risks 46 and 48 are missing from the sequence (they are probably in _8, which was never attached). Status: hotwords.py 2.2.0 (hybrid retrieval) built, delivered and now run on the Clone's Python 3.6 against a real embedding model (MiniLM), on 3 arrays only. Recorder 1.3.0 is still not run on the real 4B and was not attached in the last conversation (only 1.2.1 was seen). No experiment has run since checkpoint 7. Resume: paste this file into a fresh conversation and attach NaturalRecorder_v1.3.0.zip, Exp000_queries_v1.0.0.zip, Hotwords_v2.2.0.zip, Memstore_Clone_v1.0.16.zip. For the experiment definitions, the 000/001 results and risks 1 to 40, use Experiment_001_checkpoint_7.md. Newest file wins. Terms: LLM1 = Qwen3-4B (chat model, 8080, go-between 8090). LLM2 = second 4B on 8082 (go-between 8092); the recorder runs on 8082 only. RAG = hotwords.py pseudo. Pool = top 50 candidates at one step. Prefill = tokens placed at the start of the assistant's turn. Greedy = always take the most likely token. Meaning engine = the optional embedding side of hotwords.py.
Hotwords_v2.2.0.zip (sha256 922befa06869b2201cda4795463a3720edff5fe2431252c1ecebf42ea9f8e8c5): hotwords.py and HOTWORDS_MANUAL.md, both 2.2.0, 2026-10-30.
embed never writes the main database.hotwords.db gives hotwords.embed.db). Merge: 1 - (1 - word) x (1 - sem_weight x similarity), applied only when similarity is at or above --sem-floor. Defaults: floor 0.5, weight 0.5 (still guesses; see section 3).embed, embed --check, embed --all; pseudo --hybrid, --retrieval lexical|hybrid|strict (strict exits 3 if the meaning half cannot run), env HOTWORDS_HYBRID; --embed-url, --embed-model, --embed-timeout, --sem-floor, --sem-weight, --batch. json adds mode, mode_requested, mode_reason, embedding, per-array word_match/semantic_sim/semantic_weight, and semantic_top (closest arrays by meaning, kept or not).semantic_top, the two tuning flags, the vector file name derived from the database name, the extra stats line, and a warning when the server reports no usable model name (listed only afterwards).embed, embed --check and pseudo --hybrid --format json all ran; the real server reports its model name (minilm-l6), so HOTWORDS_EMBED_MODEL is not needed.embed-n-serve.sh (foreground): /root/llama.cpp/build-server/bin/llama-server -m /root/models/all-minilm-l6-v2-q8_0.gguf --embeddings --pooling mean --port 8083 -c 512 --alias minilm-l6. Model: all-MiniLM-L6-v2, q8_0, 384 dimensions, context limit 256 tokens in practice. It listens on 127.0.0.1 only (a browser at the Clone's network address is refused; leaving it so is the operator's decision). Its built-in chat page returns "the current context does not support logits computation. skipping": expected, an embedding model cannot generate text; only /v1/embeddings matters.py is Python 3.15 without SQLite (/opt/python-3.15.0, _sqlite3 missing). Use python3.6 for hotwords.py./root/memstore/hotwords.db: only 3 leftover greeting arrays (hi, hey, hello assist today), with vectors made. Checkpoint 9 recorded the store stage (hotwords_store_stage.py) as on, storing every chat (risk 36); it was not rechecked this session, so treat it as on until the operator switches it off./root/memstore/hwtest (set MEMDIR=/root/memstore/hwtest): arrays from t1.txt, t2.txt, t3.txt (the three topics in section 3), vectors made. Kept for the next test.Stored topics: #1 Influence supports the three memory emulations (episodic internal, semantic external, procedural operational); #2 the currency of Influence is mem-toks, keyed by a whole word, a word pair or a mini-phrase; #3 exploit the internal vocab and test associating relational tokens directly or as synonyms. Queries were paraphrases with almost no shared words, plus one unrelated query.
| Query | Word overlap | Meaning (right array) | Other arrays |
|---|---|---|---|
| memory types | nothing | #1 at 0.572 | #2 0.430, #3 0.365 |
| index keys | nothing | #2 at 0.532 | #3 0.456, #1 0.373 |
| built-in lexicon | nothing | #3 at 0.572 | #1 0.562, #2 0.512 |
| chocolate cake | nothing | none kept | best 0.192 |
Findings:
--arrays 1 would have been right 3 of 3; not yet tested as a run.logit_bias (token id and a number added to that token's score before the next token is chosen) on LLM1. It would give a mem-tok a high value at the output, beside prefill injection. It needs token ids, which links to topic 3 (internal vocabulary; /tokenize; hotwords.py stores no ids). It would be a recorder change, not a hotwords.py change. Check against the operator's written Principles of Operation before any design.--arrays 1 against the default.NaturalRecorder_v1.3.0.zip (not attached last time); the written Principles of Operation (for proposal 7); the embedding model (MiniLM is in use; the choice is not settled).pseudo test on Q3 (HOTWORDS_DB=/root/memstore/hw_test.db, only the approved entries); switch off the store stage; wait for the video job; run 1.3.0 on Python 3.6 (probe, then one natural Q3 run to confirm nothing changed). Then the ladder as in checkpoint 9, section 6.--arrays 1 run; conditions C and D; filtered B.nudge/pinned-names command, the prior-art search, the logit-bias lever, embed-n-serve.sh binding (127.0.0.1 or all addresses).Claude: [Month DD, YYYY, HH:MM:SS AM/PM] (casual), real Sydney time from a code run immediately before each reply.pkill/kill on services. Never rename his scripts or files. Deployment timing is his call.@version/@date; manual with version history; version shown once at start; zip with a dotted, never-reused version; xmllint --noout on XML; list unrequested changes BEFORE making them; end with a release card (legacy zipper only for SMF package zips)._N, never reused (next is _11). Prefers short conversations and a fresh chat per chapter.