Updates
Rolling release / release (push) Failing after 1m49s

This commit is contained in:
2026-09-12 19:36:06 -04:00
parent 9ad09b593c
commit d47e9e260f
30 changed files with 917 additions and 162 deletions
+5 -1
View File
@@ -63,6 +63,10 @@ cache directory, never under a system-wide writable location.
## GPU policy
`JARVIS_GPU_REQUIRED=1` is set by the service. The master requests GPU device
and maximum GPU layer offload, then rejects a result QVAC reports as CPU. Run
and maximum GPU layer offload. An explicit GPU request (or
`JARVIS_GPU_REQUIRED=1`) fails directly on a GPU load error rather than loading
a CPU copy that the master would reject. Optional `device: 'auto'` callers outside
that policy can still fall back, and runtime status labels that backend as CPU.
Run
`npm run gpu-doctor` and consult [hardware compatibility](hardware-compatibility.md)
before changing a model profile.
+26 -2
View File
@@ -10,9 +10,10 @@ flowchart LR
R --> W[Wake engine]
W -->|phrase| V[VAD + QVAC ASR]
V -->|final utterance| H[Harness bridge]
H -->|streamed reply| T[Sentence buffer]
H -->|final reply| T[Sentence queue]
T --> Q[QVAC TTS]
Q --> OUT[PipeWire playback]
OUT -. prepare next sentence concurrently .-> Q
OUT -. anti-feedback gate .-> V
```
@@ -44,7 +45,30 @@ very short fragments are discarded.
Run `npm run voice-doctor`, then follow [voice acceptance](voice-acceptance.md).
The daemon metrics cover wake accepts/rejects, feedback drops, utterances, and
replies. Raw audio is not persisted by default.
replies. Speech metrics also report `synthesisCount`, `synthesisMs`, `audioMs`,
and `synthesisRealtimeFactor` (total synthesis time / generated audio duration;
less than 1 means synthesis is faster than playback). Raw audio is not persisted
by default.
## Inference and playback concurrency
Whisper explicitly requests `contextParams.use_gpu: true`; it otherwise defaults
to CPU independently of the LLM's GPU policy. TTS honors the saved `ttsUseGpu`
setting. These engines use their own configuration fields, not llama.cpp's
`gpu_layers`. Concurrent requests to load the same auxiliary model share the
in-flight load, avoiding duplicate allocations. The shared model stays loaded
until its last auxiliary user releases it.
Speech synthesis prepares one sentence ahead while PipeWire plays the current
sentence. TTS requests and playback remain ordered, with at most one prefetched
sentence. The feedback gate stays active across sentence boundaries. Interrupts
discard prefetched audio; shutdown drains any in-flight synthesis before unloading
models. Synthesis and playback failures release the gate and allow the next reply.
Independent harness tool calls already run concurrently. Conversation inference
stays serialized to preserve history ordering and the single active chat model.
Increasing llama.cpp `parallel` also divides its configured context across slots;
it is not a free speed increase for a single conversational stream.
## Release voice readiness