16. Périphériques & Infra

ECHO n'est pas un simple script, c'est un serveur complet, autonome et hautement sécurisé, pensé pour garantir la souveraineté absolue de vos données. L'infrastructure qui entoure le cœur cognitif assure trois missions fondamentales pour l'utilisateur final : la sécurité infranchissable, la gestion autonome des tâches de fond, et les capacités sensorielles de l'IA (voix et ouïe).

1. La Sécurité Intégrale (Identité et Pare-feu)

L'accès à votre intelligence artificielle est protégé par une architecture de défense multicouche. Le système intègre son propre gestionnaire d'identité : avant même de pouvoir accéder à l'interface, chaque connexion nécessite une authentification forte avec validation en deux étapes (code temporaire à usage unique). De plus, l'ensemble du système est placé derrière un bouclier de filtrage réseau qui analyse en temps réel toutes les requêtes entrantes et bloque instantanément les tentatives d'intrusion ou les comportements anormaux.

2. Maintenance Autonome et Téléchargements

Pour que l'expérience reste fluide et rassurante au fil du temps sans intervention de votre part, ECHO intègre un centre de contrôle interne fonctionnant en tâche de fond. Chaque nuit, il consolide les souvenirs récurrents, nettoie la mémoire morte, optimise les bases de données et effectue une sauvegarde complète pouvant être exportée automatiquement vers votre serveur personnel ou votre espace Cloud (Google Drive, OneDrive, Nextcloud). Il obéit à une sécurité stricte par défaut qui interdit tout nettoyage si une base est temporairement indisponible, et affiche en direct une barre de progression précise lors de chaque opération.

En parallèle, un service de rapatriement dédié s'occupe de collecter, d'indexer et de classer silencieusement les fichiers volumineux que l'IA serait amenée à télécharger lors de ses navigations web ou de ses automatisations, sans bloquer ni ralentir la conversation en cours.

3. L'Ouïe et la Parole (Passerelle Vocale Intégrée)

Afin que l'IA puisse interagir naturellement avec vous par la voix sans alourdir votre serveur avec des conteneurs dédiés gourmands en mémoire, ECHO intègre une passerelle vocale directement au cœur de son interface. Elle détecte automatiquement le format de vos enregistrements vocaux pour les transcrire avec précision via le modèle rapide ZEPHYR, et restitue les réponses en flux continu avec une voix synthétique naturelle au timbre feutré tout en adaptant automatiquement le style de réponse à l'oral.

⚙️ Dossier d'Ingénierie & Spécifications

1. Admin Manager Modulaire (20-docker-admin-manager/ v5.137)

Orchestrateur Flask (Port 3001, IP .20) structuré en 4 packages (core/, services/, routes/, templates/) autour du point d'entrée server.py et pilotant le cluster via /var/run/docker.sock (son compteur real_session_count cible exclusivement /users/<uid>/chats/<chat_id>/session.db en excluant les bases systèmes identity.db) :

  • Gouvernance SSoT Fail-Closed (webui.db::user) : La table user d'Open WebUI est l'unique source de vérité. Trois verrous cumulatifs (Wait-for-it post-sauvegarde vérifiant user et chat, API Safeguard sur /api/v1/users, et validation SQLite PRAGMA quick_check(1) == "ok" + présence de admin@echo.local) avortent toute purge et tout VACUUM en cas d'indisponibilité. Le verrou n8n_whitelist_complete suspend en outre /prune N8N et la GC Drop Zone si un session.db est illisible. La suppression d'un utilisateur (/action/auth/delete → purge_user_artifacts) réconcilie les 5 volumes de bout en bout, et la réinitialisation d'accès (/action/auth_reset/<user_id>) purge identity.db ainsi que /app/mcp_cache/<service>/<user_id>.
  • Consolidation Vectorielle Nocturne (services/memory_consolidation.py v5.137) : Regroupe par similarité cosinus (seuil 0.78, min_cluster_size=3) les souvenirs de niveau 1 - Trivial (memory_importance=1) d'un même utilisateur dans echo_meta_artifacts (requêtes Qdrant avec "exact": True et "with_vector": True), calcule leur centroïde L2-normalisé sans solliciter l'Embedding Worker ni Gemini, et promeut le souvenir consolidé au niveau 2 - Mineur.
  • Sauvegardes 5 Volumes, Télémétrie Temps Réel & Cloud Rclone : perform_backup_task archive en tar.xz les 5 volumes (echo-webui-data, echo-qdrant-data, echo-auth-data, echo-n8n-data, echo-mcp-cache). L'état MAINTENANCE_STATE (interrogé par /api/task_status et affiché dans #task-progress-card) suit en temps réel la compression tar -cJf via psutil.Process.io_counters().read_bytes, l'envoi SFTP via callback Paramiko (_sftp_cb et _sftp_mkdir_p) et le transfert Cloud Rclone via /proc/<pid>/fdinfo (_get_proc_file_offset). Le Séquenceur Nocturne (maintenance_backup.py v5.137) restitue un rapport unifié complet (archive_name, taille, durée, rétention locale, statut d'externalisation Cloud/NAS et bilan d'élagage). L'assistant /action/rclone/create écrit directement les profils INI via configparser dans /app/backend/data/rclone/rclone.conf (nettoyage \r\n des tokens JSON OAuth et chiffrement rclone obscure).

