7. L'Arsenal des Outils
Un modèle de langage, sans accès au monde réel, est confiné à ses données d'entraînement. L'Arsenal rompt cet enfermement : il fournit au Pipe les capacités exécutives nécessaires pour naviguer sur le Web, exécuter du code Python de manière isolée, gérer des fichiers, lire des documents, mémoriser des informations et produire des interfaces visuelles riches.
💡 Comment fonctionne un outil ECHO ?
Lorsque Gemini décide d'utiliser un outil, il génère un Tool Call : un objet JSON décrivant le nom de la fonction et ses arguments. Le Pipe intercepte ce Tool Call, exécute la fonction Python correspondante (ou appelle le micro-service Docker via son API REST interne), puis retourne la réponse à Gemini sous forme de Tool Response. Gemini intègre ce résultat dans sa génération suivante.
Principes directeurs
- Souveraineté des données : les données traitées par l'Arsenal ne quittent jamais l'infrastructure ECHO, sauf pour les appels API chiffrés en HTTPS (Gemini, Web).
- Multimodalité native : chaque outil peut retourner du texte, des images, des PDFs et des métadonnées de fichiers dans un seul flux structuré.
-
Traçabilité : chaque appel d'outil est journalisé dans la table SQLite
tool_journal, lié aucumulative_hashdu tour courant. -
Isolation utilisateur : toutes les opérations sur l'Espace Personnel
sont filtrées par
user_id. Un utilisateur ne peut jamais accéder aux fichiers d'un autre.
Le Protocole Multipart (wrap_tool_output)
La fonction wrap_tool_output() (echo_utils.py) est le point
d'entrée unique pour toute réponse d'outil. Elle construit un dictionnaire standardisé
que le Pipe sait déconstruire pour alimenter le contexte Gemini.
| Paramètre | Type | Comportement |
|---|---|---|
text |
Chaîne Markdown (obligatoire) | Injecte la réponse principale sous forme de functionResponse dans le contexte Gemini. Si nouveaux_fichiers est fourni, leurs métadonnées sont appendées à text sous forme d'un bloc ```json:nouveaux_artefacts. |
status |
Dict optionnel | Défaut {"status": "success"}. Propagé tel quel dans le dictionnaire de sortie. Interprété par le Pipe pour le reporting HUD. |
echo_tool_multiparts |
Liste de dicts Gemini (optionnel) | Parts Gemini natives (éléments inlineData avec mime_type + data en base64, ou text). Transmis directement au Pipe pour être injectés dans le functionResponse multipart. Permet de retourner des images, des PDFs ou du HTML en plus du texte. |
nouveaux_fichiers |
Liste de dicts métadonnées (optionnel) | Métadonnées des artefacts produits (ex : captures d'écran, fichiers générés). Elles sont sérialisées en JSON et appendées au champ text dans un bloc ```json:nouveaux_artefacts. Le Pipe les extrait pour mettre à jour le Registre AEC. |
Le Système Vault (Espace Personnel)
Chaque utilisateur dispose d'un espace de stockage persistant et isolé :
/app/backend/data/users/{user_id}/files/. Cet espace est le Vault.
-
Indexation : chaque fichier reçoit un
file_idunique au formatU_{uid}_C_{cid}_T_{timestamp}, garantissant l'unicité par utilisateur, par session et par instant. -
Persistance : les artefacts produits par les outils (captures d'écran,
logs, fichiers générés) sont automatiquement scellés dans le Vault après chaque tour,
en tant qu'entrées dans
processed_files. -
Réutilisation : si un fichier est référencé dans une session ultérieure,
le Filtre le reconnaît via son
file_idet transmet uniquement la référence, sans ré-uploader le contenu binaire.
Les huit familles d'outils
📋 Planification Stratégique
Construction, modification et gestion de plans d'action via un agent planificateur LLM (cascade PRO→FLASH→LITE). Plans persistés dans le Vault en Markdown et enregistrés dans un registre SQLite par chat.
Source : 12-owui-tools/strategic_planner.py
🌐 Web Intelligence
Navigation autonome Chromium (Playwright), cartographie du DOM, captures d'écran, extraction de contenu et recherche via SearxNG souverain.
Source : 12-owui-tools/navigation_engine_tool.py
🔌 Client API Universel
Client HTTP avec protection SSRF (Server-Side Request Forgery) pour requêter des APIs externes en toute sécurité, formatant les payloads JSON proprement via orjson.
Source : 12-owui-tools/api_client.py
📂 Explorateur de l'Espace Personnel
Analyse de fichiers locaux, multimodalité (image, PDF, audio), indexation sémantique et gestion des métadonnées du Vault.
Source : 12-owui-tools/file_content_explorer.py
🧠 Mémoire Organique & Éphémère
Architecture mémorielle scindée en deux espaces distincts. La Mémoire Organique à long terme
(save_memory, search_memory, forget_memory, list_memory_topics) stockée définitivement, et le
RAG Éphémère (save_session_context, search_session_context) servant
d'espace de travail temporaire confiné à la session courante.
Source : 12-owui-tools/memory_and_rag_tool.py
⏱️ Jauge de Contexte
Lecture en temps réel de l'utilisation du contexte (tokens prompt/candidats) via la base context_stats SQLite. Utilisé pour évaluer l'approche de la limite de mémoire de travail de la session.
Source : 12-owui-tools/context_gauge.py
🐍 Exécution & Pilotage
Sandbox Python isolée (Docker Python Worker), exécution de code arbitraire avec support des bibliothèques scientifiques, journalisation des résultats.
Source : 12-owui-tools/python_code_executor.py
🎮 Actions UI (Cockpits)
Boutons de contrôle manuel et interfaces riches (HUDs) injectés dans l'UI Open WebUI : Cockpit de purge sélective (Mémoire long terme), Sub-Agent Monitor (visualisation arborescente des threads cognitifs), Reset Auth, Replay Web.
Source : 13-owui-actions/
🎨 Visual Intelligence
Génération d'interfaces visuelles dynamiques riches : Mindmaps (Markmap), graphes (Mermaid, ECharts), cartes géographiques (Google Maps), images premium.
Source : 12-owui-tools/universal_visual_generator.py
🧠 Agents Cognitifs (Conseil d'Experts)
Consultation d'experts persistants par rôle (consult_expert_consultant),
Table Ronde Delphi (consult_council — N experts en
tours parallélisés avec thoughtSignatures, synthèse par modèle dédié),
forge et gestion des Skills (forge_skill, list_skills),
Sous-agent stateful (delegate_to_subagent dans
delegate_tool.py — remplace delegate_reasoning v5.14).
Sources : 12-owui-tools/cognitive_agents.py,
12-owui-tools/delegate_tool.py
🗺️ Maps Grounding
Recherche géographique avec rendu interactif Google Maps natif via
l'outil googleMaps de l'API Gemini (grounding natif). Route sur
MODEL_LITE via call_cascade() avec
THINKING_LEVEL_TOOLS (MINIMAL).
Contexte géographique optionnel (latitude,
longitude).
Source : 12-owui-tools/gemini_maps_grounding.py
📝 ECHO Codex (Éditeur de Code)
Éditeur Monaco multi-langage avec Git intégré (dulwich, Python pur). Fonctions
Tool Call de contrôle complet (CRUD, search, git history/restore, rename). Action HUD draggable avec
panneau de prévisualisation WYSIWYG, édition AI assistée (cascade Gemini), diff accept/reject et
navigation historique temporelle. Propriéception via registre_codex.
Sources : 12-owui-tools/echo_codex_tool.py,
13-owui-actions/echo_codex_action.py
✅ Conformité au Protocole Multipart
Tous les outils de l'Arsenal retournent leurs résultats via wrap_tool_output()
et garantissent l'isolation des données entre utilisateurs (filtrage systématique par
user_id). Les appels d'outils et leurs sorties sont journalisés dans
tool_journal (SQLite), lié au cumulative_hash du tour courant.