54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
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)
|
|
),
|
|
)
|