@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user