5. High-Level Design
Cette section décrit l'architecture macroscopique d'ECHO v5. Le système est conçu comme une chaîne de traitement séquentielle et sécurisée, où la donnée transite à travers de multiples couches de souveraineté et d'isolation avant d'atteindre le grand modèle de langage (LLM).
Macro-Architecture Systémique (HLD)
L'infrastructure globale s'articule autour de cinq vecteurs de transmission majeurs, garantissant l'étanchéité entre l'interface utilisateur, la logique d'orchestration, et les capacités d'action distantes (Workers).
(WAF & Anti-Bot)"}} end subgraph INTERFACE ["🖥️ Couche Interface"] OWUI["Open WebUI
(Frontend HUD)"] end subgraph CORTEX ["🧠 Cerveau Cognitif (ECHO)"] direction TB F("Filtres Inlet
(Contexte & Compaction)") P("Echo Orchestrator
(Cortex & Suture)") F --> P end subgraph MEMORY ["🗄️ Persistance & Vectorisation"] RAG[("Base Vectorielle
(Qdrant)")] SQL[("Ombres Riches
(SQLite)")] end subgraph WORKERS ["🛠️ Workers Périphériques"] direction LR FASTAPI["Browser Worker
(FastAPI)"] N8N["N8N Worker
(Headless)"] MCP["MCP Broker"] end subgraph LLM ["☁️ Modèle de Langage"] GEMINI(("API Gemini
(HTTP/2 SSE)")) end U -->|1. Requête HTTPS| BW BW -->|2. Proxy Pass| OWUI OWUI -->|3. Payload Brut| F P -->|4. Suture & Audit| SQL P -->|5. Recherche Sémantique| RAG P -->|6. Délégation Asynchrone| FASTAPI P -->|6. Délégation Asynchrone| N8N P -->|7. Inférence & Outils| GEMINI classDef user fill:#0f172a,stroke:#3b82f6,color:#fff classDef waf fill:#7f1d1d,stroke:#ef4444,color:#fff classDef interface fill:#1e293b,stroke:#64748b,color:#fff classDef cortex fill:#1e1b4b,stroke:#8b5cf6,stroke-width:2px,color:#fff classDef memory fill:#422006,stroke:#f59e0b,color:#fff classDef workers fill:#064e3b,stroke:#10b981,color:#fff classDef llm fill:#4c1d95,stroke:#a855f7,color:#fff class U user class BW waf class OWUI interface class F,P cortex class RAG,SQL memory class FASTAPI,N8N,MCP workers class GEMINI llm
Écorché Structurel - Modules Python
Cette cartographie exhaustive représente les différents modules d'ECHO organisés par grands domaines de responsabilités. Chaque bloc regroupe les fonctions clés permettant au système d'opérer de manière autonome.
Concepts Structurants du Pipeline
⚔️ La Suture (Continuité Conversationnelle)
Nature : Mécanisme de reconstruction fidèle de l'historique.
Reconstruit l'historique complet de la session à partir des Ombres SQLite locales. Le Verrou de Version et le Verrou de Tour garantissent une reprise exacte au bit près tout en préservant le cache de préfixes du fournisseur Cloud. En cas d'édition manuelle d'un message, l'orchestrateur recalcule proprement la branche modifiée (Cold Recovery).
📡 L'AEC (Artéfacts Environnementaux et Contextuels)
Nature : Vecteurs proprioceptifs structurés en XML.
Informe le modèle en temps réel de son environnement d'exécution : directives système prioritaires (initialisation, mises à niveau, rappels d'alignement), identité cognitive, temporalité, localisation, contexte documentaire distillé, Checkpoint de continuité et événements système asynchrones.
🧱 Le Moulage (Smart Context RAG)
Nature : Pipeline d'ingestion documentaire sans saturation mémoire.
Au-delà de 32 Ko pour le texte ou 1 Mo pour le multimédia (et après conversion automatique des documents bureautiques en Markdown), le contenu est indexé dans la mémoire vectorielle de session et synthétisé sous forme d'aperçu structuré pour préserver l'attention du modèle.
📝 Le Draft (Brouillon Sémantique)
Nature : Enveloppe contextuelle préparée en amont de l'orchestrateur.
Assemble selon la hiérarchie stricte du PGCU les aperçus documentaires, les directives système ponctuelles, la requête utilisateur, les notifications d'événements système et les pièces jointes avant transmission au moteur d'inférence.
⛳ L'Ancre (Signature de Raisonnement)
Nature : Jeton cryptographique de continuité cognitive Gemini 3+.
Capturé et persisté localement à chaque tour de réflexion, il est restitué lors des appels d'outils successifs pour permettre au modèle de retrouver instantanément son état de raisonnement interne sans avoir à relire ses pensées brutes.
⚠ Distinct du Context Caching (cache implicite des activations clé/valeur côté Google).
Architecture Mémorielle Duale
ECHO opère deux collections vectorielles Qdrant physiquement isolées, vectorisées en 1024 dimensions par le modèle Harrier-OSS-v1-0.6B via le pont WebGPU du navigateur client ou le service d'embedding local. Aucune donnée ne quitte l'infrastructure.
🧠 Mémoire Organique à Long Terme
Portée : Par utilisateur — permanente et transverse à toutes les sessions.
Usage : Préférences personnelles (PACP), contraintes techniques, décisions structurelles et apprentissages méthodologiques (PRAC) gradués sur 5 niveaux d'importance (de 1 - Trivial dès la première observation jusqu'à 5 - Axiome sur injonction explicite ou invariant stratégique).
Priorisation Sémantique : Lors de la recherche, la pertinence thématique est pondérée par le niveau d'importance du souvenir afin qu'un Axiome prime systématiquement sur une observation Triviale.
Consolidation & Cycle de Vie : Fusion nocturne des observations récurrentes en souvenirs consolidés et élagage automatique selon l'ancienneté (de 30 jours pour un élément Trivial à 540 jours pour un Axiome).
⏱️ Mémoire Vectorisée de Session
Portée : Isolée par discussion (avec possibilité de recherche globale inter-sessions sur demande).
Usage : Indexation des fichiers volumineux, de l'historique conversationnel au fil de l'eau, des résultats de navigation web et des données intermédiaires d'analyse.
Cycle de Vie : Purgée automatiquement lors de la suppression de la discussion correspondante.
La Vallée de la Mort et la compensation RAG
Lorsque le contexte dépasse ~30 % de la fenêtre maximale, les informations des premiers tours deviennent progressivement moins accessibles au mécanisme d'attention. Les deux mémoires vectorielles constituent la réponse architecturale : la mémoire de session indexe proactivement les contenus volumineux et permet une lecture sémantique précise indépendante de la position dans l'historique, tandis que la mémoire organique restitue les préférences de l'utilisateur et l'expérience accumulée au fil des sessions précédentes.
Anatomie Détaillée d'une Requête (Le Chemin de la Donnée)
Ce diagramme de séquence retrace le cycle complet d'un tour de parole, des quatre phases distinctes : Préparation (Draft), Suture (Restauration), Inférence (Boucle outils) et Scellement.
Topologie Réseau (Cluster Docker)
💡 Lecture d'architecte
Ce schéma représente la topologie réelle du cluster Docker ECHO. Le trafic WAN est filtré
par BunkerWeb (WAF) si celui-ci est activé (optionnel, contrôlé via les scripts enable-bunkerweb.sh et disable-bunkerweb.sh).
En cas d'activation, BunkerWeb délègue l'authentification (SSO & MFA) au module ECHO Auth.
L'Arsenal (echo-browser-worker, echo-coding-worker, SearxNG) s'exécute sur un
sous-réseau Docker privé sans accès entrant. Les volumes SQLite garantissent la persistance
des données hors-conteneur. L'Admin Manager accède au Docker Daemon via
/var/run/docker.sock (socket Unix monté en volume).
(/echo/v1/audio)") SSH["🚇 SSH PKCE (:8020-8024)"] OWUI --> F --> P OWUI <--> AUD end subgraph DATA ["🗄️ ZONE 3 : PERSISTANCE & VECTORISATION"] direction LR SQL[("🗄️ SQLite WAL
(session.db & identity.db)")] QD[("🧠 Qdrant
(.103 :6333)")] EMB[("🔢 Embedding Worker
(.30 :7997)")] QD <--> EMB end subgraph SANDBOX ["🛠️ ZONE 4 : WORKERS ISOLÉS (echo-network & echo-sandbox)"] direction LR CW["🚀 Coding Worker
(.21 :5000 sandbox)"] BA["🌐 Browser Worker
(.22 :5002)"] MCP["🔌 MCP Broker
(.23 :8000)"] DL["⬇️ Download Broker
(.25 Daemon)"] N8N["⚙️ N8N Worker
(.26 :5003)"] SNG["🔍 SearXNG (.101 :8080)"] end subgraph MGMT ["⚙️ ZONE 5 & 6 : ADMIN (.20 :3001) & SORTIE CLOUD"] direction LR AM["📊 Admin Manager"] == "Socket" ==> DOCKER("🐋 Docker Daemon") GEMINI(("🌩️ Gemini / Code Assist
[HTTP/2 SSE]")) WWW(("🌍 Web Public
[HTTPS]")) end BW ==> OWUI BW -. "Admin" .-> AM U -. "Tunnel PKCE" .-> SSH P ==> SQL & QD P ==> CW & BA & MCP & N8N & SNG P & AUD == "HTTP/2" ==> GEMINI BA & N8N --> DL BA & SNG ==> WWW classDef node fill:#1e293b,stroke:#475569,stroke-width:2px,color:#f8fafc classDef db fill:#0f172a,stroke:#f59e0b,stroke-width:2px,color:#f8fafc classDef core fill:#172554,stroke:#60a5fa,stroke-width:2px,color:#f8fafc classDef tool fill:#064e3b,stroke:#34d399,stroke-width:2px,color:#f8fafc class U,BW,OWUI,AUTH,AM,DOCKER,SSH node class SQL,QD,EMB db class F,P,AUD core class BA,CW,MCP,N8N,SNG,DL tool
Schéma de Persistance (Ombres Riches)
ECHO conserve une mémoire inaltérable de chaque conversation sous forme d'Ombres Riches en mode SQLite WAL.
Ces empreintes contiennent les parts multimodales, le registre unifié des ressources et les signatures cognitives,
reliés par une chaîne de hachage de Merkle (suture_index) garantissant la continuité bit-perfect de la session.
⚙️ Dossier d'Ingénierie & Spécifications (Librairies Partagées)
1. Authentification, Quotas & Crédits Cloud (echo_auth.py, echo_pkce_server.py, echo_ssh_tunnel.py)
Gère le cycle OAuth2 headless via Authorization Code + PKCE (RFC 7636) sur tunnel SSH éphémère (ports 8020–8024), le rafraîchissement proactif des tokens à 55 minutes et le fallback sur clés AI Studio. Interroge de manière non-bloquante l'endpoint :retrieveUserQuotaSummary (cache google_quota_summary) pour extraire les quotas glissants 5 heures (quota_5h_fraction, quota_5h_reset, quota_5h_disabled) et Hebdomadaire (quota_weekly_fraction, quota_weekly_reset), en gérant la convention d'omission Protobuf v3 (remainingFraction=0.0 par défaut lorsque le champ est absent) au profit de la Context Gauge.
2. Moteur de Protocole, Suture Bit-Perfect & Compaction (echo_protocol.py, echo_core.py & echo_aec.py)
- Suture, Signatures & Drainage AEC :
Orchestrator.prepare_context()reconstruit l'historique depuismessage_shadows(dans/users/{uid}/chats/{cid}/session.db) sous contrôle du Verrou de Version (message_id + updated_at) et du Verrou de Tour (turn_origin_model), extrait la dernièrethoughtSignaturedecognitive_signaturespar tri déterministe (ORDER BY updated_at DESC LIMIT 1, rattachée au premierfunctionCall), assemble le brouillonmetadata._echo_user_parts_draftet draine atomiquement les directives et événements XML (<artifact id="AEC_...">) viaEchoAEC.drain_pending_directives(). - Traduction, Moulage & Pondération RAG : Convertit les identifiants abstraits ECHO vers le backend actif (AI Studio ou Code Assist) et normalise les schémas d'outils en
camelCase(convert_owui_tools). Le pipelineecho_ingestion.pyconvertit les documents viaMarkItDown, distille viaMODEL_DISTILLATIONdans<artifact id="AEC_smart_context">et vectorise dansecho_session_ragouecho_meta_artifacts(http://echo-embedding:7997/v1). Le reranking deecho_meta_artifactsappliquescore_pondéré = cos_score × MEMORY_IMPORTANCE_WEIGHTS[lvl](où un Axiome niveau 5 à1.70surclasse un Trivial niveau 1 à0.55). - Déballage Multimodal & FIFO Destructif :
unbox_tool_outputetwrap_tool_outputextraient les médiasecho_tool_multipartset purgent les événements transitoiresaec_event/aec_directivesans toucher aux ressources persistantes. - Compactage Contextuel In-Place (
EchoCompactionEngine) : Déclenché automatiquement (seuil45% → 25%deECHO_MAX_CONTEXT_SIZEviacontext_compaction_filter.py, Priorité 15) ou manuellement (compact_context_action.py), le moteur opère une consolidation téléscopique à encombrement borné (MODEL_APOLLO, budget32768tokens) scellée dansecho_settings(clécompaction_state). Le filtre rejoue de manière déterministe la balise<artifact id="AEC_context_checkpoint">sur le message pivot, tandis queecho_orchestrator.pyre-scelle l'ombre dansmessage_shadowsaprès nettoyage de la balise (strip_checkpoint_tag) pour préserver la pureté de la Suture.
3. Gestionnaire de Compétences (echo_skills.py)
Extrait les métadonnées sémantiques des fichiers de compétences dans l'espace utilisateur global et alimente dynamiquement les outils search_skill, read_skill et forge_skill.
4. Algorithmes de Hachage Merkle (echo_state_manager.py)
1. Invariant Hash : SHA-256(role + content_sorted + tool_io). Identité pure du tour, indépendante de sa position dans l'historique.
2. Cumulative Hash : SHA-256(invariant_hash + parent_cumulative_hash). ADN de la conversation. Tout changement dans l'historique invalide les hashes suivants.
✅ Exactitude - Cold Recovery
Le Verrou de Version compare le couple (message_id, updated_at) lors de la Suture. Si un message est modifié manuellement dans Open WebUI, l'Ombre SQLite correspondante est écartée, les événements postérieurs au t_pivot sont purgés via EchoAEC.purge_orphaned_events(), et le Pipe bascule en Cold Recovery tout en préservant la continuité de la session.
5. Pont Audio In-Process (echo_audio.py v1.4)
Injecté de manière idempotente en position 0 du routeur FastAPI d'Open WebUI via register_echo_audio_routes() (pour devancer le catch-all SPAStaticFiles), ce module expose les endpoints compatibles OpenAI sous /echo/v1/audio : transcription STT (/transcriptions) relayée vers Gemini MODEL_ZEPHYR (maxOutputTokens=8192, thinkingLevel="minimal", plafond 14 Mo, détection binaire des conteneurs WebM/WAV/OGG/FLAC/MP3/MP4 par sniff_audio_mime_type) et synthèse vocale TTS en streaming audio/mpeg (/speech) via Microsoft Edge Read-Aloud (edge-tts, voix fr-FR-VivienneMultilingualNeural, vitesse nominale 1.0, pitch feutré -2Hz).