2. ECHO Auth Manager SSO & MFA (auth_server.py v6.21)

IdP FastAPI autonome (Port 8000, IP .24, exposé sous auth.${ECHO_DOMAIN}) adossé à auth.db (SQLite WAL). Il assure le hachage Argon2 des mots de passe et questions de sécurité, la validation TOTP (pyotp), et expose l'endpoint Forward Auth /api/verify (renvoyant HTTP 401 sur expiration pour déclencher la redirection propre) ainsi que la déconnexion globale /sso-logout (avec Clear-Site-Data: "cache" et invalidation de la session Open WebUI). La suppression d'un utilisateur déclenche une purge atomique sur toutes les bases SQLite et Qdrant.

3. Bouclier BunkerWeb WAF (bunkerweb-stack.yml v1.35)

Reverse Proxy adossé à MariaDB 11.4 LTS (--max-allowed-packet=128M). Les paramètres globaux (MULTISITE: "yes", DISABLE_DEFAULT_SERVER, AUTO_LETS_ENCRYPT, www.example.com_AUTO_LETS_ENCRYPT: "no", GUNICORN_TIMEOUT: "120") sont centralisés dans l'ancre YAML x-bw-config et ne doivent jamais être posés en labels sur les conteneurs dynamiques. Sur Open WebUI, il applique la résolution DNS dynamique Nginx (set $$upstream), le Smart Proxy Mock sur /api/version, l'Auto-Heal SPA par sub_filter sur /auth, USE_MODSECURITY=no et un Rate Limit assoupli (300r/s, burst 1000).

4. Pont Audio In-Process (echo_audio.py v1.4) & Logs Unifiés

  • STT Multimodal (POST /echo/v1/audio/transcriptions) : Inspecte les magic bytes du flux binaire (sniff_audio_mime_type : WebM/Matroska, WAV/RIFF, OGG, FLAC, MP3, MP4/M4A, plafond ECHO_AUDIO_MAX_UPLOAD_SIZE = 14 Mo) et invoque EchoGeminiClient.call sur MODEL_ZEPHYR (maxOutputTokens=8192, thinkingLevel="minimal", prompt USR_AUDIO_TRANSCRIBE).
  • TTS Streaming (POST /echo/v1/audio/speech) : Génère un flux audio/mpeg asynchrone via Microsoft Edge Read-Aloud (edge-tts), configuré par défaut sur la voix fr-FR-VivienneMultilingualNeural (ECHO_AUDIO_DEFAULT_TTS_SPEED = 1.0, ECHO_AUDIO_DEFAULT_TTS_PITCH = "-2Hz"). En mode appel vocal, task.voice.prompt_template injecte un événement AEC_evenement_systeme imposant à MODEL_ZEPHYR un style oral concis sans Markdown, listes, code ni emoji.
  • Logs unifiés & Sonde de Santé : Montage de logging.json (ISO 8601) et RateLimitHealthCheckFilter (1 log / 300 s sur HTTP 200 /health) sur l'ensemble des workers Python.

5. Download Broker (download_broker.py v1.8)

Démon asynchrone (IP .25) scrutant toutes les 3 s la drop-zone partagée /app/downloads/{uid}/{cid} (flux /browser/ et /n8n/{wf_id}/). Après vérification de stabilité (mtime ≥ 3.0s, exclusion des .part), il déplace atomiquement chaque fichier vers le Vault global (/users/{uid}/files/), crée un symlink dans le dossier du chat et l'inscrit dans echo_resources avec le statut pending_ingestion. Il purge également les répertoires des chats supprimés.

← 15. Déploiement & Infra    17. Inférence Distante →