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 les conversations et documents en embeddings. L'assistant se souvient des échanges précédents sans ré-entraînement.
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.
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 │ ├─ ai_engine.py # point d'entrée intelligence │ ├─ chat_orchestrator.py # boucle ReAct · scratchpad XML · MAX_TOURS=15 │ ├─ agent_orchestrator.py # page Agents · historiques séparés │ ├─ api_server.py # FastAPI │ ├─ mcp_client.py # Model Context Protocol · stdio │ ├─ rlhf_manager.py # feedback 1—5 ★ │ ├─ knowledge_base_manager.py │ ├─ language_detector.py # 12 langues │ ├─ session_manager.py · conversation.py · validation.py │ ├─ optimization.py · evaluation.py · training_pipeline.py │ └─ web_cache.py · network.py · compression_monitor.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 │ ├─ ai_agents.py # Code/Web/Analyst/Creative/Debug/Planner/Security/Optimizer/DS │ ├─ local_llm.py # wrapper Ollama │ ├─ intelligent_code_orchestrator.py │ ├─ intelligent_document_analyzer.py │ ├─ smart_web_searcher.py · smart_code_searcher.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/ # export documents & code ├─ interfaces/ # GUI CustomTkinter · CLI · Agents · Workflow │ ├─ gui_modern.py · cli.py · agents_interface.py │ ├─ workflow_canvas.py · resource_monitor.py │ ├─ gui/ # widgets · chat_area · sidebar · streaming │ │ └─ voice_input.py # faster-whisper · STT 100% local · 99+ langues │ └─ agents/ ├─ relay/ # PWA mobile · WebSocket · cloudflared tunnel │ ├─ relay_server.py · relay_bridge.py │ └─ static/ (index.html · style.css · app.js) ├─ vscode_extension/ # extension VS Code agentique · TypeScript · esbuild │ ├─ src/ # client WebSocket E2EE · UI webview · 9 outils workspace │ ├─ l10n/ · media/ # i18n (FR/EN) · icônes │ ├─ package.json · esbuild.js · tsconfig.json │ └─ README.md · README.fr.md · CHANGELOG.md ├─ data/ # KB · workspaces · web_cache ├─ utils/ · 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 |
Configurable via Modelfile + 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. 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é).
Saisie vocale intégrée à chaque zone de texte de l'app — chat principal, conversation, onglet Agents. Tout est transcrit en local via faster-whisper. La voix ne quitte jamais la machine. Nouveau dans la v7.4.0.
| 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 # 3 zones de saisie équipées chat_home · conversation · agents_tab
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