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

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ètreTypeComportement
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.

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

Explorer ➔

🌐 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

Explorer ➔

🔌 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

Explorer ➔

🧠 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

Explorer →

⏱️ 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

Explorer ➔

🎮 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/

Explorer ➔

🎨 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

Explorer ➔

🧠 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

Agents →  | Delegate Sub-Agent →

🗺️ 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

Explorer →

✅ 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.

L'utilisation de ces outils est guidée par les directives fondamentales du système. Passer au Kernel (System Prompt) ➔