Module 10 / 16← Ordre des modules
● Interface · STT · TTS · Local

Voix locale

Ce module ajoute la voix à Jarvis sans dépendre d’un service cloud : faster-whisper transcrit les messages vocaux en local et NeuTTS synthétise les réponses sur CPU. Telegram reçoit ensuite une bulle vocale Opus/OGG grâce à ffmpeg. Le LLM principal reste ainsi prioritaire sur le GPU AMD.

Point de départ

Telegram texte opérationnel

Point d’arrivée

STT + TTS locaux fonctionnels

Golden Jarvis

Whisper small + NeuTTS CPU

Avant de commencer

Prérequis

  • Modules 00 à 09 validés.
  • Hermes répond correctement en texte.
  • Telegram fonctionne en texte.
  • Connexion Internet disponible pour le premier téléchargement des modèles vocaux.
  • Quelques Go libres pour les caches et dépendances.

Principe Golden

  • STT exécuté localement.
  • TTS exécuté localement.
  • Aucune clé API nécessaire.
  • STT/TTS sur CPU afin de préserver la mémoire GPU du LLM.
  • La voix de référence doit être une voix que vous avez le droit d’utiliser.
Confidentialité : cette documentation ne contient aucun nom d’utilisateur, IP, token ou chemin personnel. Les fichiers de voix utilisent des noms génériques sous $HOME/.hermes/tts/.

Architecture vocale

Entrée vocale — STT

Telegram ou le micro fournissent de l’audio. Hermes le transmet au provider STT local, basé sur faster-whisper, qui transforme la voix en texte.

Traitement

Le texte transcrit est traité comme un message normal par Hermes et par votre modèle Ollama local.

Sortie vocale — TTS

NeuTTS transforme la réponse en WAV localement. ffmpeg convertit ensuite l’audio au format Opus/OGG requis pour une bulle vocale Telegram.

Répartition CPU / GPU

Le Golden Build conserve Qwen sur le GPU AMD et place Whisper/NeuTTS sur CPU afin d’éviter la concurrence sur la mémoire graphique UMA.

Légende des actions

Lecture seuleModificationValidationOptionnel

Installation pas à pas

10.1 · Vérifier Hermes et Telegram

Lecture seule
hermes gateway status
hermes config check
Pourquoi : La voix repose sur une installation Hermes et une Gateway déjà fonctionnelles.
Résultat attendu : La Gateway est active et la configuration Hermes est valide.

10.2 · Sauvegarder la configuration avant modification

Modification
cp ~/.hermes/config.yaml "$HOME/.hermes/config.yaml.backup-$(date +%Y%m%d-%H%M%S)"
Pourquoi : Pouvoir revenir immédiatement à la configuration texte fonctionnelle.
Résultat attendu : Une copie horodatée de config.yaml est créée.

10.3 · Installer les dépendances audio système

Modification
sudo apt update
sudo apt install -y portaudio19-dev ffmpeg libopus0 espeak-ng
Pourquoi : PortAudio gère l’entrée/sortie audio CLI, ffmpeg les conversions, Opus le format audio, et espeak-ng sert de backend phonétique à NeuTTS.
Résultat attendu : Les quatre dépendances sont installées sans erreur APT.

10.4 · Vérifier les outils audio

Validation
ffmpeg -version | head -n 1
espeak-ng --version | head -n 1
ldconfig -p | grep -E 'libopus|libportaudio' | head
Pourquoi : Confirmer que les briques audio système sont réellement disponibles.
Résultat attendu : Les versions de ffmpeg/espeak-ng et les bibliothèques audio sont détectées.

10.5 · Configurer le STT local

Modification
hermes config set stt.enabled true
hermes config set stt.echo_transcripts true
hermes config set stt.provider local
hermes config set stt.language fr
hermes config set stt.local.model small
hermes config set stt.local.language fr
Pourquoi : Reproduire le comportement Golden : transcription locale, français forcé, modèle Whisper small, et affichage du transcript pour contrôler ce que Jarvis a compris.
Résultat attendu : Les valeurs sont enregistrées dans la section stt de ~/.hermes/config.yaml.

10.6 · Ajouter le vocabulaire technique — recommandé

Optionnel
hermes config set stt.local.initial_prompt "Jarvis, Hermes, Ollama, Qwen, ROCm, Docker, Telegram"
Pourquoi : Aider Whisper à reconnaître correctement les noms techniques souvent utilisés avec Jarvis.
Résultat attendu : Le prompt initial est stocké sans modifier le comportement du LLM.

