ti-pote/docs/features.md
ordinarthur 4ac7bd16d2 add doc
2026-04-01 17:10:18 +02:00

14 KiB

Fonctionnalités

Vue d'ensemble

Ce document détaille l'ensemble des fonctionnalités prévues pour Ti-Pote, organisées par domaine. Chaque feature inclut une description, les cas d'usage principaux, et les dépendances techniques.


1. Conversation vocale

Description

Interaction vocale bidirectionnelle fluide avec Ti-Pote. L'utilisateur parle naturellement, Ti-Pote comprend et répond avec une voix synthétique de qualité.

Cas d'usage

  • L'utilisateur dit "Hey Ti-Pote, quel temps fait-il demain ?" → Ti-Pote répond vocalement avec la météo.
  • Conversation à plusieurs tours : "Rappelle-moi ce rendez-vous" → "Lequel ?" → "Celui avec Marie" → "Ton rendez-vous avec Marie est jeudi à 14h."
  • L'utilisateur interrompt Ti-Pote pendant qu'il parle → Ti-Pote s'arrête et écoute (barge-in).

Composants techniques

  • Wake word : Détection locale sur le robot via OpenWakeWord ou Porcupine. Mot par défaut : "Hey Ti-Pote". Configurable via l'app.
  • VAD (Voice Activity Detection) : Détection de fin de parole pour savoir quand l'utilisateur a fini de parler. Silero VAD ou WebRTC VAD.
  • STT : Transcription via Deepgram (streaming, faible latence) ou Whisper (fallback).
  • LLM : Modèle configurable (GPT-4, Claude, Mistral…). Le system prompt définit la personnalité de Ti-Pote.
  • TTS : Synthèse vocale via ElevenLabs (qualité), Azure TTS, ou Google TTS. Streaming pour réduire la latence perçue.

Latence cible

Moins de 1.5 secondes entre la fin de la phrase de l'utilisateur et le début de la réponse audio de Ti-Pote.


2. Function calling (actions concrètes)

Description

Ti-Pote peut exécuter des actions en réponse aux demandes de l'utilisateur. Le LLM décide quelle function appeler en fonction du contexte de la conversation.

Architecture du function calling

Le core maintient un registre de tools (functions) disponibles. Chaque tool est défini avec un nom, une description, et un schéma de paramètres (JSON Schema). Le LLM reçoit ces définitions dans son contexte et peut décider d'en appeler une.

// Exemple de définition de tool
const calendarTools = [
  {
    name: 'create_calendar_event',
    description: 'Crée un événement dans le calendrier de l\'utilisateur',
    parameters: {
      type: 'object',
      properties: {
        title: { type: 'string', description: 'Titre de l\'événement' },
        start: { type: 'string', description: 'Date/heure de début (ISO 8601)' },
        end: { type: 'string', description: 'Date/heure de fin (ISO 8601)' },
        description: { type: 'string', description: 'Description optionnelle' },
      },
      required: ['title', 'start', 'end'],
    },
  },
];

Le flux complet : l'utilisateur demande quelque chose → STT transcrit → le LLM analyse et retourne un function call → le core exécute la function → le résultat est renvoyé au LLM → le LLM formule une réponse naturelle → TTS → audio.


3. Agenda / Calendrier

Description

Gestion complète du calendrier via la voix. Ti-Pote peut créer, modifier, supprimer et consulter des événements.

Cas d'usage

  • "Mets un rendez-vous demain à 15h avec le dentiste"
  • "Qu'est-ce que j'ai de prévu cette semaine ?"
  • "Décale mon rendez-vous de jeudi à vendredi"
  • "Supprime le rendez-vous avec Pierre"
  • "Quand est-ce que je suis libre mardi après-midi ?"

Intégrations

  • Google Calendar (MVP) — via OAuth2 et l'API Google Calendar v3
  • Apple Calendar (futur) — via CalDAV
  • Outlook / O365 (futur) — via Microsoft Graph API

Functions exposées au LLM

  • create_calendar_event — Créer un événement
  • list_calendar_events — Lister les événements sur une période
  • update_calendar_event — Modifier un événement existant
  • delete_calendar_event — Supprimer un événement
  • find_free_slots — Trouver des créneaux libres

4. Emails et messagerie

Description

Envoi et consultation d'emails par la voix. À terme, intégration avec WhatsApp et d'autres messageries.

Cas d'usage

  • "Envoie un email à Marie pour confirmer le dîner de samedi"
  • "Lis-moi mes emails non lus"
  • "Réponds à l'email de Pierre en disant que je suis d'accord"
  • "Envoie un WhatsApp à Maman pour dire que j'arrive dans 20 minutes"

Intégrations

  • SMTP/IMAP (MVP) — Envoi et lecture d'emails
  • Gmail API (MVP) — Alternative à IMAP, plus riche
  • WhatsApp Business API (futur) — Envoi de messages
  • Telegram Bot API (futur) — Alternative plus simple à WhatsApp

