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. |
||
|---|---|---|
| .. | ||
| .cargo | ||
| src | ||
| build.rs | ||
| Cargo.toml | ||
| Makefile.toml | ||