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 tableuserd'Open WebUI est l'unique source de vérité. Trois verrous cumulatifs (Wait-for-it post-sauvegarde vérifiantuseretchat, API Safeguard sur/api/v1/users, et validation SQLitePRAGMA quick_check(1) == "ok"+ présence deadmin@echo.local) avortent toute purge et toutVACUUMen cas d'indisponibilité. Le verroun8n_whitelist_completesuspend en outre/pruneN8N et la GC Drop Zone si unsession.dbest 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>) purgeidentity.dbainsi que/app/mcp_cache/<service>/<user_id>. - Consolidation Vectorielle Nocturne (
services/memory_consolidation.pyv5.137) : Regroupe par similarité cosinus (seuil0.78,min_cluster_size=3) les souvenirs de niveau1 - Trivial(memory_importance=1) d'un même utilisateur dansecho_meta_artifacts(requêtes Qdrant avec"exact": Trueet"with_vector": True), calcule leur centroïde L2-normalisé sans solliciter l'Embedding Worker ni Gemini, et promeut le souvenir consolidé au niveau2 - Mineur. - Sauvegardes 5 Volumes, Télémétrie Temps Réel & Cloud Rclone :
perform_backup_taskarchive entar.xzles 5 volumes (echo-webui-data,echo-qdrant-data,echo-auth-data,echo-n8n-data,echo-mcp-cache). L'étatMAINTENANCE_STATE(interrogé par/api/task_statuset affiché dans#task-progress-card) suit en temps réel la compressiontar -cJfviapsutil.Process.io_counters().read_bytes, l'envoi SFTP via callback Paramiko (_sftp_cbet_sftp_mkdir_p) et le transfert Cloud Rclone via/proc/<pid>/fdinfo(_get_proc_file_offset). Le Séquenceur Nocturne (maintenance_backup.pyv5.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 viaconfigparserdans/app/backend/data/rclone/rclone.conf(nettoyage\r\ndes tokens JSON OAuth et chiffrementrclone 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, plafondECHO_AUDIO_MAX_UPLOAD_SIZE = 14 Mo) et invoqueEchoGeminiClient.callsurMODEL_ZEPHYR(maxOutputTokens=8192,thinkingLevel="minimal", promptUSR_AUDIO_TRANSCRIBE). - TTS Streaming (
POST /echo/v1/audio/speech) : Génère un fluxaudio/mpegasynchrone via Microsoft Edge Read-Aloud (edge-tts), configuré par défaut sur la voixfr-FR-VivienneMultilingualNeural(ECHO_AUDIO_DEFAULT_TTS_SPEED = 1.0,ECHO_AUDIO_DEFAULT_TTS_PITCH = "-2Hz"). En mode appel vocal,task.voice.prompt_templateinjecte un événementAEC_evenement_systemeimposant àMODEL_ZEPHYRun style oral concis sans Markdown, listes, code ni emoji. - Logs unifiés & Sonde de Santé : Montage de
logging.json(ISO 8601) etRateLimitHealthCheckFilter(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.