10d. Audio Workers (TTS & STT)
ECHO intègre deux moteurs dédiés au traitement du signal vocal : Kokoro TTS (synthèse vocale) et Whisper STT (transcription). Ces services opèrent comme des micro-services isolés au sein de l'infrastructure Docker, exposant des API compatibles OpenAI (endpoints /v1/audio/speech et /v1/audio/transcriptions) consommées nativement par Open WebUI.
Fiche d'identité technique
| Attribut | TTS Worker | STT Worker |
|---|---|---|
| Image | echo-tts-worker | echo-stt-worker |
| Port Interne | 7996 | 7995 |
| Technologie | Kokoro (ONNX) + Pydub | Faster-Whisper (INT8) |
| Modèle Actif | kokoro-v0.19 (~80Mo) | whisper-base/small |
| Endpoint | /v1/audio/speech | /v1/audio/transcriptions |
Architecture du Worker Kokoro TTS
Le moteur de synthèse vocale (tts_api.py) implémente une architecture de flux audio asynchrone conçue pour minimiser le TTFB (Time To First Byte) et préserver la fidélité prosodique multilingue.
Pipeline Hybride G2P (Grapheme-to-Phoneme)
La gestion du texte multilingue repose sur l'algorithme hybrid_g2p_parse(text, main_lang). Le traitement s'effectue en trois phases :
- Découpage sémantique : Le texte entrant est fractionné en phrases (via expressions régulières) pour respecter le souffle et le rythme naturel.
- Analyse lexicale : Chaque phrase est décomposée en mots. Chaque mot est testé contre le dictionnaire de la langue principale (
main_lang). En cas d'échec, les dictionnaires secondaires sont interrogés. - Reconstitution phonémique : Les phonèmes issus de différentes langues sont concaténés. Ce mécanisme préserve la prosodie exacte lors des changements de langue (code-switching) au sein d'une même phrase.
Encodage et Streaming MP3 à la volée
L'inférence du modèle Kokoro produit des tenseurs audio bruts (numpy.ndarray en float32). Pour être consommables par les navigateurs web, ces données subissent une conversion asynchrone :
- Quantification : Les échantillons
float32sont convertis en PCM 16-bit. - Encodage : La bibliothèque
pydubencode le flux PCM en MP3 à 128 kbps (encode_numpy_to_mp3). - Distribution : Le binaire MP3 est distribué au client via une
StreamingResponseFastAPI utilisant le Chunked Transfer Encoding, permettant la lecture audio avant la fin de la génération totale.
Mappage Dynamique des Modèles Vocaux
Les voix sont assignées dynamiquement via le dictionnaire VOICE_MAP en fonction de la langue détectée. Les modèles féminins de référence sont :
- Français (fr) :
ff_siwis - Anglais (en) :
af_bella
Architecture du Worker Whisper STT
Le service de reconnaissance vocale utilise l'implémentation faster-whisper, offrant une transcription locale à faible latence sans dépendance cloud. Le service traite les flux audio entrants via l'endpoint compatible OpenAI, extrait le texte et le retourne immédiatement à l'interface pour injection dans le prompt utilisateur.