10.7 · Préparer les dépendances vocales Hermes

Modification
hermes tools
Pourquoi : La version actuelle d’Hermes utilise son gestionnaire de dépendances pour préparer les fonctionnalités vocales intégrées. Activez/reconfigurez le STT local et les outils TTS si l’assistant les propose.
Résultat attendu : Hermes termine la configuration sans erreur de dépendance. Si de nouvelles dépendances sont installées, redémarrez ensuite Hermes/Gateway.

10.8 · Créer le répertoire TTS local

Modification
mkdir -p ~/.hermes/tts/neutts
chmod 700 ~/.hermes/tts ~/.hermes/tts/neutts
Pourquoi : Centraliser les actifs de synthèse vocale dans un emplacement privé et sauvegardable.
Résultat attendu : Le répertoire ~/.hermes/tts/neutts existe avec des permissions restrictives.

10.9 · Ajouter une voix de référence NeuTTS

Modification
# Copier votre propre échantillon vocal WAV :
cp METTRE_VOTRE_FICHIER_REFERENCE.wav ~/.hermes/tts/neutts/reference.wav

# Créer la transcription exacte de cet échantillon :
nano ~/.hermes/tts/neutts/reference.txt
Pourquoi : NeuTTS peut utiliser un court échantillon et sa transcription comme référence de timbre.
Résultat attendu : reference.wav et reference.txt existent. Le texte correspond exactement aux paroles de l’enregistrement.

10.10 · Protéger les actifs vocaux

Modification
chmod 600 ~/.hermes/tts/neutts/reference.wav ~/.hermes/tts/neutts/reference.txt
ls -l ~/.hermes/tts/neutts/
Pourquoi : Un échantillon de voix est une donnée personnelle ; il doit rester privé.
Résultat attendu : Les deux fichiers sont lisibles uniquement par leur propriétaire.

10.11 · Configurer NeuTTS — mode Golden

Modification
hermes config set tts.provider neutts
hermes config set tts.speed 1.0
hermes config set tts.neutts.ref_audio "$HOME/.hermes/tts/neutts/reference.wav"
hermes config set tts.neutts.ref_text "$HOME/.hermes/tts/neutts/reference.txt"
hermes config set tts.neutts.model neuphonic/neutts-nano-french-q4-gguf
hermes config set tts.neutts.device cpu
Pourquoi : Reproduire le Golden Build Jarvis : NeuTTS local, modèle français Q4, vitesse normale et exécution CPU.
Résultat attendu : Le provider TTS est neutts et le device est cpu.

10.12 · Alternative si le modèle Golden n’est plus disponible

Optionnel
# Utiliser le modèle NeuTTS actuellement proposé par Hermes :
hermes config set tts.neutts.model neuphonic/neutts-air-q4-gguf
Pourquoi : La documentation Hermes actuelle utilise neutts-air-q4-gguf comme valeur de référence. Cette alternative permet de conserver NeuTTS local si l’ancien modèle Golden n’est plus distribué.
Résultat attendu : Un seul modèle NeuTTS est configuré. Notez ce changement dans votre propre Golden Build.

10.13 · Vérifier la configuration vocale

Validation
hermes config get stt
hermes config get tts
hermes config check
Pourquoi : Vérifier l’ensemble avant de charger les modèles.
Résultat attendu : STT = local/fr/small, TTS = neutts/cpu/speed 1.0, et aucune erreur de configuration.

10.14 · Redémarrer la Gateway

Modification
hermes gateway restart
hermes gateway status
Pourquoi : La Gateway doit relire les paramètres STT/TTS et les nouvelles dépendances.
Résultat attendu : La Gateway est active après redémarrage.

10.15 · Tester la transcription depuis Telegram

Validation
# Dans Telegram, envoyer une note vocale courte :
"Jarvis, réponds uniquement : transcription locale fonctionnelle."
Pourquoi : Déclencher le premier chargement du modèle Whisper puis tester Telegram → STT → Hermes.
Résultat attendu : Hermes affiche le transcript puis répond au message. Le premier test peut être plus long pendant le téléchargement/cache du modèle.

10.16 · Activer les réponses vocales Telegram

Modification
# Dans Telegram :
/voice on
/voice status
Pourquoi : Activer la réponse audio automatique en plus du texte.
Résultat attendu : Le statut indique que le mode vocal/TTS est actif pour cette conversation.

10.17 · Test fonctionnel Golden Telegram

