The HUD latency panel: last turn 1.56 s, first audio 1.52 s, slowest stage verification 0.01 s, bottleneck tools, route reflex.

Voice

A local-first, full-duplex voice loop: echo-cancelled capture, local speech recognition on the GPU, owner and addressee checks, interruption that keeps only what was heard, and a locally run speaking voice whose technical qualification is still pending. We don't publish voice samples.

INTEGRATED , rung 4 of 8 The voice loop assembled with the C013 speaking voice on 18 September 2026. Registry voice rows are TESTED. Full-duplex voice needs an owner-present sitting, and C013's technical qualification is pending.

PARTIAL Parts of this system sit at different rungs. The breakdown below shows each one.

As of
Parts tracked
7
Catalogued capabilities
5
The HUD latency panel: last turn 1.56 s, first audio 1.52 s, slowest stage verification 0.01 s, bottleneck tools, route reflex.
Real capture, captured 22 September 2026. One typed reflex turn, measured by the conversation’s own marks: 1.56 s end to end.

Captured at revision 893913a9c

Status breakdown

Where each part stands

1 integrated 5 tested 1 implemented

  1. C013 speaking voice Configured on the integration branch; assembly check passed 2026-09-18. Long-form non-regression FAILED; first audio not measured.
    INTEGRATED , rung 4 of 8 DOCUMENTED Where: Production branch
  2. Local speech recognition (faster-whisper on the GPU) Registry voice rows TESTED. The 165 ms vs 2,479 ms comparison is a measurement recorded in a code docstring (2026-07-28).
    TESTED , rung 3 of 8 TESTED Where: Production branch
  3. Barge-in and heard/unheard tracking 120 ms budget; 14.8 to 27.6 ms measured in tests.
    TESTED , rung 3 of 8 TESTED Where: Production branch
  4. Full-duplex spoken loop Owner action required. Journey J8 (speech interrupted while a mission continues) is fixture-tested only.
    TESTED , rung 3 of 8 FIXTURE Where: Production branch
  5. Streaming speech on the earlier hosted voice Failed its latency budget: p95 367.5 ms against a 220 ms target (2026-08-02). Now a rollback path only.
    TESTED PARTIAL , rung 3 of 8 MEASURED Where: Production branch
  6. Voice coexisting with the local LM, ASR, HUD and body One clean run on 2026-09-22 with a whole-GPU peak of 11.03 GB. Shows memory fit, not latency or audio quality.
    TESTED , rung 3 of 8 OBSERVED Where: Local model runtime
  7. Announced fallback voices Local Piper fallback and a hosted rollback voice. Fallback behaviour is not yet measured in qualification.
    IMPLEMENTED , rung 2 of 8 DOCUMENTED Where: Production branch

Pipeline

How it flows

The voice loop

  1. Microphone WASAPI, 30 s pre-roll ring
  2. Echo cancellation and self-speech gate
  3. Silero VAD no silent fallback
  4. Wake word optional, off by default
  5. faster-whisper local, on the GPU
  6. Semantic end of turn
  7. Speaker verification only OWNER admitted (can stop the request)
  8. Addressee check was that said to me? (can stop the request)
  9. Lane classifier and cognition
  10. Clause chunker pronunciation and prosody
  11. C013 voice or an announced fallback
  12. Playback feeds the echo-cancel reference
Amber gates resolve toward silence when uncertain.

Barge-in

  1. Owner speaks over JARVIS
  2. Turn manager stop budget 120 ms (can stop the request)
  3. Heard/unheard ledger unheard clauses cancelled
  4. Continue from the correction
Amber stations can stop the request.

Diagrams are simplified from the code paths named in the sources below. They are illustrative, not screenshots.

Voice is where a personal system feels either natural or intrusive. JARVIS’s voice loop is designed to be local-first, to hear the owner without hearing itself, to stay silent when unsure whether it was addressed, and to stop the moment the owner speaks over it. It is also designed to be honest about which voice is speaking.

The pipeline

The loop runs in this order:

  1. Capture. Microphone audio (WASAPI) goes into a 30-second pre-roll ring buffer, so the first syllable survives while the system decides whether speech started.
  2. Echo cancellation and self-speech gate. An adaptive echo canceller removes JARVIS’s own playback, so JARVIS never hears itself as the owner.
  3. Speech segmentation. Silero voice-activity detection does this. A simpler energy detector exists as a fallback, but it must be chosen deliberately. The code’s own words are “Refusing to fall back to EnergyVAD silently.”
  4. Wake word. An openWakeWord gate is available, but it is off by default, so the session is open-mic.
  5. Transcription. faster-whisper large-v3 runs locally on the GPU. Cloud transcription is used only when explicitly requested.
  6. End of turn. A semantic model decides whether the owner has finished or is pausing mid-thought.
  7. Speaker verification. Input is classified OWNER, NOT_OWNER, UNCERTAIN or UNAVAILABLE, and only OWNER is admitted. The owner’s voice embedding is kept, and the audio samples are dropped.
  8. Addressee detection. “Was that said to me?” Uncertainty resolves toward silence.
  9. Cognition. The request is handled as on the how it works page.
  10. Clause chunking. The reply is split into clauses, with a pronunciation dictionary and prosody intent.
  11. Speech and playback. Playback feeds the echo canceller’s reference signal.

