- Suppression 37 fichiers scratch/debug (Pipecat exploration : _debug*, check_*, test_*, ws_test*, bot.py, start.sh, run_bot*, run_direct.py) - Garde uniquement l'essentiel : bot_direct.py, launcher.py, README.md, .gitignore - .gitignore renforcé (patterns scratch/debug) - README réécrit selon l'état réel (Phase 1 terminée, Phase 2 audio partielle TTS/STT) - Roadmap 6 phases documentée
5.0 KiB
5.0 KiB
JARVIS v3 — Assistant Vocal Intelligent
Assistant vocal local connecté à l'agent Hermes (DeepSeek v4). Contexte multi-tours, interface navigateur, synthèse vocale (TTS), liaison vocale (STT navigateur).
Était le projet
jarvis-pipecat(historique nommé d'après Pipecat, non utilisé actuellement).
🏗️ Architecture
┌──────────────┐ WebSocket ┌──────────────┐ HTTP REST ┌──────────────┐
│ Navigateur │ ◄────────────► │ bot_direct │ ◄─────────────► │ Hermes API │
│ (HTML/JS) │ ws://:7081/ws │ .py :7081 │ :8642 /v1/chat │ A.L.E.X.A. │
│ 🎤 STT 🔊 │ │ TTS edge │ /completions │ (DeepSeek v4)│
└──────────────┘ │ (serveur) │ └──────────────┘
└──────┬───────┘
▼ Infisical (clé) / fallback .env
- STT : Web Speech API navigateur (Chrome) — nécessite HTTPS ou flag (voir Bloqueurs).
- TTS :
edge-ttscôté serveur (voixfr-FR-DeniseNeural), MP3 → base64 →<audio>. - LLM : API Hermes (
Hermes Agent/ DeepSeek v4), temperature 0.8, max 300 tokens, 20 messages de contexte.
📦 Fichiers
| Fichier | Rôle |
|---|---|
bot_direct.py |
Serveur WebSocket + interface HTML embarquée (entrée principale) |
launcher.py |
Récupère la clé Hermes (Infisical → fallback .env) puis lance bot_direct.py |
README.md |
Ce document |
🚀 Démarrage
Service systemd (recommandé)
# Activer + démarrer
systemctl --user enable --now jarvis-v3
# Statut / logs
systemctl --user status jarvis-v3
journalctl --user -u jarvis-v3 -f
# Redémarrer après modification de code
rm -rf ~/workspace/jarvis-pipecat/__pycache__/
systemctl --user restart jarvis-v3
# Arrêter
systemctl --user stop jarvis-v3
Manuel (debug)
cd ~/workspace/jarvis-pipecat
source venv/bin/activate
python3 launcher.py
🌐 Accès
- Interface : http://openclaw1.dev.home:7081/
- WebSocket : ws://openclaw1.dev.home:7081/ws
- Port :
7081, configurable viaJARVIS_PORT
⚙️ Configuration
| Variable | Valeur | Description |
|---|---|---|
JARVIS_PORT |
7081 |
Port d'écoute |
HERMES_API_KEY |
— | Clé API Hermes (via Infisical ou .env) |
HERMES_URL |
http://localhost:8642/v1/chat/completions |
Endpoint Hermes |
La clé est récupérée par launcher.py : Infisical (/hermes-claw/API_SERVER_KEY)
puis fallback ~/workspace/.env (HERMES_ALEXA_KEY).
📊 Roadmap
| Phase | Contenu | Statut |
|---|---|---|
| Phase 1 | Chat texte WebSocket → Hermes (contexte 20 msgs, reconnexion auto, timeout) | ✅ Terminé |
| Phase 2 | Audio — TTS edge-tts + STT navigateur | 🟡 Partiel (TTS ✅ / STT ⚠️) |
| Phase 3 | Stabilité & qualité vocale — STT local, TTS naturel, streaming | 🔜 |
| Phase 4 | Orchestration Pipecat — flux STT→LLM→TTS, barge-in, WebRTC | 🔜 |
| Phase 5 | Fonctionnalités — wake word, tool calling, mémoire Honcho | 📋 |
| Phase 6 | Production — HTTPS/WSS, auth, multi-user, Docker, monitoring | 📋 |
Détail complet : Obsidian 3.5_PROJETS/JARVIS/JARVIS.md (roadmap + statut).
⚠️ Bloqueurs connus
- STT
networkerror — la Web Speech API est bloquée par Chrome en HTTP. → Solution rapide : flagchrome://flags/#unsafely-treat-insecure-origin-as-secure+http://openclaw1.dev.home:7081. → Solution durable (Phase 3) : Whisper local (faster-whisper / whisper.cpp) — STT côté serveur, plus HTTPS requis. - TTS non streamé — attend la fin de la réponse LLM (~7 s ajoutées). Cible Phase 3 : < 5 s.
- HTTP non chiffré — pas encore de HTTPS/WSS (Phase 6).
- Toujours en écoute impossible — il faut déclencher le micro ; wake word prévu Phase 5.
🛠️ Dépendances
websockets==16.0
httpx
edge-tts
→ installées dans venv/.
📝 Notes techniques (pitfalls)
- websockets 16.0 :
respond()ne prend que(status, text). Pour headers custom, retourner un objetResponsedu modulewebsockets.http11(Response, Headers). - Cache navigateur :
bot_direct.pyrenvoieCache-Control: no-storesur les pages HTML. - Cache Python : après modification de
bot_direct.py, supprimer__pycache__/avant le redémarrage. - Pipecat abandonné pour le moment : API 1.4.0 massivement refactorée (
LLMMessagesFramesupprimée,LLMContextn'est plus un processeur). À réévaluer en Phase 4. - Ne pas committer les fichiers scratch/debug :
.gitignorecouvre_check*,_debug*,test_*.py,check_*.py,*_out.txt, etc.
📄 Licence
Projet personnel — Bruno Charest, 2026.