docs(frank-tts): the voice stack is deployed, and the harness speaks through it
Six statements still claimed the endpoint did not exist: both vault descriptions, the two index.md bullets, the Open Notebook blocker, and the engine page deploy order that opened with "Nothing below has been run". All re-keyed to the deployed state, with the ledger the deploys printed: engine healthy 31 s after the build at 4.0 GiB resident, three voices warm, the ladder measured at 1883 ms then 1226-1283 ms (not the retired 6.2-8.0 s), and two voices rendering the same sentence into different bytes. Adds a The harness speech role section to the endpoint page with the three wiring laws measured the day of the flip: speech.voice is the forwarded key (tts.localVoice belongs to Kokoro), an explicit speech role has no fallback candidate, and models.yml loads at process start while config.yml is read live - so a session older than the frank-tts row fails exactly like a dead endpoint. Fresh-process proof: omp -p --tools tts saved 180524 bytes with voice=narrator1 while the facade logged the matching speech line.
This commit is contained in:
@@ -2690,3 +2690,35 @@ every restart since the cutover.
|
||||
measured claim: about **0.6 s**, and the 400-for-every-name reason the pages
|
||||
should have led with. The trial entry above is left as written — a dated worklog
|
||||
entry is a record — and this line is the correction that points at it.
|
||||
|
||||
## 2026-10-18 — 7772 is live and the harness speaks through it
|
||||
|
||||
- Merged **#15** (`0315a62`, the warmer's argument-cap fix) and **#16**
|
||||
(`d2ce669`, the comment sweep), then deployed both voice services in order:
|
||||
`--service frank-tts-engine` (image rebuilt from the fixed warmer, unit
|
||||
`active`, zero drop-ins, warm pass in the unit's own start — `narrator1
|
||||
cold=1542ms warm=1709ms`, `narrator2 1329/1405`, `narrator3 1451/1394`, `3
|
||||
voice(s) registered and warm`) and `--service frank-tts`. The Playwright gate
|
||||
ran at the end of each deploy: 33/33 twice.
|
||||
- Deployed-state proof from a LAN client: `/health` → `omni-http` with all three
|
||||
voices; the same sentence in `narrator1` and `narrator2` came back with
|
||||
**different sha256** and different RMS (4.24 s, 24 kHz mono PCM16), so the name
|
||||
actually selects a voice. Engine-side ledger for the harness request:
|
||||
`TTFA 67.5 ms`, `Total 2158.8 ms`, `audio 3.76 s, RTF 0.574`.
|
||||
- **The harness `speech` role moved off Kokoro**: `config.yml`
|
||||
`modelRoles.speech: frank-tts (dankclaw)/frank-tts` and `speech.voice:
|
||||
narrator1`. `tts.localVoice` stays `bm_george` — that key belongs to the local
|
||||
backend, which is what answered in the control test.
|
||||
- Two harness laws learned by breaking it first (both now on [[Frank TTS]]): an
|
||||
explicit speech role has **no fallback candidate**, so a dead endpoint errors
|
||||
instead of degrading; and `models.yml` loads at process start while
|
||||
`config.yml` is read live, so a session older than the `frank-tts` row fails
|
||||
exactly like a dead endpoint. Fresh-process proof in the same minute:
|
||||
`Saved 180524 bytes (model=frank-tts (dankclaw)/frank-tts, voice=narrator1)`
|
||||
with the matching façade log line `speech voice=narrator1 format=wav chars=51
|
||||
-> 180524 bytes`. This window's own session is that stale case and knows it.
|
||||
- Status sweep, because six pages still said the endpoint did not exist: both
|
||||
vault descriptions, the two `index.md` bullets, the Open Notebook blocker (the
|
||||
voice leg works; open-notebook itself is what is missing), the engine page's
|
||||
"Deploy order — nothing below has been run" is now a **Deploy record**, and the
|
||||
homepage card lost `wip: down` so the admin panel probes 7772 for real.
|
||||
|
||||
Reference in New Issue
Block a user