fix(dankvoice): pin thinking off in rewrite, fix silent and timeout modes
Refs #32 The humanizer's raw fetch to frank-zealot omitted chat_template_kwargs.enable_thinking: false, so the Qwen35 hybrid thought instead of answering (6.9 s reasoning_content, empty content - timing out the 6 s abort; or answering "" and muting the unit). Pin the kwarg, treat empty-content-with-reasoning as failure over silence, and stop the menu's test phrase from blocking its handler. Three red-captured regressions; 26/26 green, verified red against HEAD.
This commit is contained in:
@@ -142,6 +142,15 @@ supplies the `baseUrl`; the request is `POST {base}/chat/completions`. On
|
||||
this fleet that is **frank-zealot** (`llamacpp (dankclaw-3090)`,
|
||||
`:7771`) — the 6 s abort keeps a slow tiny model off the critical path.
|
||||
|
||||
The request body pins `chat_template_kwargs: { enable_thinking: false }`,
|
||||
and that field is load-bearing: the harness injects it for managed roles,
|
||||
but a raw `fetch` gets the model's default — thinking on — so the Qwen35
|
||||
hybrid spends the budget on `reasoning_content` and answers `content: ""`
|
||||
(measured: 6.9 s / 6893 reasoning chars / empty content without the flag;
|
||||
0.55 s / 369 clean chars with it). For a hybrid endpoint, empty content
|
||||
beside non-empty `reasoning_content` means the flag was ignored — a failed
|
||||
rewrite (mechanical fallback), never the legitimate "nothing to say".
|
||||
|
||||
Thinking blocks ride the same path: at `agent_end` the last assistant
|
||||
message's true `thinking` parts are narrated (rewritten first, as their own
|
||||
unit, before the answer), while blocks flagged `narration: true` — which
|
||||
@@ -196,6 +205,14 @@ the choice persists in the settings file.
|
||||
prose segments (mechanical cleanup of that text yields at most 2), and a
|
||||
thinking+answer `agent_end` played thinking first. 22 green in
|
||||
`tests/dankvoice.bats`.
|
||||
* **Thinking-off fix (2026-10-19, Refs #32)** — replaying the exact rewrite
|
||||
body against live frank-zealot: without `chat_template_kwargs.
|
||||
enable_thinking: false` the reply arrives as 6893 `reasoning_content`
|
||||
characters with `content: ""` in 6.9 s (twice the 6 s abort); with it,
|
||||
369 clean characters in 0.55 s. Driver fixtures now pin the flag
|
||||
(`thinkoff=false` on the recorded chat call), turn reasoning-only replies
|
||||
into mechanical speech instead of silence, and time the menu's test
|
||||
phrase (~0 ms handler). 26 green in `tests/dankvoice.bats`.
|
||||
|
||||
## Limits
|
||||
|
||||
@@ -232,6 +249,7 @@ the choice persists in the settings file.
|
||||
* Gitea issue #21 on `dank/command-center` (the work item this page ships with).
|
||||
* Gitea issue #23 on `dank/command-center` (the options-menu work item).
|
||||
* Gitea issue #27 on `dank/command-center` (the enhanced-narration work item).
|
||||
* Gitea issue #32 on `dank/command-center` (the latency/silence fix work item).
|
||||
|
||||
## See Also
|
||||
|
||||
|
||||
@@ -16,6 +16,19 @@ lesson, a few lines. Full incident narratives are recoverable from git
|
||||
(`git log --follow omp-docs/log.md`); knowledge that outlives an entry lives
|
||||
on its concept page, linked here. Never re-expand an entry in place.
|
||||
|
||||
## 2026-10-19 — dankvoice: silence and timeouts, root-caused (Refs #32)
|
||||
|
||||
The humanizer's raw `fetch` to frank-zealot omitted `chat_template_kwargs.
|
||||
enable_thinking: false`, so the Qwen35 hybrid *thought* instead of answering:
|
||||
6.9 s of `reasoning_content`, `content: ""` — timing out the rewrite twice
|
||||
(12 s dead air) and, when it did answer inside the window, speaking silence.
|
||||
Root-caused by replaying the exact wire body against the live endpoint.
|
||||
Fix: pin the kwarg in the request body; treat empty-content-with-reasoning as
|
||||
failure (mechanical voice), not "nothing worth saying"; the menu's test phrase
|
||||
fires without blocking its handler. Lesson: the harness injects thinking-off
|
||||
for managed roles, but raw HTTP callers must set it themselves — 26/26 green
|
||||
with three red-captured regressions.
|
||||
|
||||
## 2026-10-19 — dankvoice: humanized narration and thinking aloud (Refs #27)
|
||||
|
||||
Spoken units are rewritten by the `@tiny` role (frank-zealot) under the
|
||||
|
||||
Reference in New Issue
Block a user