# 🎙️ Plan Détaillé : Voix et Ouïe pour Effi sur Fedora > **Document de référence** - Installation TTS/STT sur folzo-Corp (Fedora) > **Date** : Avril 2026 > **Statut** : En cours --- ## 📋 Vue d'ensemble ```bash ┌─────────────────────────────────────────────────────────────────┐ │ FOLZO-CORP (Fedora) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 1. openedai-speech (TTS) │ │ │ │ - Port: 8100 │ │ │ │ - GPU: ROCm (RX 7800 XT) │ │ │ │ - Voix: XTTS v2 (nova) │ │ │ │ │ │ │ │ 2. speaches (STT) │ │ │ │ - Port: 8200 │ │ │ │ - Modèle: Whisper large-v3-turbo │ │ │ │ - CPU (ROCm en option future) │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ EFFI-SERVER │ │ Open WebUI (port 3000) │ │ - STT URL: http://192.168.1.11:8200/v1 │ │ - TTS URL: http://192.168.1.11:8100/v1 │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## ✅ PHASE 1 : Préparation Fedora (TERMINÉE) ### Statut - ✅ ROCm installé et fonctionnel - ✅ Docker v29.3.1 installé - ✅ Firewall configuré (ports 8100, 8200, 11434 ouverts) ### Vérifications effectuées ```bash $ docker --version Docker version 29.3.1, build 1.fc43 $ rocm-smi Device Node IDs Temp Power Partitions SCLK MCLK Fan Perf PwrCap VRAM% GPU% 0 1 0x747e, 60998 44.0°C 50.0W N/A, N/A, 0 169Mhz 1218Mhz 0% auto 212.0W 3% 14% ``` --- ## 🔊 PHASE 2 : TTS (openedai-speech) ### Étape 2.1 : Créer la structure ```bash # Se connecter à folzo-Corp (localement ou via SSH) mkdir -p ~/openedai-speech cd ~/openedai-speech # Créer les sous-dossiers mkdir -p tts-voices tts-config ``` ### Étape 2.2 : Docker Compose TTS Créer le fichier `~/openedai-speech/docker-compose.yml` : ```yaml services: openedai-speech: image: ghcr.io/matatonic/openedai-speech container_name: openedai-speech restart: unless-stopped ports: - "8100:8000" volumes: - ./tts-voices:/app/voices - ./tts-config:/app/config devices: - /dev/kfd - /dev/dri group_add: - "44" # video - "991" # render environment: - HSA_OVERRIDE_GFX_VERSION=11.0.0 - HIP_VISIBLE_DEVICES=0 ``` ### Étape 2.3 : Configuration des voix Créer le fichier `~/openedai-speech/tts-config/voice_to_speaker.yaml` : ```yaml # Configuration XTTS v2 tts-1-hd: alloy: model: xtts speaker: voices/alloy.wav echo: model: xtts speaker: voices/echo.wav fable: model: xtts speaker: voices/fable.wav onyx: model: xtts speaker: voices/onyx.wav nova: model: xtts speaker: voices/nova.wav shimmer: model: xtts speaker: voices/shimmer.wav # Fallback en piper si pas de fichier WAV tts-1: alloy: model: voices/en_US-libritts_r-medium.onnx speaker: 79 echo: model: voices/en_US-libritts_r-medium.onnx speaker: 134 ``` ### Étape 2.4 : Télécharger les modèles de voix ```bash cd ~/openedai-speech/tts-voices # Télécharger les modèles Piper (fallback) wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx.json # Note: Les fichiers .wav pour XTTS seront à recréer ou restaurer depuis backup # Pour tester immédiatement, on utilisera la voix "alloy" en piper (anglais) ``` ### Étape 2.5 : Lancer et tester ```bash cd ~/openedai-speech docker compose up -d # Vérifier les logs docker logs -f openedai-speech # Test rapide curl -s http://localhost:8100/v1/audio/speech \ -H "Content-Type: application/json" \ -d '{"model":"tts-1","input":"Hello, this is a test","voice":"alloy"}' \ --output /tmp/test_tts.mp3 # Vérifier le fichier ls -lh /tmp/test_tts.mp3 file /tmp/test_tts.mp3 ``` --- ## 🎤 PHASE 3 : STT (speaches - Whisper) ### Étape 3.1 : Créer la structure ```bash mkdir -p ~/speaches cd ~/speaches ``` ### Étape 3.2 : Dockerfile pour speaches Créer le fichier `~/speaches/Dockerfile` : ```dockerfile FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim WORKDIR /home/ubuntu/speaches # Installation des dépendances système RUN apt-get update && apt-get install -y \ ffmpeg \ libsndfile1 \ curl \ && rm -rf /var/lib/apt/lists/* # Créer l'utilisateur RUN useradd --create-home --shell /bin/bash ubuntu # Cloner speaches RUN git clone https://github.com/speaches-ai/speaches.git . # Installer speaches RUN uv sync --frozen --no-dev EXPOSE 8000 CMD [".venv/bin/python", "-m", "speaches"] ``` ### Étape 3.3 : Docker Compose STT Créer le fichier `~/speaches/docker-compose.yml` : ```yaml services: speaches: build: . container_name: speaches-stt restart: unless-stopped ports: - "8200:8000" environment: - WHISPER__MODEL=deepdml/faster-whisper-large-v3-turbo-ct2 - WHISPER__LANGUAGE=fr - WHISPER__COMPUTE_TYPE=int8 - WHISPER__DEVICE=cpu - WHISPER__CPU_THREADS=4 volumes: - speaches-models:/home/ubuntu/.cache/huggingface speaches-init: image: curlimages/curl:latest container_name: speaches-init restart: "no" depends_on: - speaches entrypoint: > sh -c "sleep 10 && curl -sf -X POST http://speaches:8000/v1/models/deepdml%2Ffaster-whisper-large-v3-turbo-ct2 && echo 'Modèle enregistré' || echo 'Erreur enregistrement modèle'" volumes: speaches-models: ``` ### Étape 3.4 : Builder et lancer ```bash cd ~/speaches docker compose build docker compose up -d # Attendre le téléchargement du modèle (~1.5GB) docker logs -f speaches-stt ``` ### Étape 3.5 : Test STT ```bash # Créer un fichier audio test # ou utiliser un fichier existant curl -s http://localhost:8200/v1/audio/transcriptions \ -F "file=@/chemin/vers/audio.wav" \ -F "model=deepdml/faster-whisper-large-v3-turbo-ct2" \ -F "language=fr" ``` --- ## ⚙️ PHASE 4 : Configuration Open WebUI ### Étape 4.1 : Configurer Audio Accéder à : `http://192.168.1.27:3000` **Admin Panel → Settings → Audio :** **STT (Speech-to-Text) :** - Engine: `OpenAI` - OpenAI API Base URL: `http://192.168.1.11:8200/v1` - Model: `deepdml/faster-whisper-large-v3-turbo-ct2` **TTS (Text-to-Speech) :** - Engine: `OpenAI` - OpenAI API Base URL: `http://192.168.1.11:8100/v1` - Model: `tts-1-hd` - Voice: `nova` (ou `alloy` si pas de WAV) ### Étape 4.2 : Tester le pipeline complet 1. Ouvrir une conversation avec Effi 2. Cliquer sur le bouton micro 🎤 3. Parler : "Bonjour Effi, comment vas-tu ?" 4. Vérifier que : - ✅ Le STT transcrit correctement - ✅ Le LLM répond - ✅ Le TTS lit la réponse à voix haute --- ## 🔧 PHASE 5 : Optimisations (Optionnelles) ### Option A : Créer des voix XTTS personnalisées Si tu veux recréer des voix (nova, alloy, etc.) : ```bash # Il faut des échantillons audio de ~10 secondes par voix # Format: WAV, 22050Hz, mono cd ~/openedai-speech/tts-voices # Copier un fichier audio source cp /chemin/vers/echantillon.wav nova.wav # Redémarrer le service docker compose restart openedai-speech ``` ### Option B : Optimiser STT avec GPU (Avancé) **⚠️ Complexe** - Nécessite compilation CTranslate2-rocm Voir l'historique : `/docs/ARCHIVE/HISTORIQUE-COMPLET-EFFI.md` Section : "Problème 2 : Build ROCm Whisper Échoué" **Recommandation** : Attendre des packages précompilés ou rester en CPU pour l'instant. --- ## 🧪 Commandes de diagnostic ### Vérifier les services ```bash # Sur folzo-Corp docker ps # Test TTS curl -s http://192.168.1.11:8100/v1/audio/speech \ -H "Content-Type: application/json" \ -d '{"model":"tts-1","input":"Test","voice":"alloy"}' \ --output /tmp/test.mp3 && echo "TTS OK" || echo "TTS KO" # Test STT curl -s http://192.168.1.11:8200/v1/models | jq . # Logs docker logs openedai-speech --tail 50 -f docker logs speaches-stt --tail 50 -f ``` ### Vérifier GPU ROCm ```bash rocm-smi rocm-smi --showmeminfo vram ``` --- ## 📊 Récapitulatif des fichiers créés ``` /home/folzo/ ├── openedai-speech/ │ ├── docker-compose.yml │ ├── tts-config/ │ │ └── voice_to_speaker.yaml │ └── tts-voices/ │ ├── en_US-libritts_r-medium.onnx │ ├── en_US-libritts_r-medium.onnx.json │ └── (nova.wav, alloy.wav, etc. à ajouter) │ └── speaches/ ├── Dockerfile ├── docker-compose.yml └── (code source cloné depuis GitHub) ``` --- ## 🚨 Dépannage courant ### Erreur : "Permission denied" /dev/kfd ```bash # Vérifier les groupes sudo usermod -a -G video,render $USER # Déconnexion/reconnexion nécessaire ``` ### Erreur : "Connection refused" depuis effi-server ```bash # Sur folzo-Corp, vérifier firewall sudo firewall-cmd --list-ports # Doit contenir: 8100/tcp 8200/tcp # Tester localement d'abord curl http://localhost:8100/v1/models curl http://localhost:8200/v1/models ``` ### Erreur : Modèle non trouvé (speaches) ```bash # Vérifier que le modèle est bien enregistré curl http://192.168.1.11:8200/v1/models # S'il n'est pas listé, l'enregistrer manuellement: curl -X POST http://192.168.1.11:8200/v1/models \ -H "Content-Type: application/json" \ -d '{"model":"deepdml/faster-whisper-large-v3-turbo-ct2"}' ``` --- ## 📚 Références - [openedai-speech GitHub](https://github.com/matatonic/openedai-speech) - [speaches GitHub](https://github.com/speaches-ai/speaches) - [Historique complet Effi](../ARCHIVE/HISTORIQUE-COMPLET-EFFI.md) - [Configuration recap](../CONFIGURATION-RECAP-GITEA.md) --- *Document créé le 5 avril 2026 - Fedora installation*