# Ti-Pote — État du projet & prochaines missions > Dernière mise à jour : 2 avril 2026 --- ## Ce qui fonctionne ### Voice conversation (end-to-end) - Wake word ("Hey Jarvis") → capture audio (arecord) → STT Deepgram → LLM → TTS ElevenLabs → playback aplay - Conversation continue : après chaque réponse, le robot réécoute automatiquement sans re-trigger - Grace period 3s + silence detection (RMS 200, timeout 2s) pour savoir quand l'utilisateur a fini de parler - Audio buffering : les chunks sont bufferisés côté robot-client jusqu'à ce que le backend confirme que le stream STT est prêt (évite de couper le premier mot) ### Wake word (OpenWakeWord) - Script Python long-lived avec PAUSE/RESUME/QUIT via stdin - Modèle chargé une seule fois au démarrage (pas de reload 8s à chaque cycle) - PAUSE ferme le stream PyAudio (libère le device pour arecord), RESUME le rouvre - stdin lu via `sys.stdin.readline()` (pas `for line in sys.stdin` qui bufferise) ### Auto-pairing - Robot-client : si pas de credentials → appelle `POST /api/pairing/request` → affiche code 6 chiffres en ASCII art sur HDMI → poll `GET /api/pairing/status/:requestId` toutes les 3s - Backend : Redis TTL 10min, `POST /api/pairing/confirm` (JWT required) associe le robot au home de l'utilisateur - Credentials persistées dans `~/.tipote/config.json` via LocalStore (path dynamique via `os.homedir()`) - App desktop Tauri v2 créée dans `apps/desktop/` (login → code 6 chiffres → succès) ### Infrastructure - Backend NestJS avec archi hexagonale (ports & adapters) - WebSocket socket.io entre robot-client et backend - Docker Compose (PostgreSQL + Redis) en dev - Robot-client TypeScript sur Raspberry Pi --- ## Bugs connus à fixer ### 1. Wake word crash en boucle (PRIORITÉ HAUTE) **Symptôme** : Le modèle charge OK, puis le process Python exit avec code 1 ~2s après. Boucle de restart infinie. **Cause probable** : Erreur à l'ouverture du stream audio PyAudio (device busy, mauvais index, ou erreur ALSA). Les messages d'erreur stderr étaient loggés en `debug` donc invisibles. **Fix appliqué** : Les messages stderr inconnus sont maintenant loggés en `warn`. Relancer et lire les logs pour voir l'erreur exacte. **Fichiers** : - `apps/robot-client/scripts/wake_word.py` - `apps/robot-client/src/services/wake-word.service.ts` (ligne ~113) ### 2. .env vs .env.dev loading **Symptôme** : `ROBOT_MODE` n'est pas set avant que dotenv charge, donc `.env` est toujours chargé au lieu de `.env.dev`. **Workaround** : Préfixer la commande avec `ROBOT_MODE=dev` ou éditer `.env` directement sur le Pi. --- ## Prochaines missions ### Court terme (sprint en cours) 1. **Fixer le crash wake word** — Lire les logs stderr (maintenant en `warn`), identifier l'erreur PyAudio, corriger 2. **Tester le pairing end-to-end avec l'app Tauri** — L'app est créée mais pas encore testée avec un vrai pairing flow 3. **Tester la persistence des credentials** — Vérifier qu'après reboot du Pi, le robot-client retrouve ses credentials dans `~/.tipote/config.json` et skip le pairing ### Moyen terme 4. **ESP32 + wake word embarqué** — Déléguer l'audio à l'ESP32 (I2S mic + speaker). Le wake word pourrait tourner sur l'ESP32 via un modèle TFLite léger ou rester sur le Pi 5. **Frontend Next.js** (`apps/frontend`) — Dashboard web pour gérer ses robots, voir les conversations, configurer les préférences 6. **Multi-robot / Multi-home** — Le backend supporte déjà le concept de `home`, mais le flow complet n'est pas testé 7. **OTA updates** — Mécanisme de mise à jour du robot-client sur le Pi (rsync pour le dev, mais il faudra un vrai système pour la prod) ### Long terme 8. **Personnalité configurable** — Chaque robot peut avoir un system prompt custom via l'app/dashboard 9. **Mémoire contextuelle** — Le robot se souvient des conversations passées (pgvector déjà dans le stack) 10. **Animations servo** — Synchroniser les mouvements du robot avec le TTS (lipsync, expressions) 11. **Mode offline** — Wake word + réponses basiques sans connexion cloud --- ## Structure du repo ``` apps/ ├── backend/ # NestJS — API REST + WebSocket + LLM/STT/TTS orchestration ├── robot-client/ # TypeScript — tourne sur le Raspberry Pi ├── desktop/ # Tauri v2 — app native de pairing (NEW) ├── frontend/ # Next.js — dashboard web (à venir) └── simulator/ # Simulateur (existant) docs/ # Architecture, features, data model, roadmap ``` ## Commandes utiles ```bash # Backend (sur le Mac) cd apps/backend && pnpm dev docker compose up -d # PostgreSQL + Redis # Robot-client (sur le Pi) cd ~/robot-client && npx tsx src/main.ts # ou avec mode dev explicite : ROBOT_MODE=dev npx tsx src/main.ts # Desktop app (sur le Mac) cd apps/desktop && pnpm install && pnpm dev # Rsync vers le Pi rsync -avz --exclude node_modules --exclude .git apps/robot-client/ pi@192.168.1.XX:~/robot-client/ ```