DM Whisper 0.1.6
First release with a fine-tuned local specialist as a usable backend, plus the instrumentation to keep improving it from real play.
Local specialist (opt-in)
A QLoRA'd Qwen2.5-7B trained on grader-verified gold trajectories for this table's conventions. Measured on the golden suite at n=60: 72–78% vs Haiku's 57%, at ~1.1 s/turn vs ~3.0 s, running entirely offline from a 4.7 GB q4_k_m file. Untrained baseline was 22–25%.
Enable in %APPDATA%\DM Whisper\.env:
DMW_ENABLE_LOCAL_LLM=1
DMW_PROVIDER=ollama
DMW_OLLAMA_MODEL=dmw-7b-v2-q4
The local path serves exactly the 19-tool slimmed scope the model was trained on — train/serve parity matters, since it fit the training format hard.
Session instrumentation
Every turn now writes a replayable record to events.jsonl: full untruncated tool args, honest ok/error, a pre-turn board snapshot, and repairOf chains linking rephrasings. A repair chain's final turn is DM-accepted ground truth; the earlier ones are labelled negatives. Sessions become training data.
Campaign picker + maker
Setup tab gains a campaign dropdown and a register-new form that call MCP directly — no LLM in the path. Necessary because the specialist's scope excludes switch_campaign, and correct regardless: a dropdown can't mishear a campaign name.
Fixes
- Death markers render everywhere —
deadnow uses Roll20's built-in red X instead of aliasing a custom marker that shows nothing in campaigns without the custom set installed. - #158 — the instrumentation logged successes as failures (
mark_dying's own success text contains "3 failed saves"), which corruptedrepairOfon exactly the dying/AoE turns that matter most. Now threads the real MCPisErrorflag. - Native ollama
/api/chatprovider sonum_ctxandformatactually apply (the/v1shim silently ignoresoptions— that bug invalidated an earlier "local models are unusable" verdict).
npm run release:mod after installing — ai-relay.js changed (death marker + threshold automation).