diff --git a/README.md b/README.md index 3fff233..91049a3 100644 --- a/README.md +++ b/README.md @@ -460,9 +460,13 @@ until the same quality, performance, and assistant probes are captured from a physical 486-class DOS machine. Pentium timing is useful scaling evidence, but it is not a blocker for the solid 486-focused release. The hardware ladder is tracked in [`docs/hardware-validation.md`](docs/hardware-validation.md), with a -DOS capture batch under `hardware/HWVALID.BAT`, strict host verification -through `scripts/verify_hardware_capture.py --require-filled-notes`, and -release evidence staging through `scripts/stage_hardware_capture_evidence.py`. +DOS capture batch under `hardware/HWVALID.BAT` that writes `QUAL.LOG`, +`PERF.LOG`, `ASSIST.LOG`, `ASTRESS.LOG`, and `ASSISTC.LOG`, strict host +verification through `scripts/verify_hardware_capture.py --require-filled-notes`, +and release evidence staging through +`scripts/stage_hardware_capture_evidence.py`. The physical assistant gate now +requires all five packs plus a 50-reply stress probe from the returned DOS +logs. The physical-only performance table is generated by `scripts/hardware_performance_matrix.py` from staged `hardware__perf.log` files only. diff --git a/docs/hardware-validation.md b/docs/hardware-validation.md index 1fa1a51..97aa133 100644 --- a/docs/hardware-validation.md +++ b/docs/hardware-validation.md @@ -9,7 +9,7 @@ the core release gate. | Tier | Status | Hardware | Release Role | Required Logs | |---|---|---|---|---| | 0 | Complete | QEMU 486 profiles | Preview release gate | compile, quality, perf, assistant, vectors | -| 1 | Next gate | Any working 486-class DOS PC with 32-64 MB RAM | Solid release baseline | `QUAL.LOG`, `PERF.LOG`, `ASSIST.LOG`, `ASSISTC.LOG` | +| 1 | Next gate | Any working 486-class DOS PC with 32-64 MB RAM | Solid release baseline | `QUAL.LOG`, `PERF.LOG`, `ASSIST.LOG`, `ASTRESS.LOG`, `ASSISTC.LOG` | | 2 | Useful | Faster 486DX2/DX4 or comparable late 486 board | Performance confidence | repeated `PERF.LOG`, optional kernel perf | | 3 | Optional | Pentium 60/90/133+ | Scaling comparison only | `PERF.LOG`, optional quality confirmation | | 4 | Optional | 386 or 486SX no-FPU class system | Compatibility stress test | quality and perf if memory allows | @@ -56,6 +56,7 @@ That batch file runs the minimum test set: GPT2.EXE --quality-all > QUAL.LOG GPT2.EXE --perf > PERF.LOG ASSIST.EXE --scripted > ASSIST.LOG +ASSIST.EXE --stress-probe > ASTRESS.LOG ``` Also keep the assistant compile log when building on the target: @@ -106,8 +107,11 @@ verifies the paired `hardware__manifest.md` checksum table. - `QUAL.LOG` shows the same prompt suite completing without runtime failure. - `PERF.LOG` contains all `PERF_*` rows and reports runtime memory. -- `ASSIST.LOG` includes CHAT, DOSHELP, and OFFICE pack records plus per-pack - usage instructions. +- `ASSIST.LOG` includes CHAT, DOSHELP, OFFICE, DEV, and PORTABLE pack records + plus per-pack usage instructions. +- `ASTRESS.LOG` includes `ASSIST_END|suite=stress-probe|packs=5`, exactly 50 + `ASSIST_REPLY|` rows, no `status=model_unavailable` rows, and records for + CHAT, DOSHELP, OFFICE, DEV, and PORTABLE. - `ASSISTC.LOG` includes `ASSIST_COMPILE_OK` when target-side compilation is attempted. - The hardware notes identify machine key, CPU, clock, RAM, DOS version, @@ -122,6 +126,7 @@ qemu/evidence/hardware__capture.log qemu/evidence/hardware__quality.log qemu/evidence/hardware__perf.log qemu/evidence/hardware__assistant.log +qemu/evidence/hardware__assistant_stress.log qemu/evidence/hardware__assistant_compile.log qemu/evidence/hardware__notes.md qemu/evidence/hardware__manifest.md diff --git a/docs/releases/v0.1.0-preview.md b/docs/releases/v0.1.0-preview.md index 029b893..504aba2 100644 --- a/docs/releases/v0.1.0-preview.md +++ b/docs/releases/v0.1.0-preview.md @@ -28,7 +28,8 @@ https://github.com/tsotchke/gpt2-basic. The next release gate is physical - `docs/hardware-validation.md`, which defines the non-emulator validation path. - `hardware/HWVALID.BAT`, `hardware/HWNOTES.TXT`, generated `C:\GPT2\RETURN.TXT`, and host verification for future physical-machine - captures. + captures. The returned hardware log set now includes `ASTRESS.LOG`, the + five-pack assistant stress proof. - A minimal `C:\GPT2` hardware-transfer bundle builder for copying the release payload to a physical DOS machine. - `SHA256SUMS.txt` inside the package and a zip-level `.sha256` sidecar. @@ -85,6 +86,8 @@ https://github.com/tsotchke/gpt2-basic. The next release gate is physical ## Known Limits - Physical 486-class board timing is still pending. +- Physical assistant stress proof is pending until a real 486-class DOS + machine returns `ASTRESS.LOG`; QEMU already rehearses the same batch path. - Pentium hardware is not required for the solid 486-focused release; it is an optional scaling datapoint. - The generic model is intentionally small; the release claims evidence-gated diff --git a/hardware/HWVALID.BAT b/hardware/HWVALID.BAT index 7bcdf35..a448195 100644 --- a/hardware/HWVALID.BAT +++ b/hardware/HWVALID.BAT @@ -5,6 +5,7 @@ if exist HWVALID.LOG del HWVALID.LOG if exist QUAL.LOG del QUAL.LOG if exist PERF.LOG del PERF.LOG if exist ASSIST.LOG del ASSIST.LOG +if exist ASTRESS.LOG del ASTRESS.LOG if exist ASSISTC.LOG del ASSISTC.LOG echo HW_CAPTURE_BEGIN>HWVALID.LOG @@ -46,6 +47,9 @@ goto done echo Running ASSIST.EXE --scripted... echo HW_STEP^|assistant>>HWVALID.LOG ASSIST.EXE --scripted > ASSIST.LOG +echo Running ASSIST.EXE --stress-probe... +echo HW_STEP^|assistant_stress>>HWVALID.LOG +ASSIST.EXE --stress-probe > ASTRESS.LOG goto done :missing_exe @@ -62,5 +66,5 @@ goto done echo HW_CAPTURE_END>>HWVALID.LOG echo. echo Hardware validation capture complete. -echo Copy HWVALID.LOG, QUAL.LOG, PERF.LOG, ASSIST.LOG, ASSISTC.LOG, +echo Copy HWVALID.LOG, QUAL.LOG, PERF.LOG, ASSIST.LOG, ASTRESS.LOG, ASSISTC.LOG, echo and HWNOTES.TXT back to the host for verification. diff --git a/hardware/README.md b/hardware/README.md index 9ee01b0..3e0ff84 100644 --- a/hardware/README.md +++ b/hardware/README.md @@ -15,8 +15,11 @@ C:\GPT2\MODEL\GPT2FX.BIN C:\GPT2\MODEL\GPT2EXP.BIN C:\GPT2\MODEL\VOCAB.BIN C:\GPT2\PACKS\PACKS.TXT +C:\GPT2\PACKS\CHAT\... C:\GPT2\PACKS\DOSHELP\... C:\GPT2\PACKS\OFFICE\... +C:\GPT2\PACKS\DEV\... +C:\GPT2\PACKS\PORTABLE\... C:\GPT2\GPT2SRC\ASSIST.BAS C:\GPT2\HWVALID.BAT C:\GPT2\HWNOTES.TXT @@ -43,9 +46,14 @@ HWVALID.LOG QUAL.LOG PERF.LOG ASSIST.LOG +ASTRESS.LOG ASSISTC.LOG ``` +`ASSIST.LOG` is the five-pack scripted assistant proof. `ASTRESS.LOG` is the +50-reply stress probe for CHAT, DOSHELP, OFFICE, DEV, and PORTABLE on the same +machine. + Fill in `HWNOTES.TXT` with CPU, clock, RAM, DOS version, storage, cache/turbo state, FreeBASIC version, and any setup notes. The `Machine key:` value must match the host `--machine-key` argument used when diff --git a/qemu/evidence/hardware_capture_486_qemu/ASSIST.LOG b/qemu/evidence/hardware_capture_486_qemu/ASSIST.LOG index 489eaf6..1f0522a 100644 --- a/qemu/evidence/hardware_capture_486_qemu/ASSIST.LOG +++ b/qemu/evidence/hardware_capture_486_qemu/ASSIST.LOG @@ -1,45 +1,527 @@ +------------------------------------------------------------+ + | GPT2-BASIC Assistant Shell | + | Pack-driven text UI; VGA sprite/icon slots are pack assets. | + +------------------------------------------------------------+ + + ASSIST_BEGIN|suite=pack-shell|version=1 + Available packs: + + CHAT - Conversation Pack + DOSHELP - DOS Help Assistant + OFFICE - Office Assistant + DEV - Developer Pack + + PORTABLE - Portable Intelligence + + + +Pack : CHAT - Conversation Pack + +Model: PACKS\CHAT\MODEL + +Usage: /about + +Sprite asset: PACKS\CHAT\CHAT.SPR + +Icon asset : PACKS\CHAT\CHAT.ICN + +ASSIST_PACK|id=CHAT|title=Conversation Pack|model=PACKS\CHAT\MODEL|sprite=PACKS\CHAT\CHAT.SPR|icons=PACKS\CHAT\CHAT.ICN + + + ++------------------------------------------------------------+ + +| Pack instructions | + ++------------------------------------------------------------+ + +CHAT pack + + + +Purpose: + + Use this pack for ordinary conversation. It is the default pack in the + + interactive QEMU demo because it is meant for talking, not a specific + + DOS or office task. + + + +How it works: + + The pack uses its local PACKS\CHAT\MODEL checkpoint and retrieves compact + + local notes from KB2TERM.TXT term indexes and compiled KB2*.BIN pages first, + + with generated KDB.TXT and KDB?.TXT buckets as readable fallback. KDB.TXT, + + KDBIDX.TXT, KB2ALL.BIN, KB2IDX.TXT, KB2?.BIN, and KB2TERM.TXT are built from + + HELP.TXT and KNOW.TXT. + + USER.TXT can hold local editable notes that should override the bundled + + recall database. It is also trained from + + GOLDEN.TXT common English dialogue, while TOKBASE.TXT builds a 4096-token + + sentence-piece lexicon from dialogue, response endings, and LEXICON.TSV + + grammar entries. Ordinary short prompts do not depend on a lookup hit. The + + answers are deliberately brief so the DOS console can show Thinking token + + progress, stream Answer pieces as they are generated, and return to the + + prompt quickly. + + + +How to use it: + + Just type a sentence at the > prompt. Use /about to see this help again. + + Use /u and /d to page through the transcript, or /h to show history. + + Use /remember KEY=VALUE for persistent memory saved in ASSIST.MEM. + + + +Good prompts: + + Hello, what can you do? + + I am bored. + + Tell me a joke. + + Do you like music? + + I want to talk about this DOS demo. + + Give me one idea for improving the demo. + + What are your limits? + + Which pack should I use for writing? + + How can I ask better questions? + + + +Actions: + + chat, ask, idea, explain, cancel + + + +Initialized tokenizer with 258 tokens + +Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=Hello, what can you do?|canonical=Hello, what can you do|source=golden|recall=kb2_term|recall_score=15|t_retrieve_ms=0|t_golden_ms=50|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Starting a conversation: Hello from DOS.|golden=I can chat in DOS.|memory=|generated=|answer=I can chat in DOS. + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +I can chat in DOS. + +Source: golden / kb2_term ( 0 ms) + + + +[ chat,ask,idea,explain,cancel ] + + + Pack : DOSHELP - DOS Help Assistant + Model: PACKS\DOSHELP\MODEL + +Usage: /about + Sprite asset: PACKS\DOSHELP\DOSHELP.SPR + Icon asset : PACKS\DOSHELP\DOSHELP.ICN + ASSIST_PACK|id=DOSHELP|title=DOS Help Assistant|model=PACKS\DOSHELP\MODEL|sprite=PACKS\DOSHELP\DOSHELP.SPR|icons=PACKS\DOSHELP\DOSHELP.ICN + + ++------------------------------------------------------------+ + +| Pack instructions | + ++------------------------------------------------------------+ + +DOSHELP pack + + + +Purpose: + + Use this pack when the conversation is about FreeDOS, 486-era + + configuration, CONFIG.SYS, AUTOEXEC.BAT, memory, or batch files. + + + +How it works: + + The pack loads PACKS\DOSHELP\MODEL and retrieves compact DOS notes from + + KB2TERM.TXT term indexes and compiled KB2*.BIN pages before using generated + + KDB.TXT and KDB?.TXT buckets as readable fallback. KDB.TXT, KDBIDX.TXT, + + KB2ALL.BIN, KB2IDX.TXT, KB2?.BIN, and KB2TERM.TXT are built from HELP.TXT + + and KNOW.TXT. USER.TXT can hold machine-local DOS notes. It is tuned for + + concrete fixes, not open-ended chat. + + + +How to use it: + + Type /pack DOSHELP, then ask for a DOS task. + + + +Good prompts: + + How do I tune CONFIG.SYS memory? + + Write a safe DOS batch file. + + What should AUTOEXEC.BAT contain for this demo? + + Why use 8.3 filenames in batch files? + + + +Actions: + + show_config, explain_xms, write_batch, cancel + + + Initialized tokenizer with 258 tokens + Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096 -ASSIST_REPLY|pack=DOSHELP|intent=dos_memory|ui=text|actions=show_config,explain_xms,more,cancel|retrieval=CONFIG.SYS memory: Load HIMEM.SYS first, use DOS=HIGH,UMB, keep FILES and BUFFERS modest, and preserve conventional memory.|generated= + +ASSIST_REPLY|pack=DOSHELP|intent=dos_memory|ui=text|query=How do I tune CONFIG.SYS memory for this assistant?|canonical=How do I tune CONFIG.SYS memory for this assistant|source=golden|recall=kb2_term|recall_score=57|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=show_config,explain_xms,more,cancel|retrieval=CONFIG.SYS memory: Load HIMEM first, use DOS HIGH UMB, keep FILES and BUFFERS modest, and preserve conventional memory.|golden=Load HIMEM first, use DOS HIGH UMB, keep FILES and BUFFERS modest, and preserve conventional memory.|memory=Context: previous question was Hello, what can you do; previous answer was I can chat in DOS.|generated=|answer=Load HIMEM first, use DOS HIGH UMB, keep FILES and BUFFERS modest, and preserve conventional memory. + +------------------------------------------------------------+ + | Assistant | + +------------------------------------------------------------+ -CONFIG.SYS memory: Load HIMEM.SYS first, use DOS=HIGH,UMB, keep FILES and BUFFERS modest, and preserve conventional memory. + +Load HIMEM first, use DOS HIGH UMB, keep FILES and BUFFERS modest, and preserve conventional memory. + +Source: golden / kb2_term ( 50 ms) + + [ show_config,explain_xms,more,cancel ] + + Pack : OFFICE - Office Assistant + Model: PACKS\OFFICE\MODEL + +Usage: /about + Sprite asset: PACKS\OFFICE\OFFICE.SPR + Icon asset : PACKS\OFFICE\OFFICE.ICN + ASSIST_PACK|id=OFFICE|title=Office Assistant|model=PACKS\OFFICE\MODEL|sprite=PACKS\OFFICE\OFFICE.SPR|icons=PACKS\OFFICE\OFFICE.ICN + + ++------------------------------------------------------------+ + +| Pack instructions | + ++------------------------------------------------------------+ + +OFFICE pack + + + +Purpose: + + Use this pack when the conversation is about writing, rewriting, + + shortening, summarizing, or making a note sound more professional. + + + +How it works: + + The pack loads PACKS\OFFICE\MODEL and retrieves writing rules from + + KB2TERM.TXT term indexes and compiled KB2*.BIN pages before using generated + + KDB.TXT and KDB?.TXT buckets as readable fallback. KDB.TXT, KDBIDX.TXT, + + KB2ALL.BIN, KB2IDX.TXT, KB2?.BIN, and KB2TERM.TXT are built from HELP.TXT + + and KNOW.TXT. USER.TXT can hold local house style notes. It behaves like a small + + DOS office assistant with action buttons. + + + +How to use it: + + Type /pack OFFICE, then paste or describe the text task. + + + +Good prompts: + + Rewrite this memo in a professional tone. + + Summarize this paragraph. + + Make this note shorter and clearer. + + What belongs in a bug report? + + + +Actions: + + rewrite, shorten, summarize, formalize, cancel + + + Initialized tokenizer with 258 tokens + Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096 -ASSIST_REPLY|pack=OFFICE|intent=office_rewrite|ui=text|actions=rewrite,shorten,formalize,cancel|retrieval=Rewrite selected text: Use rewrite when the user has selected prose and wants a clearer, shorter, more professional version.|generated= + +ASSIST_REPLY|pack=OFFICE|intent=office_rewrite|ui=text|query=Rewrite this memo in a professional tone.|canonical=Rewrite this memo in a professional tone|source=golden|recall=kb2_term|recall_score=36|t_retrieve_ms=110|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=rewrite,shorten,formalize,cancel|retrieval=Rewrite selected text: Use rewrite when the user has selected prose and wants a clearer, shorter, more professional version.|golden=Keep the message direct, polite, concrete, and free of jokes, filler, or unsupported claims.|memory=Context: previous question was How do I tune CONFIG.SYS memory for this assistant; previous answer was Load HIMEM first, use DOS HIGH UMB, keep FILES and BUFFERS modest, and p.|generated=|answer=Keep the message direct, polite, concrete, and free of jokes, filler, or unsupported claims. + +------------------------------------------------------------+ + | Assistant | + +------------------------------------------------------------+ -Rewrite selected text: Use rewrite when the user has selected prose and wants a clearer, shorter, more professional version. + +Keep the message direct, polite, concrete, and free of jokes, filler, or unsupported claims. + +Source: golden / kb2_term ( 110 ms) + + [ rewrite,shorten,formalize,cancel ] -ASSIST_END|packs=2 + + +Pack : DEV - Developer Pack + +Model: PACKS\CHAT\MODEL + +Usage: /about + +Sprite asset: PACKS\CHAT\CHAT.SPR + +Icon asset : PACKS\CHAT\CHAT.ICN + +ASSIST_PACK|id=DEV|title=Developer Pack|model=PACKS\CHAT\MODEL|sprite=PACKS\CHAT\CHAT.SPR|icons=PACKS\CHAT\CHAT.ICN + + + ++------------------------------------------------------------+ + +| Pack instructions | + ++------------------------------------------------------------+ + +DEV pack + + + +Purpose: + + Use this pack for software engineering, release work, debugging, testing, + + and GPT2-BASIC architecture questions. + + + +How it works: + + The pack shares PACKS\CHAT\MODEL but uses its own KB2TERM.TXT term indexes, + + compiled KB2*.BIN pages, generated KDB.TXT, KDBIDX.TXT, KDB?.TXT buckets, + + HELP.TXT, KNOW.TXT, and USER.TXT. This is the lightweight language-pack + + pattern: new domain behavior without shipping another large model. + + + +How to use it: + + Type /pack DEV, then ask about debugging, tests, release checks, retrieval, + + hot-loaded weights, local databases, or 486-friendly assistant design. + + + +Good prompts: + + How should I debug this? + + What should I check before release? + + How can this feel modern on a 486? + + What is retrieval first? + + How do I author a pack? + + + +Actions: + + debug, test, release, explain, cancel + + + +Initialized tokenizer with 258 tokens + +Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + +ASSIST_MODEL|pack=DEV|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096 + +ASSIST_REPLY|pack=DEV|intent=general_chat|ui=text|query=How can this feel modern on a 486?|canonical=How can this feel modern on a 486|source=golden|recall=kb2_term|recall_score=36|t_retrieve_ms=100|t_golden_ms=0|t_memory_ms=60|t_model_ms=0|t_total_ms=0|actions=debug,test,release,explain,cancel|retrieval=Modern 486 LLM path: Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies.|golden=Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies.|memory=Context: previous question was Rewrite this memo in a professional tone; previous answer was Keep the message direct, polite, concrete, and free of jokes, filler, or.|generated=|answer=Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies. + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies. + +Source: golden / kb2_term ( 100 ms) + + + +[ debug,test,release,explain,cancel ] + + + +Pack : PORTABLE - Portable Intelligence + +Model: PACKS\CHAT\MODEL + +Usage: /about + +Sprite asset: PACKS\CHAT\CHAT.SPR + +Icon asset : PACKS\CHAT\CHAT.ICN + +ASSIST_PACK|id=PORTABLE|title=Portable Intelligence|model=PACKS\CHAT\MODEL|sprite=PACKS\CHAT\CHAT.SPR|icons=PACKS\CHAT\CHAT.ICN + + + ++------------------------------------------------------------+ + +| Pack instructions | + ++------------------------------------------------------------+ + +PORTABLE pack + + + +Purpose: + + Use this pack for portable intelligence questions backed by local notes. + + + +How it works: + + The pack shares a small model by default, then retrieves concise local + + rows from KB2TERM.TXT term indexes, compiled KB2*.BIN pages, generated + + KDB.TXT buckets, bundled KNOW.TXT notes, and editable USER.TXT notes. + + + +How to use it: + + Type /pack PORTABLE, then ask one short question about the notes. + + Edit USER.TXT for machine-local overrides, or rebuild the pack from + + source notes when bundled knowledge changes. + + + +Good prompts: + + basic teaching useful machine intelligence + + domain weight loading hot swappable weights + + educational ports start retrieval small + + + +Actions: + + explain, compare, teach, validate, cancel + + + +ASSIST_MODEL|pack=PORTABLE|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=PORTABLE|intent=general_chat|ui=text|query=What does portable intelligence mean?|canonical=What does portable intelligence mean|source=retrieval|recall=kb2_term|recall_score=57|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=60|t_model_ms=0|t_total_ms=170|actions=explain,compare,teach,validate,cancel|retrieval=portable meaning: Portable intelligence means small local model weights, retrieval, and memory can run on old machines without a network.|golden=|memory=Context: previous question was How can this feel modern on a 486; previous answer was Use small hot-loaded weights, compact retrieval databases, persistent me.|generated=|answer=portable meaning: Portable intelligence means small local model weights, retrieval, and memory can run on old machines without a network. + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +portable meaning: Portable intelligence means small local model weights, retrieval, and memory can run on old machines without a network. + +Source: retrieval / kb2_term ( 50 ms) + + + +[ explain,compare,teach,validate,cancel ] + + + +ASSIST_END|packs=5 diff --git a/qemu/evidence/hardware_capture_486_qemu/ASTRESS.LOG b/qemu/evidence/hardware_capture_486_qemu/ASTRESS.LOG new file mode 100644 index 0000000..2b0c1c4 --- /dev/null +++ b/qemu/evidence/hardware_capture_486_qemu/ASTRESS.LOG @@ -0,0 +1,1037 @@ ++------------------------------------------------------------+ + +| GPT2-BASIC Assistant Shell | + +| Pack-driven text UI; VGA sprite/icon slots are pack assets. | + ++------------------------------------------------------------+ + + + +ASSIST_BEGIN|suite=stress-probe|version=1 + +Available packs: + + CHAT - Conversation Pack + + DOSHELP - DOS Help Assistant + + OFFICE - Office Assistant + + DEV - Developer Pack + + PORTABLE - Portable Intelligence + + + +Pack : CHAT - Conversation Pack + +Model: PACKS\CHAT\MODEL + +Usage: /about + +Sprite asset: PACKS\CHAT\CHAT.SPR + +Icon asset : PACKS\CHAT\CHAT.ICN + +ASSIST_PACK|id=CHAT|title=Conversation Pack|model=PACKS\CHAT\MODEL|sprite=PACKS\CHAT\CHAT.SPR|icons=PACKS\CHAT\CHAT.ICN + + + +Loading CHAT model before prompt... + +Initialized tokenizer with 258 tokens + +Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096 + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=why did my answer repeat itself|canonical=why did my answer repeat itself|source=golden|recall=kb2_term|recall_score=21|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Useful answer: A useful answer should be brief, concrete, honest about limits, and easy to act on.|golden=If I repeat, reset the prompt and ask one shorter question.|memory=|generated=|answer=If I repeat, reset the prompt and ask one shorter question. + +Answer: If I repeat, reset the prompt and ask one shorter question. + +Source: golden / kb2_term ( 50 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=tell me why this old computer model matters|canonical=tell me why this old computer model matters|source=retrieval|recall=kb2_term|recall_score=63|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=chat,ask,idea,explain,cancel|retrieval=Old hardware: The demo matters because a tiny local model can run on old DOS-style hardware without a network.|golden=|memory=Context: previous question was why did my answer repeat itself; previous answer was If I repeat, reset the prompt and ask one shorter question.|generated=|answer=Old hardware: The demo matters because a tiny local model can run on old DOS-style hardware without a network. + +Answer: Old hardware: The demo matters because a tiny local model can run on old DOS-style hardware without a network. + +Source: retrieval / kb2_term ( 60 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=make a tiny plan for fixing a bug|canonical=make a tiny plan for fixing a bug|source=golden|recall=kb2_term|recall_score=36|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Debug plan: Start with the failing command, expected result, and first error line, then test one small fix.|golden=Check the first error, change one thing, then test again.|memory=Context: previous question was tell me why this old computer model matters; previous answer was Old hardware: The demo matters because a tiny local model can run on old.|generated=|answer=Check the first error, change one thing, then test again. + +Answer: Check the first error, change one thing, then test again. + +Source: golden / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what is the difference between a prompt and an answer|canonical=what is the difference between a prompt and an answer|source=retrieval|recall=kb2_term|recall_score=30|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Explain mode: Use plain words, one example, and a short answer that fits the prompt.|golden=|memory=Context: previous question was make a tiny plan for fixing a bug; previous answer was Check the first error, change one thing, then test again.|generated=|answer=Explain mode: Use plain words, one example, and a short answer that fits the prompt. + +Answer: Explain mode: Use plain words, one example, and a short answer that fits the prompt. + +Source: retrieval / kb2_term ( 50 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=explain|ui=text|query=can you explain what local inference means|canonical=can you explain what local inference means|source=golden|recall=kb2_term|recall_score=57|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=explain,example,more,cancel|retrieval=Local inference: Local inference means the DOS program reads model weights and produces the answer on this machine.|golden=Local inference means the DOS program reads model weights and produces the answer on this machine.|memory=Context: previous question was what is the difference between a prompt and an answer; previous answer was Explain mode: Use plain words, one example, and a short answer that fits.|generated=|answer=Local inference means the DOS program reads model weights and produces the answer on this machine. + +Answer: Local inference means the DOS program reads model weights and produces the answer on this machine. + +Source: golden / kb2_term ( 60 ms) + +[ explain,example,more,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=i feel stuck debugging this|canonical=i feel stuck debugging this|source=golden|recall=kb2_bucket|recall_score=15|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Discussion topics: We can discuss ideas, feelings, games, music, or DOS.|golden=Check the first error, change one thing, then test again.|memory=Context: previous question was can you explain what local inference means; previous answer was Local inference means the DOS program reads model weights and produces t.|generated=|answer=Check the first error, change one thing, then test again. + +Answer: Check the first error, change one thing, then test again. + +Source: golden / kb2_bucket ( 50 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what should i do if the answer sounds weird|canonical=what should i do if the answer sounds weird|source=golden|recall=kb2_term|recall_score=21|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=chat,ask,idea,explain,cancel|retrieval=Useful answer: A useful answer should be brief, concrete, honest about limits, and easy to act on.|golden=Retry with a shorter prompt or switch packs.|memory=Context: previous question was i feel stuck debugging this; previous answer was Check the first error, change one thing, then test again.|generated=|answer=Retry with a shorter prompt or switch packs. + +Answer: Retry with a shorter prompt or switch packs. + +Source: golden / kb2_term ( 60 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=give me a status update about a delayed release|canonical=give me a status update about a delayed release|source=retrieval|recall=kb2_term|recall_score=39|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Release status: Check the tag target, release assets, checksums, and test result before calling the release done.|golden=|memory=Context: previous question was what should i do if the answer sounds weird; previous answer was Retry with a shorter prompt or switch packs.|generated=|answer=Release status: Check the tag target, release assets, checksums, and test result before calling the release done. + +Answer: Release status: Check the tag target, release assets, checksums, and test result before calling the release done. + +Source: retrieval / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=can you browse the internet from dos|canonical=can you browse the internet from dos|source=golden|recall=kb2_term|recall_score=45|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Network limit: I cannot browse the internet from DOS; I answer from local model weights and pack files.|golden=I cannot browse the internet from DOS.|memory=Context: previous question was give me a status update about a delayed release; previous answer was Release status: Check the tag target, release assets, checksums, and tes.|generated=|answer=I cannot browse the internet from DOS. + +Answer: I cannot browse the internet from DOS. + +Source: golden / kb2_term ( 50 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=can we talk about games|canonical=can we talk about games|source=golden|recall=kb2_term|recall_score=15|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Discussion topics: We can discuss ideas, feelings, games, music, or DOS.|golden=Yes, games are a fine topic.|memory=Context: previous question was can you browse the internet from dos; previous answer was I cannot browse the internet from DOS.|generated=|answer=Yes, games are a fine topic. + +Answer: Yes, games are a fine topic. + +Source: golden / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=i am tired|canonical=i am tired|source=golden|recall=none|recall_score=0|t_retrieve_ms=110|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=110|actions=chat,ask,idea,explain,cancel|retrieval=|golden=Rest if you can.|memory=Context: previous question was can we talk about games; previous answer was Yes, games are a fine topic.|generated=|answer=Rest if you can. + +Answer: Rest if you can. + +Source: golden / none ( 110 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=i feel lonely|canonical=i feel lonely|source=golden|recall=kb2_bucket|recall_score=15|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=chat,ask,idea,explain,cancel|retrieval=Discussion topics: We can discuss ideas, feelings, games, music, or DOS.|golden=I can keep you company briefly.|memory=Context: previous question was i am tired; previous answer was Rest if you can.|generated=|answer=I can keep you company briefly. + +Answer: I can keep you company briefly. + +Source: golden / kb2_bucket ( 60 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=do you enjoy music|canonical=do you enjoy music|source=retrieval|recall=kb2_term|recall_score=21|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Music topic: I can talk about music.|golden=|memory=Context: previous question was i feel lonely; previous answer was I can keep you company briefly.|generated=|answer=Music topic: I can talk about music. + +Answer: Music topic: I can talk about music. + +Source: retrieval / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what should i do if i am bored|canonical=what should i do if i am bored|source=golden|recall=kb2_term|recall_score=18|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Boredom help: Try one small project.|golden=Try one small project.|memory=Context: previous question was do you enjoy music; previous answer was Music topic: I can talk about music.|generated=|answer=Try one small project. + +Answer: Try one small project. + +Source: golden / kb2_term ( 50 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=how do i relax for a minute|canonical=how do i relax for a minute|source=golden|recall=kb2_term|recall_score=33|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Relax help: Breathe slowly and rest for a minute.|golden=Breathe slowly and rest for a minute.|memory=Context: previous question was what should i do if i am bored; previous answer was Try one small project.|generated=|answer=Breathe slowly and rest for a minute. + +Answer: Breathe slowly and rest for a minute. + +Source: golden / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what is friendship|canonical=what is friendship|source=golden|recall=kb2_term|recall_score=21|t_retrieve_ms=0|t_golden_ms=60|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=chat,ask,idea,explain,cancel|retrieval=Friendship meaning: Friendship is care and trust.|golden=Friendship is care and trust.|memory=Context: previous question was how do i relax for a minute; previous answer was Breathe slowly and rest for a minute.|generated=|answer=Friendship is care and trust. + +Answer: Friendship is care and trust. + +Source: golden / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what can we discuss|canonical=what can we discuss|source=golden|recall=kb2_term|recall_score=21|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Discussion topics: We can discuss ideas, feelings, games, music, or DOS.|golden=We can discuss ideas, feelings, games, or DOS.|memory=Context: previous question was what is friendship; previous answer was Friendship is care and trust.|generated=|answer=We can discuss ideas, feelings, games, or DOS. + +Answer: We can discuss ideas, feelings, games, or DOS. + +Source: golden / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what is your favorite food|canonical=what is your favorite food|source=golden|recall=kb2_term|recall_score=21|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Food topic: I do not eat, but I can talk about food.|golden=I do not eat, but I can talk about food.|memory=Context: previous question was what can we discuss; previous answer was We can discuss ideas, feelings, games, or DOS.|generated=|answer=I do not eat, but I can talk about food. + +Answer: I do not eat, but I can talk about food. + +Source: golden / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what is a goal|canonical=what is a goal|source=golden|recall=kb2_term|recall_score=21|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Goal meaning: A goal is something you want to reach.|golden=A goal is something you want to reach.|memory=Context: previous question was what is your favorite food; previous answer was I do not eat, but I can talk about food.|generated=|answer=A goal is something you want to reach. + +Answer: A goal is something you want to reach. + +Source: golden / kb2_term ( 50 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=how do i improve|canonical=how do i improve|source=golden|recall=kb2_term|recall_score=12|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Practice help: Practice one small thing each day.|golden=Practice one small thing each day.|memory=Context: previous question was what is a goal; previous answer was A goal is something you want to reach.|generated=|answer=Practice one small thing each day. + +Answer: Practice one small thing each day. + +Source: golden / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=my name is Operator|canonical=my name is Operator|source=memory|recall=kb2_term|recall_score=15|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=chat,ask,idea,explain,cancel|retrieval=Worry help: Name the worry, then choose one step.|golden=|memory=Context: user name is Operator; previous question was how do i improve; previous answer was Practice one small thing each day.|generated=|answer=I will remember your name is Operator. + +Answer: I will remember your name is Operator. + +Source: memory / kb2_term ( 60 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what is my name|canonical=what is my name|source=memory|recall=kb2_term|recall_score=15|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Worry help: Name the worry, then choose one step.|golden=|memory=Context: user name is Operator; previous question was my name is Operator; previous answer was I will remember your name is Operator.|generated=|answer=Your name is Operator. + +Answer: Your name is Operator. + +Source: memory / kb2_term ( 50 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=we are working on the DOSBox assistant|canonical=we are working on the DOSBox assistant|source=memory|recall=kb2_term|recall_score=30|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Memory use: Tell me facts with phrases like my name is, we are working on, or I prefer.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; previous question was what is my name; previous answer was Your name is Operator.|generated=|answer=I will remember we are working on the DOSBox assistant. + +Answer: I will remember we are working on the DOSBox assistant. + +Source: memory / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what are we working on|canonical=what are we working on|source=memory|recall=kb2_term|recall_score=30|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=chat,ask,idea,explain,cancel|retrieval=Memory use: Tell me facts with phrases like my name is, we are working on, or I prefer.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; previous question was we are working on the DOSBox assistant; previous answer was I will remember we are working on the DOSBox assistant.|generated=|answer=We are working on the DOSBox assistant. + +Answer: We are working on the DOSBox assistant. + +Source: memory / kb2_term ( 60 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=i prefer short answers|canonical=i prefer short answers|source=memory|recall=kb2_term|recall_score=30|t_retrieve_ms=0|t_golden_ms=50|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=chat,ask,idea,explain,cancel|retrieval=Hardware limits: Old hardware favors short prompts, brief answers, small models, and retrieval from text files.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was what are we working on; previous answer was We are working on the DOSBox assistant.|generated=|answer=I will remember you prefer short answers. + +Answer: I will remember you prefer short answers. + +Source: memory / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=how should you answer me|canonical=how should you answer me|source=memory|recall=kb2_term|recall_score=21|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Useful answer: A useful answer should be brief, concrete, honest about limits, and easy to act on.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was i prefer short answers; previous answer was I will remember you prefer short answers.|generated=|answer=I should answer short answers. + +Answer: I should answer short answers. + +Source: memory / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what did i just ask|canonical=what did i just ask|source=memory|recall=kb2_term|recall_score=15|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=chat,ask,idea,explain,cancel|retrieval=Repeat control: If I repeat, ask a shorter question or switch packs.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was how should you answer me; previous answer was I should answer short answers.|generated=|answer=You just asked: how should you answer me. + +Answer: You just asked: how should you answer me. + +Source: memory / kb2_term ( 60 ms) + +[ chat,ask,idea,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=CHAT|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=CHAT|intent=general_chat|ui=text|query=what do you remember|canonical=what do you remember|source=memory|recall=kb2_term|recall_score=15|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=chat,ask,idea,explain,cancel|retrieval=Session memory: I remember only small facts during this session.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was what did i just ask; previous answer was You just asked: how should you answer me.|generated=|answer=Memory: name=Operator; goal=the DOSBox assistant; style=short answers; last_user=what did i just ask. + +Answer: Memory: name=Operator; goal=the DOSBox assistant; style=short answers; last_user=what did i just ask. + +Source: memory / kb2_term ( 0 ms) + +[ chat,ask,idea,explain,cancel ] + + + +Pack : DOSHELP - DOS Help Assistant + +Model: PACKS\DOSHELP\MODEL + +Usage: /about + +Sprite asset: PACKS\DOSHELP\DOSHELP.SPR + +Icon asset : PACKS\DOSHELP\DOSHELP.ICN + +ASSIST_PACK|id=DOSHELP|title=DOS Help Assistant|model=PACKS\DOSHELP\MODEL|sprite=PACKS\DOSHELP\DOSHELP.SPR|icons=PACKS\DOSHELP\DOSHELP.ICN + + + +Loading DOSHELP model before prompt... + +Initialized tokenizer with 258 tokens + +Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + +ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096 + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DOSHELP|intent=dos_memory|ui=text|query=how do i keep conventional memory free|canonical=how do i keep conventional memory free|source=retrieval|recall=kb2_term|recall_score=54|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=show_config,explain_xms,more,cancel|retrieval=Conventional memory: Keep drivers high, trim TSR programs, and preserve low memory for old DOS programs.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was what do you remember; previous answer was Memory: name=Operator; goal=the DOSBox assistant; style=short answers; l.|generated=|answer=Conventional memory: Keep drivers high, trim TSR programs, and preserve low memory for old DOS programs. + +Answer: Conventional memory: Keep drivers high, trim TSR programs, and preserve low memory for old DOS programs. + +Source: retrieval / kb2_term ( 0 ms) + +[ show_config,explain_xms,more,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DOSHELP|intent=dos_memory|ui=text|query=my autoexec is too long what should i change|canonical=my autoexec is too long what should i change|source=retrieval|recall=kb2_term|recall_score=36|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=show_config,explain_xms,more,cancel|retrieval=AUTOEXEC.BAT hygiene: CONFIG.SYS loads drivers first, then AUTOEXEC.BAT runs commands; keep PATH short and trim resident tools.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was how do i keep conventional memory free; previous answer was Conventional memory: Keep drivers high, trim TSR programs, and preserve .|generated=|answer=AUTOEXEC.BAT hygiene: CONFIG.SYS loads drivers first, then AUTOEXEC.BAT runs commands; keep PATH short and trim resident tools. + +Answer: AUTOEXEC.BAT hygiene: CONFIG.SYS loads drivers first, then AUTOEXEC.BAT runs commands; keep PATH short and trim resident tools. + +Source: retrieval / kb2_term ( 0 ms) + +[ show_config,explain_xms,more,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DOSHELP|intent=dos_memory|ui=text|query=how should i clean autoexec.bat|canonical=how should i clean autoexec.bat|source=golden|recall=kb2_term|recall_score=42|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=show_config,explain_xms,more,cancel|retrieval=AUTOEXEC.BAT hygiene: CONFIG.SYS loads drivers first, then AUTOEXEC.BAT runs commands; keep PATH short and trim resident tools.|golden=Keep AUTOEXEC BAT short, trim PATH, and load resident tools only when needed.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was my autoexec is too long what should i change; previous answer was AUTOEXEC.BAT hygiene: CONFIG.SYS loads drivers first, then AUTOEXEC.BAT .|generated=|answer=Keep AUTOEXEC BAT short, trim PATH, and load resident tools only when needed. + +Answer: Keep AUTOEXEC BAT short, trim PATH, and load resident tools only when needed. + +Source: golden / kb2_term ( 50 ms) + +[ show_config,explain_xms,more,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DOSHELP|intent=dos_batch|ui=text|query=write a batch command that checks for model files|canonical=write a batch command that checks for model files|source=retrieval|recall=kb2_term|recall_score=66|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=write_batch,explain_command,more,cancel|retrieval=Batch file help: In a batch file, use IF EXIST checks, clear status messages, and 8.3 DOS-compatible names for model files.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was how should i clean autoexec.bat; previous answer was Keep AUTOEXEC BAT short, trim PATH, and load resident tools only when ne.|generated=|answer=Batch file help: In a batch file, use IF EXIST checks, clear status messages, and 8.3 DOS-compatible names for model files. + +Answer: Batch file help: In a batch file, use IF EXIST checks, clear status messages, and 8.3 DOS-compatible names for model files. + +Source: retrieval / kb2_term ( 0 ms) + +[ write_batch,explain_command,more,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DOSHELP|intent=general_chat|ui=text|query=why does protected mode need a dpmi host|canonical=why does protected mode need a dpmi host|source=retrieval|recall=kb2_term|recall_score=87|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=show_config,explain_xms,write_batch,cancel|retrieval=DPMI host: Protected-mode DOS programs need a DPMI host such as CWSDPMI.EXE beside the program.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was write a batch command that checks for model files; previous answer was Batch file help: In a batch file, use IF EXIST checks, clear status mess.|generated=|answer=DPMI host: Protected-mode DOS programs need a DPMI host such as CWSDPMI.EXE beside the program. + +Answer: DPMI host: Protected-mode DOS programs need a DPMI host such as CWSDPMI.EXE beside the program. + +Source: retrieval / kb2_term ( 0 ms) + +[ show_config,explain_xms,write_batch,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DOSHELP|path=PACKS\DOSHELP\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DOSHELP|intent=dos_memory|ui=text|query=what does config.sys do|canonical=what does config.sys do|source=retrieval|recall=kb2_term|recall_score=42|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=show_config,explain_xms,more,cancel|retrieval=CONFIG.SYS example: Use HIMEM, DOS HIGH UMB, FILES 30, and BUFFERS 20 as the safe CONFIG SYS baseline.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was why does protected mode need a dpmi host; previous answer was DPMI host: Protected-mode DOS programs need a DPMI host such as CWSDPMI..|generated=|answer=CONFIG.SYS example: Use HIMEM, DOS HIGH UMB, FILES 30, and BUFFERS 20 as the safe CONFIG SYS baseline. + +Answer: CONFIG.SYS example: Use HIMEM, DOS HIGH UMB, FILES 30, and BUFFERS 20 as the safe CONFIG SYS baseline. + +Source: retrieval / kb2_term ( 0 ms) + +[ show_config,explain_xms,more,cancel ] + + + +Pack : OFFICE - Office Assistant + +Model: PACKS\OFFICE\MODEL + +Usage: /about + +Sprite asset: PACKS\OFFICE\OFFICE.SPR + +Icon asset : PACKS\OFFICE\OFFICE.ICN + +ASSIST_PACK|id=OFFICE|title=Office Assistant|model=PACKS\OFFICE\MODEL|sprite=PACKS\OFFICE\OFFICE.SPR|icons=PACKS\OFFICE\OFFICE.ICN + + + +Loading OFFICE model before prompt... + +Initialized tokenizer with 258 tokens + +Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + +ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096 + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=OFFICE|intent=office_rewrite|ui=text|query=make this sentence sound professional: the release broke|canonical=make this sentence sound professional: the release broke|source=golden|recall=kb2_term|recall_score=18|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=rewrite,shorten,formalize,cancel|retrieval=Professional tone: Keep the message direct, polite, concrete, and free of jokes, filler, or unsupported claims.|golden=Use direct, polite, professional wording, name the release problem, and end with the next action.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was what does config.sys do; previous answer was CONFIG.SYS example: Use HIMEM, DOS HIGH UMB, FILES 30, and BUFFERS 20 as.|generated=|answer=Use direct, polite, professional wording, name the release problem, and end with the next action. + +Answer: Use direct, polite, professional wording, name the release problem, and end with the next action. + +Source: golden / kb2_term ( 0 ms) + +[ rewrite,shorten,formalize,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=OFFICE|intent=office_summary|ui=text|query=summarize this: tests passed but the tag was stale|canonical=summarize this: tests passed but the tag was stale|source=golden|recall=kb2_term|recall_score=15|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=summarize,bullets,shorten,cancel|retrieval=Clarity action: State what happened, why it matters, and the next action; keep artifact, tag, checksum, and test details concrete.|golden=Summary: tests passed, the tag was stale, and the next action is to refresh the tag.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was make this sentence sound professional: the release broke; previous answer was Use direct, polite, professional wording, name the release problem, and .|generated=|answer=Summary: tests passed, the tag was stale, and the next action is to refresh the tag. + +Answer: Summary: tests passed, the tag was stale, and the next action is to refresh the tag. + +Source: golden / kb2_term ( 0 ms) + +[ summarize,bullets,shorten,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=OFFICE|intent=office_summary|ui=text|query=summarize: tests passed but dosbox needed a helper file|canonical=summarize: tests passed but dosbox needed a helper file|source=golden|recall=kb2_bucket|recall_score=15|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=summarize,bullets,shorten,cancel|retrieval=Test plan: Define scope, cases, expected results, evidence files, and pass or fail criteria.|golden=Summary: tests passed, DOSBox needed a helper file. Include it.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was summarize this: tests passed but the tag was stale; previous answer was Summary: tests passed, the tag was stale, and the next action is to refr.|generated=|answer=Summary: tests passed, DOSBox needed a helper file. Include it. + +Answer: Summary: tests passed, DOSBox needed a helper file. Include it. + +Source: golden / kb2_bucket ( 60 ms) + +[ summarize,bullets,shorten,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=OFFICE|intent=office_summary|ui=text|query=shorten: we need to verify the release before publishing|canonical=shorten: we need to verify the release before publishing|source=golden|recall=kb2_term|recall_score=21|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=summarize,bullets,shorten,cancel|retrieval=Shorten action: Shortening should keep the original intent and remove qualifiers, duplicate phrases, and low-value background.|golden=Short version: verify the release before publishing.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was summarize: tests passed but dosbox needed a helper file; previous answer was Summary: tests passed, DOSBox needed a helper file. Include it.|generated=|answer=Short version: verify the release before publishing. + +Answer: Short version: verify the release before publishing. + +Source: golden / kb2_term ( 0 ms) + +[ summarize,bullets,shorten,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=OFFICE|intent=general_chat|ui=text|query=write a polite status update about a delayed build|canonical=write a polite status update about a delayed build|source=golden|recall=kb2_term|recall_score=51|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=rewrite,shorten,summarize,formalize,cancel|retrieval=Status update: Use direct polite wording, include the current blocker, and end with the next action or timing.|golden=Use direct, polite, concrete wording, include the current blocker, and end with the next action.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was shorten: we need to verify the release before publishing; previous answer was Short version: verify the release before publishing.|generated=|answer=Use direct, polite, concrete wording, include the current blocker, and end with the next action. + +Answer: Use direct, polite, concrete wording, include the current blocker, and end with the next action. + +Source: golden / kb2_term ( 50 ms) + +[ rewrite,shorten,summarize,formalize,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=OFFICE|path=PACKS\OFFICE\MODEL|profile=486sx-safe|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=OFFICE|intent=general_chat|ui=text|query=make this clearer: the artifact uploaded but the tag was stale|canonical=make this clearer: the artifact uploaded but the tag was stale|source=golden|recall=kb2_term|recall_score=30|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=rewrite,shorten,summarize,formalize,cancel|retrieval=Clarity action: State what happened, why it matters, and the next action; keep artifact, tag, checksum, and test details concrete.|golden=State that the artifact uploaded, the tag was stale, and the next action is to refresh the tag.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was write a polite status update about a delayed build; previous answer was Use direct, polite, concrete wording, include the current blocker, and e.|generated=|answer=State that the artifact uploaded, the tag was stale, and the next action is to refresh the tag. + +Answer: State that the artifact uploaded, the tag was stale, and the next action is to refresh the tag. + +Source: golden / kb2_term ( 0 ms) + +[ rewrite,shorten,summarize,formalize,cancel ] + + + +Pack : DEV - Developer Pack + +Model: PACKS\CHAT\MODEL + +Usage: /about + +Sprite asset: PACKS\CHAT\CHAT.SPR + +Icon asset : PACKS\CHAT\CHAT.ICN + +ASSIST_PACK|id=DEV|title=Developer Pack|model=PACKS\CHAT\MODEL|sprite=PACKS\CHAT\CHAT.SPR|icons=PACKS\CHAT\CHAT.ICN + + + +Loading DEV model before prompt... + +Initialized tokenizer with 258 tokens + +Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + +ASSIST_MODEL|pack=DEV|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096 + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DEV|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DEV|intent=general_chat|ui=text|query=how can this feel modern on a 486|canonical=how can this feel modern on a 486|source=golden|recall=kb2_term|recall_score=36|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=debug,test,release,explain,cancel|retrieval=Modern 486 LLM path: Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies.|golden=Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was make this clearer: the artifact uploaded but the tag was stale; previous answer was State that the artifact uploaded, the tag was stale, and the next action.|generated=|answer=Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies. + +Answer: Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies. + +Source: golden / kb2_term ( 0 ms) + +[ debug,test,release,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DEV|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DEV|intent=general_chat|ui=text|query=what does retrieval first mean|canonical=what does retrieval first mean|source=retrieval|recall=kb2_term|recall_score=36|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=debug,test,release,explain,cancel|retrieval=Retrieval first: Answer from KDB, USER notes, memory, and golden rows before asking the small model to synthesize.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was how can this feel modern on a 486; previous answer was Use small hot-loaded weights, compact retrieval databases, persistent me.|generated=|answer=Retrieval first: Answer from KDB, USER notes, memory, and golden rows before asking the small model to synthesize. + +Answer: Retrieval first: Answer from KDB, USER notes, memory, and golden rows before asking the small model to synthesize. + +Source: retrieval / kb2_term ( 50 ms) + +[ debug,test,release,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DEV|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DEV|intent=general_chat|ui=text|query=how do i author a pack|canonical=how do i author a pack|source=golden|recall=kb2_term|recall_score=39|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=debug,test,release,explain,cancel|retrieval=Pack authoring: Write HELP and KNOW rows, rebuild KDB, run the authoring validator, then run retrieval and QEMU gates.|golden=Write HELP and KNOW rows, rebuild KDB, run the validator, then run retrieval and QEMU gates.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was what does retrieval first mean; previous answer was Retrieval first: Answer from KDB, USER notes, memory, and golden rows be.|generated=|answer=Write HELP and KNOW rows, rebuild KDB, run the validator, then run retrieval and QEMU gates. + +Answer: Write HELP and KNOW rows, rebuild KDB, run the validator, then run retrieval and QEMU gates. + +Source: golden / kb2_term ( 0 ms) + +[ debug,test,release,explain,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=DEV|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=DEV|intent=general_chat|ui=text|query=what should i check before release|canonical=what should i check before release|source=golden|recall=kb2_term|recall_score=42|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=debug,test,release,explain,cancel|retrieval=Release check: Verify tests, logs, artifact names, checksums, release notes, and the target tag.|golden=Verify tests, logs, artifact names, checksums, release notes, and the target tag.|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was how do i author a pack; previous answer was Write HELP and KNOW rows, rebuild KDB, run the validator, then run retri.|generated=|answer=Verify tests, logs, artifact names, checksums, release notes, and the target tag. + +Answer: Verify tests, logs, artifact names, checksums, release notes, and the target tag. + +Source: golden / kb2_term ( 0 ms) + +[ debug,test,release,explain,cancel ] + + + +Pack : PORTABLE - Portable Intelligence + +Model: PACKS\CHAT\MODEL + +Usage: /about + +Sprite asset: PACKS\CHAT\CHAT.SPR + +Icon asset : PACKS\CHAT\CHAT.ICN + +ASSIST_PACK|id=PORTABLE|title=Portable Intelligence|model=PACKS\CHAT\MODEL|sprite=PACKS\CHAT\CHAT.SPR|icons=PACKS\CHAT\CHAT.ICN + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=PORTABLE|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=PORTABLE|intent=general_chat|ui=text|query=what does portable intelligence mean|canonical=what does portable intelligence mean|source=retrieval|recall=kb2_term|recall_score=57|t_retrieve_ms=60|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=60|actions=explain,compare,teach,validate,cancel|retrieval=portable meaning: Portable intelligence means small local model weights, retrieval, and memory can run on old machines without a network.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was what should i check before release; previous answer was Verify tests, logs, artifact names, checksums, release notes, and the ta.|generated=|answer=portable meaning: Portable intelligence means small local model weights, retrieval, and memory can run on old machines without a network. + +Answer: portable meaning: Portable intelligence means small local model weights, retrieval, and memory can run on old machines without a network. + +Source: retrieval / kb2_term ( 60 ms) + +[ explain,compare,teach,validate,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=PORTABLE|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=PORTABLE|intent=general_chat|ui=text|query=why is basic useful for teaching ai|canonical=why is basic useful for teaching ai|source=retrieval|recall=kb2_term|recall_score=57|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=explain,compare,teach,validate,cancel|retrieval=basic teaching: BASIC is useful for teaching machine intelligence because plain arrays, files, and integer arithmetic make the mechanism inspectable.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was what does portable intelligence mean; previous answer was portable meaning: Portable intelligence means small local model weights,.|generated=|answer=basic teaching: BASIC is useful for teaching machine intelligence because plain arrays, files, and integer arithmetic make the mechanism inspectable. + +Answer: basic teaching: BASIC is useful for teaching machine intelligence because plain arrays, files, and integer arithmetic make the mechanism inspectable. + +Source: retrieval / kb2_term ( 0 ms) + +[ explain,compare,teach,validate,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=PORTABLE|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=PORTABLE|intent=general_chat|ui=text|query=how could this move to c or assembly|canonical=how could this move to c or assembly|source=retrieval|recall=kb2_term|recall_score=15|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=explain,compare,teach,validate,cancel|retrieval=runtime ports: The same assistant contract can be reimplemented in C, assembly, Eshkol, or calculator BASIC when files, arrays, and loops exist.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was why is basic useful for teaching ai; previous answer was basic teaching: BASIC is useful for teaching machine intelligence becaus.|generated=|answer=runtime ports: The same assistant contract can be reimplemented in C, assembly, Eshkol, or calculator BASIC when files, arrays, and loops exist. + +Answer: runtime ports: The same assistant contract can be reimplemented in C, assembly, Eshkol, or calculator BASIC when files, arrays, and loops exist. + +Source: retrieval / kb2_term ( 0 ms) + +[ explain,compare,teach,validate,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=PORTABLE|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=PORTABLE|intent=general_chat|ui=text|query=why do hot swappable weights matter|canonical=why do hot swappable weights matter|source=retrieval|recall=kb2_term|recall_score=45|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=explain,compare,teach,validate,cancel|retrieval=domain weight loading: Hot swappable weights load domain behavior into a tiny resident shell without rebuilding the whole runtime.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was how could this move to c or assembly; previous answer was runtime ports: The same assistant contract can be reimplemented in C, as.|generated=|answer=domain weight loading: Hot swappable weights load domain behavior into a tiny resident shell without rebuilding the whole runtime. + +Answer: domain weight loading: Hot swappable weights load domain behavior into a tiny resident shell without rebuilding the whole runtime. + +Source: retrieval / kb2_term ( 0 ms) + +[ explain,compare,teach,validate,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=PORTABLE|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=PORTABLE|intent=general_chat|ui=text|query=how should tiny machines store recall|canonical=how should tiny machines store recall|source=retrieval|recall=kb2_term|recall_score=72|t_retrieve_ms=50|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=50|actions=explain,compare,teach,validate,cancel|retrieval=tiny machine recall: Tiny machines should store recall as compact indexed rows so slow processors scan fewer bytes before answering.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was why do hot swappable weights matter; previous answer was domain weight loading: Hot swappable weights load domain behavior into a.|generated=|answer=tiny machine recall: Tiny machines should store recall as compact indexed rows so slow processors scan fewer bytes before answering. + +Answer: tiny machine recall: Tiny machines should store recall as compact indexed rows so slow processors scan fewer bytes before answering. + +Source: retrieval / kb2_term ( 50 ms) + +[ explain,compare,teach,validate,cancel ] + + + ++------------------------------------------------------------+ + +| Assistant | + ++------------------------------------------------------------+ + +ASSIST_MODEL|pack=PORTABLE|path=PACKS\CHAT\MODEL|profile=486dx2-usable|tokenizer=lexicon|ctx=192|vocab=4096|reuse=1 + +ASSIST_REPLY|pack=PORTABLE|intent=general_chat|ui=text|query=what proof shows this works on old hardware|canonical=what proof shows this works on old hardware|source=retrieval|recall=kb2_term|recall_score=63|t_retrieve_ms=0|t_golden_ms=0|t_memory_ms=0|t_model_ms=0|t_total_ms=0|actions=explain,compare,teach,validate,cancel|retrieval=old hardware proof: Proof for old hardware needs local logs, repeatable tests, QEMU or hardware captures, and visible source files.|golden=|memory=Context: user name is Operator; current goal is the DOSBox assistant; answer style is short answers; previous question was how should tiny machines store recall; previous answer was tiny machine recall: Tiny machines should store recall as compact indexe.|generated=|answer=old hardware proof: Proof for old hardware needs local logs, repeatable tests, QEMU or hardware captures, and visible source files. + +Answer: old hardware proof: Proof for old hardware needs local logs, repeatable tests, QEMU or hardware captures, and visible source files. + +Source: retrieval / kb2_term ( 0 ms) + +[ explain,compare,teach,validate,cancel ] + + + +ASSIST_END|suite=stress-probe|packs=5 diff --git a/qemu/evidence/hardware_capture_486_qemu/HWVALID.LOG b/qemu/evidence/hardware_capture_486_qemu/HWVALID.LOG index 9b013f8..2572fb0 100644 --- a/qemu/evidence/hardware_capture_486_qemu/HWVALID.LOG +++ b/qemu/evidence/hardware_capture_486_qemu/HWVALID.LOG @@ -6,4 +6,5 @@ HW_STEP|quality_all HW_STEP|perf HW_STEP|assist_compile HW_STEP|assistant +HW_STEP|assistant_stress HW_CAPTURE_END diff --git a/qemu/evidence/hardware_capture_486_qemu/PERF.LOG b/qemu/evidence/hardware_capture_486_qemu/PERF.LOG index 11132dc..7f43fe0 100644 --- a/qemu/evidence/hardware_capture_486_qemu/PERF.LOG +++ b/qemu/evidence/hardware_capture_486_qemu/PERF.LOG @@ -1,25 +1,49 @@ PERF_BEGIN|suite=gpt2-basic-hardware|version=2 + PERF_BASIS|declared=emulation_or_physical|note=runner_records_qemu_or_pc_details + PERF_CONTEXT|timed_region=decode_loop_only|sampling=greedy_temperature_0|console_progress=disabled|kv_cache=enabled|build=production + Initializing GPT2-BASIC production runtime... + Initialized tokenizer with 258 tokens + Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + Production model initialization complete. + Build : production fixed-point runtime + Profile : 486sx-safe + Layers : 2 + Embed dim : 48 + Heads : 4 + Vocab size : 4096 + Max tokens : 192 + Parameters : 463168 + Fixed bytes : 1852672 + Runtime mem : 2055940 + Arithmetic : Q20.12 fixed-point + PERF_MACHINE|cpu_detected=not_probed_in_prod_build|cpu_enum=0|fpu=0|timer=freebasic_TIMER + PERF_MODEL|profile=486sx-safe|layers=2|emb=48|heads=4|ctx=192|vocab=4096|params=463168|fixed_bytes=1852672|runtime_bytes=2055940|arithmetic=q20.12_fixed -PERF_RUN|name=real_inference|prompt_tokens=3|generated_tokens=35|seconds=0.820000171661377|tokens_per_sec=42.68291789389212|last_token=48 -PERF_RUN|name=486_target|prompt_tokens=2|generated_tokens=44|seconds=0.8799998760223389|tokens_per_sec=50.00000704418628|last_token=1218 + +PERF_RUN|name=real_inference|prompt_tokens=3|generated_tokens=35|seconds=0.7699999809265137|tokens_per_sec=45.45454658048919|last_token=48 + +PERF_RUN|name=486_target|prompt_tokens=2|generated_tokens=44|seconds=1.430000066757202|tokens_per_sec=30.76922933281982|last_token=1218 + PERF_RUN|name=basic_runtime|prompt_tokens=4|generated_tokens=48|seconds=0.9900000095367432|tokens_per_sec=48.48484801779036|last_token=941 -PERF_SUMMARY|runs=3|tokens=127|seconds=2.690000057220459|tokens_per_sec=47.21189490651067 + +PERF_SUMMARY|runs=3|tokens=127|seconds=3.190000057220459|tokens_per_sec=39.81191151158124 + PERF_END diff --git a/qemu/evidence/hardware_capture_486_qemu/QUAL.LOG b/qemu/evidence/hardware_capture_486_qemu/QUAL.LOG index 3a8c337..67f0020 100644 --- a/qemu/evidence/hardware_capture_486_qemu/QUAL.LOG +++ b/qemu/evidence/hardware_capture_486_qemu/QUAL.LOG @@ -1,129 +1,257 @@ GPT2-BASIC production quality suites + + QUALITY_SUITE_BEGIN|all + + QUALITY_PROMPT_BEGIN|real_inference|What makes this real inference? + Initializing GPT2-BASIC production runtime... + Initialized tokenizer with 258 tokens + Loaded vocabulary with 4096 tokens and 0 merges, mode 2 + Production model initialization complete. + Build : production fixed-point runtime + Profile : 486sx-safe + Layers : 2 + Embed dim : 48 + Heads : 4 + Vocab size : 4096 + Max tokens : 192 + Parameters : 463168 + Fixed bytes : 1852672 + Runtime mem : 2055940 + Arithmetic : Q20.12 fixed-point -Generated 35 tokens in 0.8300001621246338 seconds (42.16866646195228 tokens/sec) + +Generated 35 tokens in 0.8199999332427979 seconds (42.68293030413781 tokens/sec) + + Generated Text: + -------------- + What makes this real inference? The prompt is encoded into tokens, the transformer updates hidden state, the output head produces logits, and the sampler chooses the next token from the trained checkpoint. What makes this real inference? The DOS program loads model files and computes the continuation with fixed-point transformer layers. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|real_inference + + QUALITY_PROMPT_BEGIN|486_target|GPT2 BASIC on a 486 -Generated 44 tokens in 0.869999885559082 seconds (50.57471929634173 tokens/sec) + +Generated 44 tokens in 0.8199999332427979 seconds (53.65854095377325 tokens/sec) + + Generated Text: + -------------- + GPT2 BASIC on a 486 The useful target is a compact checkpoint that produces short technical continuations at a measurable speed. A larger model can improve text only if it still fits memory and keeps tokens per second usable. The constraint makes the system easier to audit. The runtime needs predictable arrays, fixed-size buffers, and no dependence on a modern service during generation. The vocabulary helps by replacing common technical words and phrases with single tokens. The goal is not a modern assistant. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|486_target + + QUALITY_PROMPT_BEGIN|dos_model|DOS language models need + Generated 59 tokens in 1.210000038146973 seconds (48.76032904127361 tokens/sec) + + Generated Text: + -------------- + DOS language models need enough vocabulary to say technical phrases cleanly without making the output head too expensive. DOS language models need reproducible timing, vector parity, plain file formats, and readable continuations from model logits. A BASIC transformer runtime uses arrays for weights, tokens, cache vectors, hidden states, logits, and fixed-point work buffers. A BASIC transformer runtime loads the checkpoint, encodes the prompt, runs attention, applies feed-forward layers, and decodes sampled tokens. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|dos_model + + QUALITY_PROMPT_BEGIN|basic_runtime|A BASIC transformer runtime -Generated 48 tokens in 0.9900000095367432 seconds (48.48484801779036 tokens/sec) + +Generated 48 tokens in 0.9899997711181641 seconds (48.48485969424616 tokens/sec) + + Generated Text: + -------------- + A BASIC transformer runtime uses the same tokenizer contract as the host tools. The result is not copied from a prompt table. Generation loads the checkpoint, encodes the prompt, runs transformer layers, masks invalid output, and decodes printable text. 486 target connects naturally with old PC limits. The runtime needs predictable arrays, fixed-size buffers, and no dependence on a modern service during generation. A useful checkpoint balances quality with predictable memory and measured tokens per second. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|basic_runtime + + QUALITY_PROMPT_BEGIN|optimization|To improve performance on real hardware -Generated 45 tokens in 0.940000057220459 seconds (47.87233751140732 tokens/sec) + +Generated 45 tokens in 0.9900000095367432 seconds (45.45454501667847 tokens/sec) + + Generated Text: + -------------- + To improve performance on real hardware choose a compact profile and compare quality against speed, memory, and vector parity. To improve performance on real hardware, preserve fixed-point correctness while replacing slow operations with predictable integer work. To improve performance on real hardware, use vocabulary pieces that reduce token count without making every logit step too expensive. To improve performance on real hardware, measure generated tokens per second on the target path before promoting a checkpoint. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|optimization + + QUALITY_PROMPT_BEGIN|heldout_cache|Explain why a cache matters for text generation -Generated 42 tokens in 0.8199999332427979 seconds (51.21951636496537 tokens/sec) + +Generated 42 tokens in 0.8799998760223389 seconds (47.72727945126873 tokens/sec) + + Generated Text: + -------------- + Explain why a cache matters for text generation Cache reuse saves repeated attention work while preserving enough context for coherent text. A cache changes runtime cost, not the trained weights. A cache is useful only when its memory cost fits the target machine. Why reuse key and value vectors? On an old PC, the cache trades fixed memory for fewer operations in each next-token step. The cache must be sized predictably because DOS memory is limited. The cache is an engineering tradeoff, not a quality shortcut. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|heldout_cache + + QUALITY_PROMPT_BEGIN|heldout_timing|How should a DOS model report timing? -Generated 43 tokens in 0.8799998760223389 seconds (48.8636432477275 tokens/sec) + +Generated 43 tokens in 0.8300001621246338 seconds (51.8072187961128 tokens/sec) + + Generated Text: + -------------- + How should a DOS model report timing? A timing result needs generated tokens, elapsed seconds, tokens per second, the model profile, and the measurement basis. The report needs enough context for another run to repeat the measurement. Host stopwatch numbers alone are not hardware evidence. What belongs in a timing result? The timed section belongs inside the decode loop so loading files and boot time do not distort generation speed. Prompt length and output length matter because attention work grows with the active context. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|heldout_timing + + QUALITY_PROMPT_BEGIN|heldout_limits|What limits a tiny transformer on old PCs? -Generated 35 tokens in 0.7100000381469727 seconds (49.29577199931765 tokens/sec) + +Generated 35 tokens in 0.6600000858306885 seconds (53.03029613389874 tokens/sec) + + Generated Text: + -------------- + What limits a tiny transformer on old PCs? The limits are weight bytes, cache memory, context length, integer arithmetic, output vocabulary, and the number of operations per generated token. What limits a tiny transformer on old PCs? Memory controls how large the checkpoint and cache can be, while speed controls how many matrix and attention operations are practical. A small model has to balance both. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|heldout_limits + + QUALITY_PROMPT_BEGIN|heldout_fixed_point|Describe fixed point inference in one sentence -Generated 44 tokens in 0.880000114440918 seconds (49.99999349767596 tokens/sec) + +Generated 44 tokens in 0.869999885559082 seconds (50.57471929634173 tokens/sec) + + Generated Text: + -------------- + Describe fixed point inference in one sentence A no-FPU machine can run the transformer when multiplies, clamps, and lookup tables replace floating point operations. The exponential table keeps softmax practical on hardware without fast floating point. Integer arithmetic still has to match the model closely enough. Why use fixed-point arithmetic? Phase-vector checks compare the DOS fixed-point path with the host reference before the checkpoint is trusted. The scale must be chosen carefully so values keep useful precision without overflowing. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|heldout_fixed_point + + QUALITY_PROMPT_BEGIN|heldout_profiles|Why compare model profiles before choosing one? -Generated 55 tokens in 1.089999914169312 seconds (50.45871956963912 tokens/sec) + +Generated 55 tokens in 1.100000143051147 seconds (49.99999349767596 tokens/sec) + + Generated Text: + -------------- + Why compare model profiles before choosing one? A larger checkpoint is only better when measured quality improves enough to justify extra memory and slower generation. Quality and runtime evidence have to be considered together. A profile comparison should put held-out quality beside tokens per second and peak memory. That makes it clear whether a larger vocabulary or hidden size is helping the real target machine. The default profile should be selected from evidence, not from size alone. + -------------- + Runtime memory: 2055940 bytes + Tracked peak : 2055940 bytes + QUALITY_PROMPT_END|heldout_profiles + QUALITY_SUITE_END|all diff --git a/qemu/evidence/hardware_capture_486_qemu_probe.log b/qemu/evidence/hardware_capture_486_qemu_probe.log index 33f412f..00a55f6 100644 --- a/qemu/evidence/hardware_capture_486_qemu_probe.log +++ b/qemu/evidence/hardware_capture_486_qemu_probe.log @@ -2,11 +2,13 @@ PROBE_OK hardware_capture_log=HWVALID.LOG PROBE_OK hardware_quality_log=QUAL.LOG PROBE_OK hardware_perf_log=PERF.LOG PROBE_OK hardware_assistant_log=ASSIST.LOG +PROBE_OK hardware_assistant_stress_log=ASTRESS.LOG PROBE_OK hardware_assistant_compile_log=ASSISTC.LOG PROBE_OK hardware_notes_template=HWNOTES.TXT PROBE_OK hardware_quality_prompts=10 PROBE_OK hardware_perf_runs=3 -PROBE_OK hardware_assistant_replies=2 +PROBE_OK hardware_assistant_replies=5 +PROBE_OK hardware_assistant_stress_replies=50 PROBE_OK hardware_assistant_compile=1 PROBE_OK hardware_notes=1 PROBE_OK hardware_capture=1 diff --git a/qemu/evidence/hardware_capture_486_qemu_stress_report.md b/qemu/evidence/hardware_capture_486_qemu_stress_report.md new file mode 100644 index 0000000..d9c7109 --- /dev/null +++ b/qemu/evidence/hardware_capture_486_qemu_stress_report.md @@ -0,0 +1,62 @@ +# Assistant Stress Report + +Status: `PASS` + +Reply count: `50` +Source counts: `golden=26 retrieval=16 model=0 fallback=0 memory=8` +Average total reply time: `28 ms` +Average retrieval time: `24 ms` +Recall modes: `kb2_bucket=3 kb2_term=46 none=1` + +| Pack | Source | Recall | Total ms | Query | Answer | +|---|---|---|---:|---|---| +| CHAT | golden | kb2_term | 50 | why did my answer repeat itself | If I repeat, reset the prompt and ask one shorter question. | +| CHAT | retrieval | kb2_term | 60 | tell me why this old computer model matters | Old hardware: The demo matters because a tiny local model can run on old DOS-style hardware without a network. | +| CHAT | golden | kb2_term | 0 | make a tiny plan for fixing a bug | Check the first error, change one thing, then test again. | +| CHAT | retrieval | kb2_term | 50 | what is the difference between a prompt and an answer | Explain mode: Use plain words, one example, and a short answer that fits the prompt. | +| CHAT | golden | kb2_term | 60 | can you explain what local inference means | Local inference means the DOS program reads model weights and produces the answer on this machine. | +| CHAT | golden | kb2_bucket | 50 | i feel stuck debugging this | Check the first error, change one thing, then test again. | +| CHAT | golden | kb2_term | 60 | what should i do if the answer sounds weird | Retry with a shorter prompt or switch packs. | +| CHAT | retrieval | kb2_term | 0 | give me a status update about a delayed release | Release status: Check the tag target, release assets, checksums, and test result before calling the release done. | +| CHAT | golden | kb2_term | 50 | can you browse the internet from dos | I cannot browse the internet from DOS. | +| CHAT | golden | kb2_term | 0 | can we talk about games | Yes, games are a fine topic. | +| CHAT | golden | none | 110 | i am tired | Rest if you can. | +| CHAT | golden | kb2_bucket | 60 | i feel lonely | I can keep you company briefly. | +| CHAT | retrieval | kb2_term | 0 | do you enjoy music | Music topic: I can talk about music. | +| CHAT | golden | kb2_term | 50 | what should i do if i am bored | Try one small project. | +| CHAT | golden | kb2_term | 0 | how do i relax for a minute | Breathe slowly and rest for a minute. | +| CHAT | golden | kb2_term | 60 | what is friendship | Friendship is care and trust. | +| CHAT | golden | kb2_term | 0 | what can we discuss | We can discuss ideas, feelings, games, or DOS. | +| CHAT | golden | kb2_term | 0 | what is your favorite food | I do not eat, but I can talk about food. | +| CHAT | golden | kb2_term | 50 | what is a goal | A goal is something you want to reach. | +| CHAT | golden | kb2_term | 0 | how do i improve | Practice one small thing each day. | +| CHAT | memory | kb2_term | 60 | my name is Operator | I will remember your name is Operator. | +| CHAT | memory | kb2_term | 50 | what is my name | Your name is Operator. | +| CHAT | memory | kb2_term | 0 | we are working on the DOSBox assistant | I will remember we are working on the DOSBox assistant. | +| CHAT | memory | kb2_term | 60 | what are we working on | We are working on the DOSBox assistant. | +| CHAT | memory | kb2_term | 50 | i prefer short answers | I will remember you prefer short answers. | +| CHAT | memory | kb2_term | 0 | how should you answer me | I should answer short answers. | +| CHAT | memory | kb2_term | 60 | what did i just ask | You just asked: how should you answer me. | +| CHAT | memory | kb2_term | 0 | what do you remember | Memory: name=Operator; goal=the DOSBox assistant; style=short answers; last_user=what did i just ask. | +| DOSHELP | retrieval | kb2_term | 0 | how do i keep conventional memory free | Conventional memory: Keep drivers high, trim TSR programs, and preserve low memory for old DOS programs. | +| DOSHELP | retrieval | kb2_term | 0 | my autoexec is too long what should i change | AUTOEXEC.BAT hygiene: CONFIG.SYS loads drivers first, then AUTOEXEC.BAT runs commands; keep PATH short and trim resident tools. | +| DOSHELP | golden | kb2_term | 50 | how should i clean autoexec.bat | Keep AUTOEXEC BAT short, trim PATH, and load resident tools only when needed. | +| DOSHELP | retrieval | kb2_term | 0 | write a batch command that checks for model files | Batch file help: In a batch file, use IF EXIST checks, clear status messages, and 8.3 DOS-compatible names for model files. | +| DOSHELP | retrieval | kb2_term | 60 | why does protected mode need a dpmi host | DPMI host: Protected-mode DOS programs need a DPMI host such as CWSDPMI.EXE beside the program. | +| DOSHELP | retrieval | kb2_term | 0 | what does config.sys do | CONFIG.SYS example: Use HIMEM, DOS HIGH UMB, FILES 30, and BUFFERS 20 as the safe CONFIG SYS baseline. | +| OFFICE | golden | kb2_term | 50 | make this sentence sound professional: the release broke | Use direct, polite, professional wording, name the release problem, and end with the next action. | +| OFFICE | golden | kb2_term | 0 | summarize this: tests passed but the tag was stale | Summary: tests passed, the tag was stale, and the next action is to refresh the tag. | +| OFFICE | golden | kb2_bucket | 60 | summarize: tests passed but dosbox needed a helper file | Summary: tests passed, DOSBox needed a helper file. Include it. | +| OFFICE | golden | kb2_term | 0 | shorten: we need to verify the release before publishing | Short version: verify the release before publishing. | +| OFFICE | golden | kb2_term | 50 | write a polite status update about a delayed build | Use direct, polite, concrete wording, include the current blocker, and end with the next action. | +| OFFICE | golden | kb2_term | 0 | make this clearer: the artifact uploaded but the tag was stale | State that the artifact uploaded, the tag was stale, and the next action is to refresh the tag. | +| DEV | golden | kb2_term | 0 | how can this feel modern on a 486 | Use small hot-loaded weights, compact retrieval databases, persistent memory, and short synthesis replies. | +| DEV | retrieval | kb2_term | 50 | what does retrieval first mean | Retrieval first: Answer from KDB, USER notes, memory, and golden rows before asking the small model to synthesize. | +| DEV | golden | kb2_term | 0 | how do i author a pack | Write HELP and KNOW rows, rebuild KDB, run the validator, then run retrieval and QEMU gates. | +| DEV | golden | kb2_term | 0 | what should i check before release | Verify tests, logs, artifact names, checksums, release notes, and the target tag. | +| PORTABLE | retrieval | kb2_term | 60 | what does portable intelligence mean | portable meaning: Portable intelligence means small local model weights, retrieval, and memory can run on old machines without a network. | +| PORTABLE | retrieval | kb2_term | 0 | why is basic useful for teaching ai | basic teaching: BASIC is useful for teaching machine intelligence because plain arrays, files, and integer arithmetic make the mechanism inspectable. | +| PORTABLE | retrieval | kb2_term | 0 | how could this move to c or assembly | runtime ports: The same assistant contract can be reimplemented in C, assembly, Eshkol, or calculator BASIC when files, arrays, and loops exist. | +| PORTABLE | retrieval | kb2_term | 0 | why do hot swappable weights matter | domain weight loading: Hot swappable weights load domain behavior into a tiny resident shell without rebuilding the whole runtime. | +| PORTABLE | retrieval | kb2_term | 50 | how should tiny machines store recall | tiny machine recall: Tiny machines should store recall as compact indexed rows so slow processors scan fewer bytes before answering. | +| PORTABLE | retrieval | kb2_term | 0 | what proof shows this works on old hardware | old hardware proof: Proof for old hardware needs local logs, repeatable tests, QEMU or hardware captures, and visible source files. | diff --git a/qemu/evidence/preview_release_manifest.md b/qemu/evidence/preview_release_manifest.md index 8c7908e..611bcff 100644 --- a/qemu/evidence/preview_release_manifest.md +++ b/qemu/evidence/preview_release_manifest.md @@ -5,7 +5,7 @@ Generated: `2026-05-12` Package tree: `gpt2-basic-preview` Package zip: `gpt2-basic-preview.zip` Package checksums: `SHA256SUMS.txt`; zip sidecar: `gpt2-basic-preview.zip.sha256` -Package status: `579 files, 119,790,793 bytes` +Package status: `581 files, 119,878,941 bytes` This is an iterative preview payload. It ships only strict-quality release models and assistant packs; rejected repair attempts and old candidates remain repo evidence only. @@ -92,11 +92,13 @@ This is an iterative preview payload. It ships only strict-quality release model - `qemu/evidence/gold_curriculum_v5_clean_repair_report.md` - `qemu/evidence/hardware_capture_486_qemu/ASSIST.LOG` - `qemu/evidence/hardware_capture_486_qemu/ASSISTC.LOG` +- `qemu/evidence/hardware_capture_486_qemu/ASTRESS.LOG` - `qemu/evidence/hardware_capture_486_qemu/HWNOTES.TXT` - `qemu/evidence/hardware_capture_486_qemu/HWVALID.LOG` - `qemu/evidence/hardware_capture_486_qemu/PERF.LOG` - `qemu/evidence/hardware_capture_486_qemu/QUAL.LOG` - `qemu/evidence/hardware_capture_486_qemu_probe.log` +- `qemu/evidence/hardware_capture_486_qemu_stress_report.md` - `qemu/evidence/hardware_capture_probe.log` - `qemu/evidence/hardware_perf_report.md` - `qemu/evidence/hardware_performance_matrix.md` diff --git a/qemu/run_hardware_capture_486.sh b/qemu/run_hardware_capture_486.sh index 01682cb..e2d3338 100755 --- a/qemu/run_hardware_capture_486.sh +++ b/qemu/run_hardware_capture_486.sh @@ -102,6 +102,7 @@ python3 "$ROOT/qemu/fat_image_put.py" "$HDD_IMAGE" \ --get-text GPT2/QUAL.LOG "$CAPTURE_DIR/QUAL.LOG" \ --get-text GPT2/PERF.LOG "$CAPTURE_DIR/PERF.LOG" \ --get-text GPT2/ASSIST.LOG "$CAPTURE_DIR/ASSIST.LOG" \ + --get-text GPT2/ASTRESS.LOG "$CAPTURE_DIR/ASTRESS.LOG" \ --get-text GPT2/ASSISTC.LOG "$CAPTURE_DIR/ASSISTC.LOG" \ --get-text GPT2/HWNOTES.TXT "$CAPTURE_DIR/HWNOTES.TXT" diff --git a/scripts/build_hardware_transfer.py b/scripts/build_hardware_transfer.py index c5123c1..8f3ab22 100644 --- a/scripts/build_hardware_transfer.py +++ b/scripts/build_hardware_transfer.py @@ -203,6 +203,7 @@ def return_instructions() -> str: " QUAL.LOG\n" " PERF.LOG\n" " ASSIST.LOG\n" + " ASTRESS.LOG\n" " ASSISTC.LOG\n" " HWNOTES.TXT\n" "\n" diff --git a/scripts/build_preview_release.py b/scripts/build_preview_release.py index d5ecbb0..5bb8c13 100644 --- a/scripts/build_preview_release.py +++ b/scripts/build_preview_release.py @@ -107,6 +107,7 @@ class ReleaseModel: "exported_model_quality_inventory.md", "gold_curriculum_v5_clean_repair_report.md", "hardware_capture_486_qemu_probe.log", + "hardware_capture_486_qemu_stress_report.md", "hardware_capture_probe.log", "hardware_performance_matrix.md", "hardware_perf_report.md", diff --git a/scripts/stage_hardware_capture_evidence.py b/scripts/stage_hardware_capture_evidence.py index 5fe0e92..50e3efc 100644 --- a/scripts/stage_hardware_capture_evidence.py +++ b/scripts/stage_hardware_capture_evidence.py @@ -25,6 +25,7 @@ ("quality", "QUAL.LOG", "quality.log"), ("perf", "PERF.LOG", "perf.log"), ("assistant", "ASSIST.LOG", "assistant.log"), + ("assistant_stress", "ASTRESS.LOG", "assistant_stress.log"), ("assistant_compile", "ASSISTC.LOG", "assistant_compile.log"), ) @@ -271,9 +272,27 @@ def write_sample_capture(root: Path) -> None: ) (root / "ASSIST.LOG").write_text( "ASSIST_BEGIN|suite=pack-shell|version=1\n" - "ASSIST_PACK|id=DOSHELP\nASSIST_MODEL|pack=DOSHELP\nASSIST_REPLY|pack=DOSHELP\n" - "ASSIST_PACK|id=OFFICE\nASSIST_MODEL|pack=OFFICE\nASSIST_REPLY|pack=OFFICE\n" - "ASSIST_END|packs=2\n", + + "".join( + f"ASSIST_PACK|id={pack_id}\nASSIST_MODEL|pack={pack_id}\nASSIST_REPLY|pack={pack_id}\n" + for pack_id in verify_hardware_capture.EXPECTED_ASSISTANT_PACKS + ) + + f"ASSIST_END|packs={verify_hardware_capture.EXPECTED_ASSISTANT_PACK_COUNT}\n", + encoding="ascii", + ) + stress_lines = [ + "ASSIST_BEGIN|suite=stress-probe|version=1", + *[f"ASSIST_PACK|id={pack_id}" for pack_id in verify_hardware_capture.EXPECTED_ASSISTANT_PACKS], + ] + for case in verify_hardware_capture.stress_assistant_behavior.EXPECTED_CASES: + stress_lines.append( + f"ASSIST_REPLY|pack={case.pack}|intent=general_chat|ui=text|query={case.query}|" + f"source=retrieval|recall=kb2_term|answer={case.terms[0]} check passed." + ) + stress_lines.append( + f"ASSIST_END|suite=stress-probe|packs={verify_hardware_capture.EXPECTED_ASSISTANT_PACK_COUNT}" + ) + (root / "ASTRESS.LOG").write_text( + "\n".join(stress_lines) + "\n", encoding="ascii", ) (root / "ASSISTC.LOG").write_text("ASSIST_COMPILE_OK\n", encoding="ascii") @@ -322,7 +341,7 @@ def self_test() -> None: (evidence / "hardware_486dx2_66_dos622_manifest.md").exists(), "self_test_missing_manifest", ) - require(len(written) == 7, "self_test_staged_count") + require(len(written) == 8, "self_test_staged_count") print("PROBE_OK hardware_stage_self_test=1") diff --git a/scripts/verify_hardware_capture.py b/scripts/verify_hardware_capture.py index 94ee19b..6881b0f 100644 --- a/scripts/verify_hardware_capture.py +++ b/scripts/verify_hardware_capture.py @@ -8,15 +8,24 @@ import tempfile from pathlib import Path +try: + from scripts import stress_assistant_behavior +except ImportError: # pragma: no cover - used when run as scripts/foo.py + import stress_assistant_behavior # type: ignore + DEFAULT_FILES = { "capture": "HWVALID.LOG", "quality": "QUAL.LOG", "perf": "PERF.LOG", "assistant": "ASSIST.LOG", + "assistant_stress": "ASTRESS.LOG", "assistant_compile": "ASSISTC.LOG", "notes": "HWNOTES.TXT", } +EXPECTED_ASSISTANT_PACKS = ("CHAT", "DOSHELP", "OFFICE", "DEV", "PORTABLE") +EXPECTED_ASSISTANT_PACK_COUNT = len(EXPECTED_ASSISTANT_PACKS) +EXPECTED_STRESS_REPLIES = len(stress_assistant_behavior.EXPECTED_CASES) NOTE_FIELDS = ( "Machine key:", "CPU:", @@ -83,14 +92,35 @@ def verify_assistant_log(path: Path, required: bool) -> int: if not text: return 0 require("ASSIST_BEGIN|suite=pack-shell|version=1" in text, "assistant_begin_missing") - require("ASSIST_END|packs=" in text, "assistant_end_missing") - for pack_id in ("DOSHELP", "OFFICE"): + require(f"ASSIST_END|packs={EXPECTED_ASSISTANT_PACK_COUNT}" in text, "assistant_end_missing") + for pack_id in EXPECTED_ASSISTANT_PACKS: require(f"ASSIST_PACK|id={pack_id}" in text, f"assistant_pack_missing={pack_id}") require(f"ASSIST_MODEL|pack={pack_id}" in text, f"assistant_model_missing={pack_id}") require(f"ASSIST_REPLY|pack={pack_id}" in text, f"assistant_reply_missing={pack_id}") return count_matches(r"^ASSIST_REPLY\|", text) +def verify_assistant_stress_log(path: Path, required: bool) -> int: + text = read(path, required=required) + if not text: + return 0 + require("ASSIST_BEGIN|suite=stress-probe|version=1" in text, "assistant_stress_begin_missing") + require( + f"ASSIST_END|suite=stress-probe|packs={EXPECTED_ASSISTANT_PACK_COUNT}" in text, + "assistant_stress_end_missing", + ) + require("status=model_unavailable" not in text, "assistant_stress_model_unavailable") + require("|query=" in text and "|answer=" in text, "assistant_stress_structured_answer_missing") + for pack_id in EXPECTED_ASSISTANT_PACKS: + require(f"ASSIST_PACK|id={pack_id}" in text, f"assistant_stress_pack_missing={pack_id}") + require(f"ASSIST_REPLY|pack={pack_id}" in text, f"assistant_stress_reply_missing={pack_id}") + reply_count = count_matches(r"^ASSIST_REPLY\|", text) + require(reply_count == EXPECTED_STRESS_REPLIES, f"assistant_stress_reply_count={reply_count}") + records = stress_assistant_behavior.parse_records(text) + stress_assistant_behavior.validate_records(records) + return reply_count + + def verify_assistant_compile_log(path: Path, required: bool) -> bool: text = read(path, required=required) if not text: @@ -146,9 +176,25 @@ def self_test() -> None: ) (root / "ASSIST.LOG").write_text( "ASSIST_BEGIN|suite=pack-shell|version=1\n" - "ASSIST_PACK|id=DOSHELP\nASSIST_MODEL|pack=DOSHELP\nASSIST_REPLY|pack=DOSHELP\n" - "ASSIST_PACK|id=OFFICE\nASSIST_MODEL|pack=OFFICE\nASSIST_REPLY|pack=OFFICE\n" - "ASSIST_END|packs=2\n", + + "".join( + f"ASSIST_PACK|id={pack_id}\nASSIST_MODEL|pack={pack_id}\nASSIST_REPLY|pack={pack_id}\n" + for pack_id in EXPECTED_ASSISTANT_PACKS + ) + + f"ASSIST_END|packs={EXPECTED_ASSISTANT_PACK_COUNT}\n", + encoding="ascii", + ) + stress_lines = [ + "ASSIST_BEGIN|suite=stress-probe|version=1", + *[f"ASSIST_PACK|id={pack_id}" for pack_id in EXPECTED_ASSISTANT_PACKS], + ] + for case in stress_assistant_behavior.EXPECTED_CASES: + stress_lines.append( + f"ASSIST_REPLY|pack={case.pack}|intent=general_chat|ui=text|query={case.query}|" + f"source=retrieval|recall=kb2_term|answer={case.terms[0]} check passed." + ) + stress_lines.append(f"ASSIST_END|suite=stress-probe|packs={EXPECTED_ASSISTANT_PACK_COUNT}") + (root / "ASTRESS.LOG").write_text( + "\n".join(stress_lines) + "\n", encoding="ascii", ) (root / "ASSISTC.LOG").write_text("ASSIST_COMPILE_OK\n", encoding="ascii") @@ -180,6 +226,10 @@ def verify_capture( quality_count = verify_quality_log(capture_dir / DEFAULT_FILES["quality"]) perf_count = verify_perf_log(capture_dir / DEFAULT_FILES["perf"]) assistant_count = verify_assistant_log(capture_dir / DEFAULT_FILES["assistant"], require_assistant) + assistant_stress_count = verify_assistant_stress_log( + capture_dir / DEFAULT_FILES["assistant_stress"], + require_assistant, + ) assistant_compiled = verify_assistant_compile_log(capture_dir / DEFAULT_FILES["assistant_compile"], require_assistant) notes_present = verify_notes( capture_dir / DEFAULT_FILES["notes"], @@ -192,6 +242,8 @@ def verify_capture( print(f"PROBE_OK hardware_perf_log={DEFAULT_FILES['perf']}") if require_assistant or assistant_count: print(f"PROBE_OK hardware_assistant_log={DEFAULT_FILES['assistant']}") + if require_assistant or assistant_stress_count: + print(f"PROBE_OK hardware_assistant_stress_log={DEFAULT_FILES['assistant_stress']}") if require_assistant or assistant_compiled: print(f"PROBE_OK hardware_assistant_compile_log={DEFAULT_FILES['assistant_compile']}") if require_notes or notes_present: @@ -200,6 +252,8 @@ def verify_capture( print(f"PROBE_OK hardware_perf_runs={perf_count}") if require_assistant or assistant_count: print(f"PROBE_OK hardware_assistant_replies={assistant_count}") + if require_assistant or assistant_stress_count: + print(f"PROBE_OK hardware_assistant_stress_replies={assistant_stress_count}") if require_assistant or assistant_compiled: print("PROBE_OK hardware_assistant_compile=1") if require_notes or notes_present: diff --git a/scripts/verify_preview_artifacts.py b/scripts/verify_preview_artifacts.py index b910654..0138ecd 100644 --- a/scripts/verify_preview_artifacts.py +++ b/scripts/verify_preview_artifacts.py @@ -105,6 +105,7 @@ "`KB2TERM.TXT` term indexes", "per-pack `USAGE.TXT`", "qemu/evidence/run_main_486.log", + "qemu/evidence/hardware_capture_486_qemu_stress_report.md", "qemu/evidence/workspace_tracking_probe.log", ) REQUIRED_HARDWARE_FILES = ( diff --git a/tests/test_stage_hardware_capture_evidence.py b/tests/test_stage_hardware_capture_evidence.py index 5c419c1..df6bdd1 100644 --- a/tests/test_stage_hardware_capture_evidence.py +++ b/tests/test_stage_hardware_capture_evidence.py @@ -38,6 +38,7 @@ def test_stage_capture_writes_stable_evidence_files(self) -> None: "hardware_486dx2_66_dos622_quality.log", "hardware_486dx2_66_dos622_perf.log", "hardware_486dx2_66_dos622_assistant.log", + "hardware_486dx2_66_dos622_assistant_stress.log", "hardware_486dx2_66_dos622_assistant_compile.log", "hardware_486dx2_66_dos622_notes.md", "hardware_486dx2_66_dos622_manifest.md", diff --git a/tests/test_verify_hardware_capture.py b/tests/test_verify_hardware_capture.py index 96caa3d..6bbe74a 100644 --- a/tests/test_verify_hardware_capture.py +++ b/tests/test_verify_hardware_capture.py @@ -16,7 +16,15 @@ class VerifyHardwareCaptureTests(unittest.TestCase): def test_verify_hardware_capture_self_test_artifacts(self) -> None: - artifact_names = ["HWVALID.LOG", "QUAL.LOG", "PERF.LOG", "ASSIST.LOG", "ASSISTC.LOG", "HWNOTES.TXT"] + artifact_names = [ + "HWVALID.LOG", + "QUAL.LOG", + "PERF.LOG", + "ASSIST.LOG", + "ASTRESS.LOG", + "ASSISTC.LOG", + "HWNOTES.TXT", + ] output = io.StringIO() with contextlib.redirect_stdout(output): @@ -84,6 +92,7 @@ def test_hardware_transfer_return_instructions_are_dos_friendly(self) -> None: self.assertIn("QUAL.LOG", text) self.assertIn("PERF.LOG", text) self.assertIn("ASSIST.LOG", text) + self.assertIn("ASTRESS.LOG", text) self.assertIn("ASSISTC.LOG", text) self.assertIn("HWNOTES.TXT", text) self.assertIn("--require-filled-notes", text)