VOICE.md 3.3 KB

Vocal Discord

  • !join, !join texte ou !join text : transcriptions et réponses écrites.
  • !join audio : écoute et réponses parlées ; pas de transcription ni de réponse de conversation dans le salon texte. Les confirmations de commandes restent textuelles.
  • !quit : annule les traitements et la lecture, puis déconnecte le bot.
  • Pour changer de mode : !quit, puis la commande de connexion souhaitée.

Les transcriptions écrites sont modifiées : ⚪ en attente, 🟠 traitement du lot, 🟢 réponse envoyée, 🔴 échec. Chaque phrase conserve sa référence de message, y compris les phrases identiques ou regroupées pendant une réponse.

Le service TTS est interchangeable via TTS_URL (défaut http://kokoro-tts:8000/v1/audio/speech) et TTS_VOICE (ff_siwis). Contrat : POST JSON input, voice, réponse WAV PCM16 mono/stéréo ; GET /healthz pour vérifier le service avant connexion audio.

La réponse complète du LLM est découpée en morceaux de 80 caractères maximum, avec un premier morceau limité à 48 caractères pour commencer la lecture plus tôt. Les coupures privilégient la ponctuation puis les espaces. Cela peut modifier la prosodie et ajouter des pauses ; le gain réel doit être mesuré après déploiement. Les emojis Unicode, emojis Discord et alias comme :hap: sont retirés uniquement du texte envoyé au TTS. Une réponse contenant seulement des emojis reste silencieuse. Le bot commence à lire la première phrase sans attendre la synthèse des suivantes. Une phrase est préchargée pendant la lecture. Il ne s'agit pas de streaming des tokens du LLM. Le TTS CPU ne traite qu'une requête à la fois.

Réglages de latence (variables du bot, secondes pour les silences) :

Variable Défaut Rôle
VOICE_PHRASE_SILENCE 0.5 Silence avant envoi à Whisper, auparavant 0.8 s
VOICE_REPLY_SILENCE 1.0 Silence global avant réponse, auparavant 2 s
TTS_FIRST_CHUNK_CHARS 48 Taille maximale du premier morceau parlé
TTS_CHUNK_CHARS 80 Taille maximale des morceaux suivants

Le silence global est compté depuis la dernière parole, pas ajouté après le STT. La réponse attend toujours les transcriptions en cours et les locuteurs encore actifs. Une pause de 0.5 s peut découper une intervention : augmenter ce seuil si Whisper perd du contexte. Le bot attend toujours la fin de sa propre lecture avant de répondre au lot suivant. Aucun changement de modèle ni de précision Whisper. Les logs Premier audio prêt mesurent le temps entre entrée dans le TTS et premier WAV disponible, sans inclure STT/LLM, lecture ou transport Discord.

Pour retrouver les seuils et tailles précédents : VOICE_PHRASE_SILENCE=0.8, VOICE_REPLY_SILENCE=2.0, TTS_FIRST_CHUNK_CHARS=240, TTS_CHUNK_CHARS=240. La préférence pour les pauses aux virgules reste active. Un revert de la PR restaure exactement le comportement précédent. Aucun changement du trigger OpenShift requis.

Le modèle/voix Kokoro-82M ff_siwis est chargé dans un pod séparé sur bureau, avec 2 CPU réservés, limite de 4 CPU et 4 GiB RAM ; aucun GPU demandé. Les poids sont inclus dans l'image pour un démarrage sans accès à Hugging Face.

Tests : python -m unittest test_voice_stt test_voice_tts. Les tests ne connectent pas le bot à Discord et ne publient aucun message réel.