Validation
# Envoyer une note vocale :
"Jarvis, donne-moi l'état actuel d'Ollama. Lecture uniquement."
Pourquoi : Valider toute la chaîne : note vocale → transcription → réponse texte → NeuTTS WAV → ffmpeg → bulle Opus/OGG.
Résultat attendu : Telegram affiche la transcription, la réponse texte, puis une bulle vocale lisible directement dans le chat.

10.18 · Tester le mode vocal CLI — optionnel

Optionnel
hermes

# Puis dans Hermes :
/voice on
/voice status

# Utiliser Ctrl+B pour démarrer l'enregistrement.
Pourquoi : Valider aussi le microphone et la lecture audio locale, indépendamment de Telegram.
Résultat attendu : Hermes enregistre, détecte la fin de parole, transcrit et lit la réponse localement.

10.19 · Contrôler les logs après le test

Validation
journalctl --user -u hermes-gateway -n 150 --no-pager | \
  grep -Ei 'stt|whisper|tts|neutts|ffmpeg|audio|telegram|error|warning'
Pourquoi : Détecter un téléchargement incomplet, une dépendance absente ou une erreur d’encodage.
Résultat attendu : Aucun message d’erreur bloquant après une transcription et une synthèse réussies.

Choisir le modèle Whisper local

tiny / base

Très rapides et peu gourmands. Adaptés aux petites machines ou aux commandes simples, mais moins précis sur les noms propres et le bruit.

small — Golden Jarvis

Bon compromis français entre précision, mémoire et latence CPU. C’est le modèle retenu dans le Golden Build.

medium / large-v3

Plus précis mais plus lourds et plus lents sur CPU. À choisir seulement si la qualité du modèle small n’est pas suffisante.

Langue forcée

Pour un Jarvis principalement francophone, stt.language=fr évite certaines erreurs d’auto-détection sur les messages courts.

Alternative TTS locale

NeuTTS

Choix Golden : local, aucune clé API, possibilité de voix de référence, mais plus lourd à installer.

Piper

Très léger, rapide sur CPU et entièrement local. Bon choix de secours si NeuTTS pose problème. La voix est moins personnalisable.

KittenTTS

Provider local également supporté par les versions récentes d’Hermes. Intéressant pour une installation légère sans clonage de timbre.

Edge TTS

Gratuit et simple mais non local. À éviter si l’objectif est de conserver l’intégralité de la chaîne vocale sur Jarvis.

Golden vs version actuelle : pour reproduire Jarvis à l’identique, gardez NeuTTS sur CPU. Si un paquet ou modèle Golden n’est plus disponible, choisissez une alternative supportée par votre version d’Hermes et consignez ce changement.

Dépannage rapide

La note vocale n’est pas transcrite

Vérifiez stt.enabled, stt.provider, puis les logs Gateway. Relancez hermes tools si Faster-Whisper n’a pas été préparé.

NeuTTS ne démarre pas

Vérifiez espeak-ng, le nom du modèle, les deux fichiers de référence et leur transcription. Si le modèle Golden a disparu, utilisez l’alternative NeuTTS actuelle.

Audio mais pas de bulle Telegram

Vérifiez ffmpeg -version. NeuTTS produit du WAV et Telegram attend de l’Opus/OGG pour les bulles vocales.

Mauvaise transcription française

Forcez stt.language=fr et stt.local.language=fr. Enrichissez éventuellement stt.local.initial_prompt avec vos termes techniques.

Voix trop lente

Conservez d’abord tts.speed=1.0. Mesurez la latence avant de modifier les paramètres ou de déplacer TTS sur GPU.

Le LLM ralentit pendant la voix

Confirmez que NeuTTS reste sur device=cpu. Le Golden Build évite volontairement de placer STT/TTS sur le GPU utilisé par Qwen.

Validation du Module 10

Ne passez au module suivant que lorsque tous les points applicables sont validés.

Les dépendances audio système sont installées.
STT utilise le provider local.
La langue française est configurée.
Le modèle STT est small pour le Golden Build.
Les transcripts sont affichés pour validation.
Les actifs de voix sont protégés.
NeuTTS utilise le CPU.
tts.speed vaut 1.0.
Une note vocale Telegram est correctement transcrite.
/voice on active la réponse vocale.
La réponse arrive sous forme de bulle vocale Telegram.
Les logs ne montrent aucune erreur audio bloquante.

STOP — Module 10 validé

Jarvis dispose maintenant d’une chaîne voix locale complète. Le prochain module installera Camofox et la couche de recherche Web persistante.