Funk-lab/stt/client/config/stt.example.toml
ALI YESILKAYA 610d32f1e9
feat(stt-client): voix Kokoro (TTS enfichable) + commande --install-kokoro (#55)
Ajoute un moteur TTS plus naturel (Kokoro, ONNX/CPU) au choix, Piper restant
le défaut et le repli.

- engine.py : synthèse enfichable (_synthesize → _synth_piper | _synth_kokoro).
  Kokoro chargé une fois (préchargé au boot si sélectionné), WAV via wave stdlib
  (numpy → PCM16), lecture/interruption inchangées. Repli SILENCIEUX si le modèle
  ou le paquet kokoro-onnx manque (jamais de crash).
- config : [voice].tts_engine ("piper"|"kokoro") + kokoro_voice (ff_siwis, FR),
  kokoro_speed, kokoro_lang.
- cli : `stt --install-kokoro` télécharge kokoro-v1.0.onnx + voices-v1.0.bin dans
  ~/.local/share/kokoro et imprime les étapes (pipx inject kokoro-onnx, espeak-ng).
- pyproject : extra optionnel [kokoro] ; client 0.15.0.
- doc : stt.example.toml + admin/ia/stt.md + journal.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 23:57:27 +02:00

77 lines
3.8 KiB
TOML

# Configuration du CLIENT STT — copier vers ~/.config/stt/stt.toml (`stt --setup` le génère).
# Reflète les défauts embarqués (stt/client/stt/config.py : DEFAULT_CONFIG).
# Le client n'a plus de cerveau : il envoie le texte au STT-server (in-cluster).
[server]
url = "http://stt.lab.local" # endpoint du STT-server (paramétrable)
timeout_sec = 90
model = "hermes-default" # modèle demandé au serveur
# Noms courts (--model / commande /model) : hermes=hermes-default, qwen=qwen3-8b,
# claude=claude-sonnet-4-6, opus=claude-opus-4-7. Sinon mets un alias LiteLLM brut.
[voice]
wake_word = "hermes" # "Ok Hermès"
whisper_model = "large-v3" # STT faster-whisper (CPU int8) — "small" pour tester
tts_engine = "piper" # "piper" (rapide) | "kokoro" (plus naturel — voir ci-dessous)
piper_voice = "fr_FR-upmc-medium" # voix Piper — ~/.local/share/piper/<voix>.onnx
# Voix Kokoro (si tts_engine = "kokoro") : `stt --install-kokoro` + `pipx inject stt kokoro-onnx`
# kokoro_voice = "ff_siwis" # voix FR (femme) ; kokoro_speed = 1.0 ; kokoro_lang = "fr-fr"
language = "fr"
silence_sec = 1.2
min_speech_sec = 0.6
chat_timeout_sec = 60
# theme / avatar sont désormais réglés dans le HUD (drawer Réglages, mémorisé en
# localStorage) — ces deux clés sont gardées pour compat mais ignorées par le HUD.
[ui]
theme = "arc-reactor"
avatar = "default"
kiosk = true # (compat) plein écran si window_mode absent
window_mode = "kiosk" # "app" (fenêtre, type Discord) | "kiosk" (plein écran) | "none"
ws_host = "127.0.0.1"
ws_port = 9300 # websocket états ↔ HUD (doit matcher hud/index.html)
http_port = 9301 # HTTP statique qui sert le HUD
[memory]
enabled = true # cache local de conversation (brut, gitignoré)
local_db = "~/.local/share/stt/memory.sqlite"
# ---------------------------------------------------------------------------
# Portail de services — tuiles + pages détail (santé live) + voix « ouvre <x> ».
# Définir [[services]] ici REMPLACE entièrement la liste par défaut (homelab Funk).
# Champs : id, name, url, icon, aliases (voix) ; + pour la page détail (optionnel) :
# description : phrase « ce que fait le service »
# health_url : endpoint sondé (up/down + latence) ; défaut = url
# components : briques dont dépend le service ; prom = PromQL renvoyant 1/0
# alerts_match: labels Alertmanager — alerte affichée si TOUS matchent
# ---------------------------------------------------------------------------
# [[services]]
# id = "grafana"
# name = "Grafana"
# url = "http://grafana.lab.local"
# icon = "📊"
# aliases = ["graphana", "metriques", "monitoring", "dashboard"]
# description = "Tableaux de bord et visualisation des métriques."
# health_url = "http://grafana.lab.local/api/health"
# alerts_match = { namespace = "monitoring" }
#
# [[services.components]]
# name = "Pod"
# prom = 'kube_pod_status_ready{namespace="monitoring",pod=~".*grafana.*",condition="true"}'
# Santé live des pages détail (sondage non bloquant côté client) :
# [portal]
# status_enabled = true
# status_interval_sec = 15
# probe_timeout_sec = 4
# prometheus_url = "http://prometheus.lab.local"
# alertmanager_url = "http://alertmanager.lab.local"
# Intentions vocales (lecture seule), reconnues avant le LLM :
# « ouvre <service> » → ouvre la page
# « état du cluster / des services » → résumé de santé (parlé)
# « combien sur mon ghostfolio » → valeur du portefeuille (ci-dessous)
# Ghostfolio : access_token = « Security token » du compte (Réglages Ghostfolio).
# Source UNIQUE du jeton — le client le transmet au serveur, qui appelle l'API.
# [ghostfolio]
# access_token = "TON_SECURITY_TOKEN"