A runtime map generated from the source code traces this path across 14 stages and 24 code anchors, with every anchor resolving to real code.

Why local recognition

A measurement recorded in the speech module’s own documentation (July 2026) gives 165 ms for local transcription against 2,479 ms for the hosted transcription API. The local latency stayed flat as utterances got longer. This is a code-docstring measurement from one point in time, not a current benchmark. Local recognition also keeps the owner’s raw speech on the machine.

GPU memory is the constraint. A screen on 21 September 2026 found that running the recogniser at int8_float16 precision saves about 1.9 GiB of VRAM, with no accuracy regression on a 14-case public-synthetic test set. That room matters on a 12 GB card shared with the voice, the HUD and language-model work.

End-of-turn detection has its own recorded figure: the text model reaches 94.6% balanced accuracy on the owner’s own end-of-utterance set. In that set, its remaining errors were all cases of waiting too long. None cut the owner off mid-thought. That residual is why an MIT-licensed voice-activity-projection model was approved. The licence register records that weights from a different turn-taking repository were refused: the repository ships an MIT licence file, but its README restricts the trained weights to academic use. “A LICENSE file is not the licence.”

Interruption

The turn manager handles barge-in against a 120 ms budget. In tests it measured 14.8 to 27.6 ms. When the owner interrupts, unheard clauses are cancelled and only what the owner actually heard stays in context. After a correction, the conversation continues from the correction rather than from the abandoned answer. A plan that was mid-flight is abandoned at the next step boundary, so no effect is left half-applied.

The speaking voice: C013

C013 is the identifier of the owner-selected speaking voice. JARVIS speaks through a locally run, open-source text-to-speech model, with no fine-tuning, conditioned on a short reference clip. The owner chose the voice through scored and listened comparisons. The project’s rule is that owner preference alone never grants qualification, and its technical qualification is still pending. Two technical checks stand out: a long-form non-regression check failed, and time to first audio has not been measured.

The voice runs on the owner’s GPU from an immutable, hash-checked package. At load, the package is checked against its manifest digest and fails closed on any mismatch. It “never falls back to a different checkpoint”. No pitch, formant, rate, equaliser or effect processing is applied. Nothing in the loop writes audio to disk.

If C013 cannot speak, a local Piper voice takes over, and the switch is announced. The project describes this as being honest about who spoke. An earlier hosted voice remains as a rollback path. That hosted voice’s streaming mode failed its latency budget in August (p95 367.5 ms against a 220 ms target).

We don’t publish voice samples.

Latency, honestly

The project sets first-audio budgets per lane: reflex p95 ≤ 300 ms, and cognition p50 ≤ 600 ms and p95 ≤ 900 ms. One recorded reflex first-audio reading is 398.5 ms, over its budget, and a fresh owner-present reading is owed. The only recorded audible first-audio reading, 403.5 ms p50 in a 17 September handoff, used the older Piper voice, not C013.

A probe now exists to measure C013 specifically. It rejects any fallback voice and binds to the exact package. The project labels it an “IMPLEMENTED and TESTED instrument, NOT audible qualification”. The audible measurement needs the owner present.

On 22 September 2026 the voice worker was loaded alongside a local language-model recipe, speech recognition, the HUD and body services in one clean run. The whole-GPU peak was 11.03 GB. That shows the stack fits in memory. It says nothing about latency or audio quality.

What is not proven yet

  • C013 is not technically qualified. Long-form non-regression failed, and first audio, streaming, acronym pronunciation, audible cancellation, restart recovery and fallback have not been measured for it.
  • Full-duplex voice has not been proven live. It needs an owner-present sitting, and the interrupted-speech journey is fixture-tested only.
  • Reflex first audio is over budget on its recorded reading, and no C013 audible reading exists.
  • Recorded figures are dated and limited. The ASR comparison is a July 2026 code-docstring measurement. The barge-in times come from tests. The coexistence run is a single observation.
  • No voice samples are published.

Invariants

Rules the code enforces

  • Refusing to fall back to EnergyVAD silently.

    voice loop (scripts/converse.py)

  • never falls back to a different checkpoint

    C013 voice loader (jarvis/speech/)

  • IMPLEMENTED and TESTED instrument, NOT audible qualification

    docs/ledger/C013_REFLEX_INSTRUMENT_BINDING.md

  • A LICENSE file is not the licence.

    docs/architecture/MODEL_LICENCES.md

Capabilities

Related capabilities

All 5 catalogued capabilities in this area

Sources

Sources

Paths are relative to the private JARVIS repository. They are listed so the claims above can be audited by the owner and reviewers; the files themselves are not published.

  • doc docs/training/BRAIN_AND_VOICE_RUNTIME_MAP.md
  • doc docs/architecture/MODEL_LICENCES.md
  • ledger docs/ledger/C013_REFLEX_INSTRUMENT_BINDING.md
  • ledger docs/ledger/FINAL_LM_PUBLIC_ASR_PRECISION_SCREEN_001.md
  • ledger docs/ledger/CRITICAL_PATH.md
  • doc docs/training/VOICE_QUALIFICATION_AND_AUDIO_REGRESSION_PLAN.md