J.A.R.V.I.S-rust/crates/jarvis-app
Bossiara13 3d127f05c0 feat(app): speak LLM reply via Windows SAPI server-side
GUI front-end does not subscribe to IpcEvent::LlmReply, so the LLM
auto-fallback was effectively silent — user got the OK chime but no
spoken answer. Backlog item resolved.

llm_fallback::handle now also invokes speak_via_sapi() after firing
IpcEvent::LlmReply (both for successful replies and the fallback
error message). The text goes through System.Speech.Synthesis.
SpeechSynthesizer, with a preference pass that picks the first
installed ru-RU voice if present (Microsoft Irina / Pavel etc.) so
Russian replies sound right out of the box, and falls back to the
default English voice otherwise.

PowerShell is invoked fire-and-forget (no Wait, stdout/stderr null)
so the voice loop never blocks. A long answer keeps speaking while
jarvis returns to wake-word listening; the mic may pick up some of
the speech which is the same compromise voices::play_* already makes.
A cleaner version would pause pv_recorder for the duration of the
utterance — that goes in the backlog as part of the eventual
unified IpcEvent::Speak refactor.

Toggle: set JARVIS_LLM_TTS=false to disable (e.g. on a server where
the GUI is the speaker). Non-Windows builds get a no-op stub.
2026-05-15 01:51:02 +03:00
..
.cargo project restructure with Rust workspaces 2026-01-04 05:19:47 +05:00
src feat(app): speak LLM reply via Windows SAPI server-side 2026-05-15 01:51:02 +03:00
build.rs project restructure with Rust workspaces 2026-01-04 05:19:47 +05:00
Cargo.toml vosk model selection in GUI 2026-01-05 03:38:04 +05:00
Makefile.toml project restructure with Rust workspaces 2026-01-04 05:19:47 +05:00