Assistant IA 100% local. Multi-agents. Extensible.
Chaque agent est responsable d'un domaine précis. L'orchestrateur route chaque requête vers le bon agent selon l'intention détectée. Survolez pour explorer.
Génération et debug de code multi-langages. Python, C, JS et plus.
models/ai_agents.py · CodeAgent
Recherche internet temps réel via DuckDuckGo. Fact-checking et résumés.
models/ai_agents.py · WebAgent
Analyse de données et extraction d'insights sur les corpus ingérés.
models/ai_agents.py · AnalystAgent
Rédaction et contenu créatif. Adapte le ton et le format à la demande.
models/ai_agents.py · CreativeAgent
Détection et correction d'erreurs. Analyse de traces et suggestions de fix.
models/ai_agents.py · DebugAgent
Découpe les projets complexes en étapes actionnables et séquencées.
models/ai_agents.py · PlannerAgent
Audit de sécurité et détection de vulnérabilités dans le code.
models/ai_agents.py · SecurityAgent
Optimisation et performance. Profiling, refactor, réduction de coût.
models/ai_agents.py · OptimizerAgent
Data Science et Machine Learning. Pipelines ML, features, évaluation.
models/ai_agents.py · DataScienceAgent
Tout tourne sur Ollama en local. Aucune donnée ne sort de la machine. Adapté aux contextes sensibles où le cloud n'est pas une option.
ChromaDB stocke conversations et documents en embeddings. Recherche sémantique globale sur tout l'historique et panneau de gestion mémoire pour voir, éditer et supprimer chaque fait mémorisé.
Ingère PDF, DOCX, Excel. Normalise, chunk, indexe. Prêt pour RAG sur n'importe quelle base documentaire.
Le protocole Model Context Protocol permet de brancher de nouveaux outils (bases SQL, APIs, file systems) sans toucher au cœur.
Text-to-image local via ComfyUI / diffusers, installé automatiquement au 1er usage. Détection multi-GPU (NVIDIA, AMD, Apple Silicon, Intel Arc) avec fallback CPU, et sync des images vers le mobile en chiffré.
Les commandes slash (/code, /résume, /traduis) déploient des prompts d'expert réutilisables. @codebase attache un projet entier en contexte persistant. Palette de commandes via Ctrl+K.
Le HTML / CSS / SVG généré se rend en direct à côté du chat via le moteur Edge. Édition et régénération des messages avec historique de versions, et citations web cliquables.
Planification d'agents et de workflows (quotidien, hebdo, cron). Exécution en arrière-plan même app fermée via le Planificateur de tâches Windows, avec notifications bureau en fin de tâche.
Les paramètres et seuils réels du projet, extraits de la doc et de config.yaml.
Vue condensée des modules clés. Chaque dossier porte une responsabilité unique.
my_ai/ ├─ core/ # moteur · orchestrateurs · API · MCP · scheduler │ ├─ ai_engine.py # point d'entrée intelligence │ ├─ chat_orchestrator.py # boucle ReAct + Plan & Execute · scratchpad XML │ ├─ agent_orchestrator.py # page Agents · historiques séparés │ ├─ api_server.py # FastAPI · REST │ ├─ mcp_client.py # Model Context Protocol · stdio │ ├─ conversation_search.py # recherche sémantique globale cross-conversations │ ├─ folder_indexer.py # indexeur incrémental @codebase · lié au workspace │ ├─ memory_store.py # CRUD unifié mémoire · faits + vecteurs │ ├─ prompt_library.py # slash commands · expansion {arguments} │ ├─ scheduler.py # tâches planifiées récurrentes (cron) │ ├─ scheduler_runner.py # runner headless · Planificateur de tâches Windows │ ├─ rlhf_manager.py # feedback RLHF 1—5 ★ │ ├─ language_detector.py # 12 langues │ ├─ conversation_exporter.py · command_history.py · config.py │ ├─ knowledge_base_manager.py · session_manager.py · conversation.py │ ├─ optimization.py · evaluation.py · training_pipeline.py · training_manager.py │ └─ web_cache.py · network.py · compression_monitor.py · validation.py ├─ memory/ # 10 M tokens · ChromaDB persistant │ ├─ vector_memory.py # tiktoken cl100k_base · all-MiniLM-L6-v2 │ └─ vector_store/chroma_db/ ├─ models/ # 9 agents · LLM local · génération d'images │ ├─ ai_agents.py # Code/Web/Analyst/Creative/Debug/Planner/Security/Optimizer/DS │ ├─ local_llm.py # wrapper Ollama · détection + fallback │ ├─ image_generation.py # texte → image · Stable Diffusion local │ ├─ comfyui_manager.py # auto-install ComfyUI portable · multi-GPU │ ├─ intelligent_code_orchestrator.py · intelligent_document_analyzer.py │ ├─ smart_web_searcher.py · smart_code_searcher.py · internet_search.py │ ├─ custom_ai_model.py · linguistic_patterns.py · knowledge_base.py │ └─ mixins/ · weights/ · training_runs/ ├─ processors/ # PDF · DOCX · XLSX · CSV · CODE │ └─ pdf_processor.py · docx_processor.py · excel_processor.py · code_processor.py ├─ generators/ # document_generator.py · code_generator.py ├─ interfaces/ # GUI CustomTkinter · CLI · Agents · Workflow │ ├─ gui_modern.py # assemblage des mixins GUI │ ├─ onboarding.py # assistant 1er lancement · détecte RAM/CPU/GPU │ ├─ artifacts.py # détection/préparation artifacts (desktop + serveur) │ ├─ workflow_canvas.py · resource_monitor.py · cli.py · agents_interface.py │ ├─ gui/ # mixins de l'interface moderne │ │ ├─ artifacts_panel.py # volet aperçu live · Edge --app embarqué (SetParent) │ │ ├─ command_palette.py # Command palette Ctrl+K · raccourcis globaux │ │ ├─ slash_commands.py # autocomplétion « / » dans la saisie │ │ ├─ message_editing.py # édition + regénération · branchement ‹ k/n › │ │ ├─ memory_panel.py # fenêtre Mémoire · faits/documents/conversations │ │ ├─ prompts_panel.py # fenêtre Prompts · CRUD bibliothèque │ │ ├─ voice_input.py # faster-whisper · STT 100% local · 99+ langues │ │ ├─ voice_output.py # pyttsx3 · TTS · voix par langue │ │ └─ chat_area.py · sidebar.py · streaming.py · settings_panel.py · markdown_formatting.py │ └─ agents/ # sélection · débat · workflow · scheduler_ui · custom_agents ├─ relay/ # PWA mobile · Chat / Agents · WebSocket · cloudflared │ ├─ relay_server.py · relay_bridge.py · agent_relay.py │ └─ static/ (index.html · style.css · app.js · agents.js) ├─ vscode_extension/ # extension VS Code · client Relay distant · TypeScript │ ├─ src/ # host Node.js · client WebSocket E2EE · @codebase │ ├─ media/ # webview UI (HTML / CSS / JS) │ └─ package.json · README.md ├─ utils/ # utilitaires transverses │ ├─ citations.py # citations web numérotées cliquables ([n] → url) │ ├─ desktop_notify.py # notifications desktop natives (winotify / plyer) │ └─ file_manager.py · file_processor.py · intelligent_calculator.py · logger.py ├─ outputs/exports/ # fichiers générés par l'IA ├─ data/ # knowledge_base (SQLite) · workspaces · web_cache ├─ tests/ · tools/ · examples/ · docs/ ├─ main.py · launch_unified.py · launch.bat ├─ Modelfile · config.yaml · requirements.txt └─ create_custom_model.bat · clean_project.bat · test_features.bat
| TEXTE | RAM | USAGE |
|---|---|---|
| qwen3.5:2b | 4 GB | ultra-light |
| qwen3.5:4b | 8 GB | recommandé |
| qwen3.5:9b | 16 GB | détaillé |
| mistral | — | alternative |
| VISION | RAM | USAGE |
| minicpm-v | 3 GB | recommandé |
| llava | 4.7 GB | alternative |
| llama3.2-vision | — | alternative |
Au 1er lancement, l'assistant de configuration détecte RAM / CPU / GPU et recommande puis télécharge le modèle adapté — sans édition manuelle. Réglages affinables ensuite via le panneau intégré (température, contexte, timeout) ou config.yaml › llm.local.default_model. Fallback automatique sur réponses pattern-based si Ollama indisponible.
# config.yaml relay: auto_start: false port: 8765 response_timeout: 500 password: "" tunnel: true host: "0.0.0.0"
Une extension VS Code (TypeScript) qui transforme My_AI en agent capable d'éditer, exécuter et fouiller le workspace — façon Claude Code, mais 100% local, sur n'importe quel modèle Ollama. Menu @ pour attacher fichiers et dossiers en contexte @codebase, commandes slash, bouton STOP et garde-fous anti-boucle. Marketplace : gonicolas12.my-ai.
| OUTIL | RÔLE | APPROBATION |
|---|---|---|
| read_file | lecture · offset/limit | auto |
| write_file | création/écrasement | modale |
| edit_file | remplacement exact | modale |
| list_dir | contenu d'un dossier | auto |
| glob | recherche par motif | auto |
| grep | ripgrep + fallback JS | auto |
| run_command | shell workspace | modale |
| get_active_editor | fichier + sélection | auto |
| open_file | ouvrir · ligne précise | auto |
Tous les chemins sont résolus depuis le workspace VS Code. Toute sortie de ce périmètre exige une approbation modale par chemin (pas d'auto-approve).
# package.json — settings myaiRelay.openInSecondarySidebar: true myaiRelay.healthCheckIntervalSeconds: 10 myaiRelay.autoReconnect: true myaiRelay.requestTimeoutSeconds: 15
Workflow : on lance My_AI sur la machine hôte → bouton Relay → on copie la connection string → on la colle dans VS Code. À partir de là, le LLM local voit le workspace, propose des modifs, demande l'autorisation pour write/edit/run, et affiche chaque tool call sous forme de carte inline (orange = en cours · vert = succès · rouge = erreur · gris = refusé).
Voix dans les deux sens, 100% local. En entrée : dictée intégrée à chaque zone de texte (chat principal, conversation, onglet Agents), transcrite via faster-whisper. En sortie : lecture vocale des réponses via pyttsx3 — bouton sous chaque message + bascule auto-lecture, avec une voix adaptée à la langue détectée. La voix ne quitte jamais la machine.
| COMPOSANT | VALEUR |
|---|---|
| Moteur STT | faster-whisper |
| Modèle | small · INT8 · ~150 Mo |
| Capture audio | sounddevice · 16 kHz mono |
| VAD | intégré · filtre silences |
| Chargement | lazy · ~5 s au 1er usage |
| Transcription | 1 à 3 s · CPU only |
| Langues | 99+ · auto-détectées |
| Threading | thread-safe · callback async vers GUI |
Module : interfaces/gui/voice_input.py · classe VoiceInput. Dégradation gracieuse si faster-whisper / sounddevice ne sont pas installés.
# 3 états visuels du bouton micro idle: 🎙️ # gris recording: ● # rouge pulsant transcribing: ⏳ # orange # sortie · lecture des réponses play: 🔊 · auto-read: toggle sidebar
Pourquoi local ? Les services STT cloud (Whisper API, Google, Azure) impliquent d'envoyer chaque enregistrement chez un tiers. Pour un assistant pensé local-first, c'était disqualifiant. faster-whisper tourne sur CPU en INT8 avec des perfs proches du temps réel, donc plus aucun compromis : la voix reste sur la machine, point.
# my_ai/core/agent_orchestrator.py — extrait simplifié from models.ai_agents import ( CodeAgent, WebAgent, AnalystAgent, CreativeAgent, DebugAgent, PlannerAgent, SecurityAgent, OptimizerAgent, DataScienceAgent, ) from memory.vector_memory import VectorMemory from core.mcp_client import MCPClient from models.local_llm import LocalLLM class AgentOrchestrator: def __init__(self, model="qwen3.5:4b"): self.llm = LocalLLM(model) self.memory = VectorMemory("memory/vector_store") self.agents = { "code": CodeAgent(self.llm), "web": WebAgent(self.llm), "analyst": AnalystAgent(self.llm), "creative": CreativeAgent(self.llm), "debug": DebugAgent(self.llm), "planner": PlannerAgent(self.llm), "security": SecurityAgent(self.llm), "optim": OptimizerAgent(self.llm), "ds": DataScienceAgent(self.llm), } self.mcp = MCPClient.from_config("config.yaml") def ask_agent(self, kind: str, query: str) -> str: # 1. recall — HNSW + cosinus, reranking CrossEncoder (~20 ms) ctx = self.memory.search(query, k=5) # 2. delegate — agent ReAct + scratchpad XML agent = self.agents[kind] answer = agent.run(query, context=ctx, tools=self.mcp.tools) # 3. persist — chunks 256 tok / overlap 32, jusqu'à 10M tokens self.memory.store(query, answer) return answer