Functions exposées au LLM

  • send_email — Envoyer un email
  • list_emails — Lister les emails récents / non lus
  • read_email — Lire le contenu d'un email spécifique
  • reply_email — Répondre à un email
  • send_message — Envoyer un message (WhatsApp, Telegram…)

5. Minuteurs et alarmes

Description

Gestion de minuteurs (countdown) et d'alarmes (heure fixe) par la voix. Le robot peut jouer un son ou annoncer vocalement l'expiration.

Cas d'usage

  • "Mets un minuteur de 10 minutes pour les pâtes"
  • "Réveille-moi à 7h demain matin"
  • "Combien de temps reste sur mon minuteur ?"
  • "Annule le minuteur"
  • "Mets une alarme tous les jours à 8h"

Implémentation

Les timers utilisent Redis avec des TTL et les keyspace notifications pour détecter l'expiration. Les alarmes récurrentes sont gérées via un scheduler (cron-like) dans le core.

Functions exposées au LLM

  • set_timer — Créer un minuteur (durée)
  • set_alarm — Créer une alarme (heure fixe, optionnellement récurrente)
  • list_timers — Lister les timers/alarmes actifs
  • cancel_timer — Annuler un timer ou une alarme
  • get_timer_remaining — Temps restant sur un timer

6. Recherche web

Description

Ti-Pote peut chercher des informations sur internet à la demande de l'utilisateur et résumer les résultats.

Cas d'usage

  • "Cherche la recette de la tarte tatin"
  • "C'est quoi le score du match d'hier ?"
  • "Trouve-moi un vol Paris-Lisbonne pour le weekend prochain"
  • "Quelle est la capitale du Burkina Faso ?"

Implémentation

Utilisation d'une API de recherche (SearXNG auto-hébergé pour la privacy, ou Brave Search API, ou Google Custom Search). Le core récupère les résultats, peut extraire le contenu d'une page si nécessaire, et envoie un résumé au LLM pour formulation de la réponse.

Functions exposées au LLM

  • web_search — Effectuer une recherche
  • read_webpage — Extraire le contenu d'une URL spécifique
  • get_weather — Météo (API dédiée, type OpenWeatherMap)
  • get_news — Actualités récentes

7. Reconnaissance visuelle

Description

Ti-Pote peut "voir" via sa caméra et répondre à des questions sur ce qu'il observe. Le traitement est fait côté cloud (le robot streame l'image, le core analyse).

Cas d'usage

  • "Qu'est-ce que tu vois devant toi ?"
  • "Est-ce que tu reconnais cette personne ?" (reconnaissance faciale optionnelle)
  • "Lis ce qui est écrit sur ce papier" (OCR)
  • "C'est quoi cette plante ?"

Implémentation

Le robot capture une image (ou un court flux vidéo) et l'envoie au core. Le core utilise un modèle de vision (GPT-4 Vision, Claude Vision, ou un modèle dédié) pour analyser l'image. Pour la reconnaissance faciale, un modèle spécifique type face-api.js ou un service cloud.

Functions exposées au LLM

  • capture_image — Demander au robot de prendre une photo
  • analyze_image — Analyser une image avec un modèle de vision
  • recognize_face — Identifier une personne connue
  • read_text_from_image — OCR sur une image

8. Mobilité (module base mobile)

Description

Si le robot est équipé du module de base mobile, il peut se déplacer dans l'espace. Commandes vocales simples pour le diriger.

Cas d'usage

  • "Viens ici"
  • "Va dans la cuisine"
  • "Tourne-toi vers moi"
  • "Suis-moi"

Implémentation

