Initial FRIDAY Voice Console scaffold

This commit is contained in:
2026-06-25 07:24:34 -05:00
commit c2a304642a
17 changed files with 997 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
from __future__ import annotations
from dataclasses import dataclass
DEFAULT_SPEACHES_URL = "http://192.168.86.150:8000"
DEFAULT_HERMES_COMMAND = "hermes"
DEFAULT_HERMES_SOURCE = "friday-voice"
DEFAULT_CONFIRMED_THRESHOLD = 0.85
DEFAULT_PROBABLE_THRESHOLD = 0.70
DEFAULT_DATA_DIR = "/data"
DEFAULT_WHISPER_MODEL = "deepdml/faster-whisper-large-v3-turbo-ct2"
DEFAULT_TTS_MODEL = "speaches-ai/Kokoro-82M-v1.0-ONNX"
DEFAULT_TTS_VOICE = "af_nova"
@dataclass(slots=True)
class Settings:
"""Runtime settings for the FRIDAY voice gateway.
Defaults match Jeremy's residence services from the wiki crawl.
"""
speaches_url: str = DEFAULT_SPEACHES_URL
hermes_command: str = DEFAULT_HERMES_COMMAND
hermes_source: str = DEFAULT_HERMES_SOURCE
speaker_confirmed_threshold: float = DEFAULT_CONFIRMED_THRESHOLD
speaker_probable_threshold: float = DEFAULT_PROBABLE_THRESHOLD
data_dir: str = DEFAULT_DATA_DIR
whisper_model: str = DEFAULT_WHISPER_MODEL
tts_model: str = DEFAULT_TTS_MODEL
tts_voice: str = DEFAULT_TTS_VOICE
@classmethod
def from_env(cls, environ: dict[str, str] | None = None) -> "Settings":
import os
env = os.environ if environ is None else environ
return cls(
speaches_url=env.get("SPEACHES_URL", DEFAULT_SPEACHES_URL),
hermes_command=env.get("HERMES_COMMAND", DEFAULT_HERMES_COMMAND),
hermes_source=env.get("HERMES_SOURCE", DEFAULT_HERMES_SOURCE),
data_dir=env.get("DATA_DIR", DEFAULT_DATA_DIR),
whisper_model=env.get("WHISPER_MODEL", DEFAULT_WHISPER_MODEL),
tts_model=env.get("TTS_MODEL", DEFAULT_TTS_MODEL),
tts_voice=env.get("TTS_VOICE", DEFAULT_TTS_VOICE),
speaker_confirmed_threshold=float(
env.get("SPEAKER_CONFIRMED_THRESHOLD", DEFAULT_CONFIRMED_THRESHOLD)
),
speaker_probable_threshold=float(
env.get("SPEAKER_PROBABLE_THRESHOLD", DEFAULT_PROBABLE_THRESHOLD)
),
)