Le core envoie des commandes de mouvement au robot via WebSocket. Le robot exécute localement les commandes moteur. La navigation avancée (cartographie, évitement d'obstacles) nécessiterait du traitement local plus poussé — à voir en phase ultérieure.

Functions exposées au LLM

  • move_robot — Déplacer le robot (direction, distance)
  • rotate_robot — Tourner le robot
  • stop_robot — Arrêter tout mouvement
  • go_to_base — Retourner à la station de charge

9. Notifications proactives

Description

Ti-Pote ne se contente pas de répondre — il peut initier des interactions pour alerter l'utilisateur.

Cas d'usage

  • Rappel d'un rendez-vous 15 minutes avant
  • Alerte météo (pluie prévue, prends ton parapluie)
  • Résumé du matin (agenda du jour, météo, emails importants)
  • Notification d'un email urgent
  • Timer expiré

Implémentation

Un scheduler dans le core vérifie périodiquement les événements à venir, les conditions météo, les emails entrants, etc. Quand une notification est pertinente, il l'envoie au robot via WebSocket. Le robot joue un son d'attention puis annonce vocalement la notification.

L'utilisateur peut configurer dans l'app quelles notifications il veut recevoir et à quels moments (ne pas déranger la nuit, par exemple).


10. Mémoire conversationnelle

Description

Ti-Pote se souvient des conversations passées et des préférences de l'utilisateur. La relation devient plus naturelle avec le temps.

Voir memory-system.md pour l'architecture technique complète.

Cas d'usage

  • "Tu te souviens du restaurant dont on avait parlé ?" → Ti-Pote retrouve la conversation.
  • "Commande la même pizza que la dernière fois" → Ti-Pote sait que c'était une quatre fromages.
  • Ti-Pote sait que l'utilisateur prend son café à 8h et peut proposer de lancer la machine.

11. Interface de configuration (App Web / Mobile)

Description

Une application web (et mobile à terme) pour configurer Ti-Pote et gérer son compte.

Fonctionnalités de l'app

  • Gestion du compte : inscription, connexion, profil
  • Gestion des robots : ajouter/supprimer un robot, nommer, configurer
  • Connexion des services : lier Google Calendar, compte mail, WhatsApp…
  • Configuration IA : choix du modèle LLM, de la voix TTS, du provider STT
  • Wake word : choisir le mot d'activation (liste prédéfinie pour le MVP, custom plus tard)
  • Mémoire : consulter ce que Ti-Pote sait, éditer ou supprimer des souvenirs
  • Notifications : configurer les alertes, le mode ne pas déranger
  • Historique : consulter les conversations passées
  • Modules : activer/désactiver les modules physiques (caméra, base mobile…)

Stack

  • React / Next.js pour le web
  • React Native (ou équivalent) pour le mobile à terme
  • Servi par le core NestJS ou déployé séparément en statique

12. Domotique (contrôle de la maison)

Description

Ti-Pote peut contrôler les appareils domotiques de la maison par la voix : lumières, thermostats, volets, media players, et tout appareil connecté via les écosystèmes supportés. Le contrôle est exécuté localement depuis le robot (pas via le cloud) pour la latence et la résilience.

Cas d'usage

  • "Allume la lumière du salon"
  • "Mets le salon en ambiance cinéma"
  • "Quelle température il fait dans la chambre ?"
  • "Monte le chauffage à 22 degrés"
  • "Ferme les volets"
  • "Active la scène bonne nuit"

Écosystèmes supportés

  • Philips Hue — contrôle direct via l'API REST locale du Hue Bridge
  • Home Assistant — accès à tous les appareils gérés par HA via son WebSocket API
  • MQTT — support Zigbee2MQTT, Tasmota, et tout appareil publiant sur MQTT
  • Futurs : Matter/Thread, Apple HomeKit, Tuya, KNX

Architecture

Chaque écosystème est encapsulé dans un bridge avec une interface commune (IAutomationBridge). Un AutomationManager orchestre les bridges et expose une API unifiée. La découverte des hubs se fait par mDNS.

Voir home-automation.md pour le détail complet.

Functions exposées au LLM

  • list_smart_devices — Lister les appareils disponibles (par pièce, par type)
  • control_device — Contrôler un appareil (on/off, brightness, color, temperature…)
  • get_device_state — Lire l'état d'un appareil
  • execute_scene — Activer une scène prédéfinie
  • get_sensor_value — Lire un capteur (température, humidité, mouvement…)

13. Provisioning WiFi et setup initial

Description

Le robot doit pouvoir être configuré sur n'importe quel réseau WiFi par un utilisateur non-technique. Deux mécanismes complémentaires sont prévus.

Cas d'usage

  • Premier démarrage du robot : l'utilisateur le connecte à son WiFi via l'app mobile (BLE) ou via le captive portal (AP mode)
  • Changement de réseau WiFi (déménagement, nouveau routeur)
  • Reset réseau (bouton physique sur le robot)

Méthode principale : BLE Provisioning

L'app Ti-Pote (web/mobile) scanne les robots en BLE, envoie les credentials WiFi. Le robot se connecte et confirme. L'utilisateur n'a pas besoin de changer de réseau sur son téléphone.

Méthode fallback : AP Mode + Captive Portal

Le robot crée un hotspot WiFi (Ti-Pote-XXXX). L'utilisateur s'y connecte, un portail web s'ouvre pour choisir le réseau et entrer le mot de passe. Le robot se connecte et désactive le hotspot.

Implémentation

  • BLE : librairie noble (npm) sur le Pi Zero 2 W
  • AP mode : hostapd + dnsmasq + serveur HTTP local (Express/Fastify)
  • Voir robot-client.md pour le détail du flux

14. Mode offline dégradé

Description

Si le robot perd la connexion internet ou que le core est injoignable, certaines fonctionnalités de base restent disponibles localement.

Fonctionnalités offline

  • Timers et alarmes (gérés localement)
  • Heure et date
  • Commandes domotiques basiques (allumer/éteindre — via les bridges locaux, pas besoin du cloud)
  • Commandes de base pré-enregistrées
  • Feedback audio (sons, bips) pour confirmer les actions

Implémentation

Le firmware du robot embarque un petit ensemble de commandes reconnues localement (via un modèle de reconnaissance de commandes léger type TensorFlow Lite). Pas de conversation complète, juste des commandes utilitaires.