Guide d’architecture — agent IA local
Du binaire jusqu’à l’outil (natif ou extension). MiniAgentic est un agent IA local : chaque chaîne est une pièce séparée, avec démos animées dans la charte du produit.
Agent CLI local : Ollama, outils Python, et une boucle qui s’arrête dès que le modèle répond en texte. Les commandes / et le shell passent à côté du modèle.
tool_calls → résultats → réponse/ et verbes shell bypassent le LLMpyproject.toml → miniagentic = "miniagentic.cli:main"
Quand tu tapes miniagentic, Python appelle cli.main — ton agent fichiers local démarre.
Feature-Based sous product/miniagentic/. Survole mentalement : chaque nœud s’allume.
Règle : la couche 1 ne connaît pas Ollama. Les couches 4–5 peuvent ignorer le LLM.
main() → Agent.files() → workspace → prompt → outils → banner → REPL.
resolve accepte aussi absolu / ~.
Priorité stricte : vide → quit → / → shell → sinon agent.ask. Une frappe pendant ask annule le tour et enchaîne.
Toute la boucle est dans agent/agent.py · ask(). Le modèle décide. Aucune heuristique ne reprend la main s’il a répondu en texte.
tools.for_llm()tool_calls → exécution → on recommenceUn appel d’outil répété à l’identique est signalé. Au deuxième doublon, l’agent force un résumé sans outils. Un JSON d’outil cassé est retenté trois fois.
Le nom du modèle Ollama choisit tours, budget et extensions. MINIAGENTIC_PROFIL force l’un des trois mots. Un nom inconnu est grand.
| Profil | Détection | Tours | Budget | Extensions |
|---|---|---|---|---|
petit | 1b, 3b, ministral-3 | 8 | 24 000 car. | non |
moyen | 7b, 8b, 14b, mistral, llama3.1:8b | 16 | 64 000 car. | oui |
grand | le reste | 40 | 120 000 car. | oui |
run ou grep/model list sépare Local et Cloud. Choisir un nom présent seulement côté Cloud bascule le client (OLLAMA_API_KEY). Le chemin par défaut reste l’Ollama local.
Deux couches : filesystem/outils/ (LLM) vs filesystem/operations/ (disque pur, aussi utilisé par /).
| Outil LLM | Ops |
|---|---|
tree | explore_tree |
find | find_paths |
grep | grep_paths |
read | read_text |
edit | replace_text — une occurrence exacte |
write | write_text |
mkdir | mkdir |
ls | list_entries |
run | run_command — sans shell, sans pipe |
read, edit, write, mkdir et run acceptent un chemin absolu. Le workspace ancre les relatifs.
Un seul branchement : default_tools → load_tools, sauf en profil petit. Contrat : register(workspace) et un bloc Args: dans la docstring.
# Drop-in · hot-reload via /extensions reload from pathlib import Path import json def register(workspace: Path) -> list: def count_python_files(where: str = ".") -> str: """Compte les .py. Args: where: Chemin relatif au workspace. """ root = (workspace / where).resolve() n = sum(1 for _ in root.rglob("*.py")) return json.dumps({"count": n}) return [count_python_files]
register → visible dans /extensions list_ → ignoré au chargementproduct/extensions/ux_atelier.py
ux_audit_htmlux_design_systemux_critiqueux_wireframe_specLe profil petit ne les charge pas. /extensions reload le dit explicitement.
Deuxième chemin vers le disque — sans Ollama. Aiguillage dans commandes.run.
| Commande | Effet |
|---|---|
/ls /tree /find /grep /read | filesystem.* direct |
/path | set_workspace + reload outils |
/tools | liste registre LLM |
/extensions | list · reload · dir |
/model /reset /history | session / Ollama |
Orthogonal au modèle. cd change le dossier, recharge les outils et oublie la conversation. Le shell système (ls, rm) n’est pas l’outil run.
La palette aide à saisir — elle ne route pas. Le routage reste dans _interactive.
--plain / non-TTY → input()palette.read_line(session)« Quels fichiers Python y a-t-il ? » — du binaire jusqu’à show_reply, sans forcer un outil si le modèle répond déjà en texte.
/find *.py : même disque, zéro LLM, beaucoup plus court.
Exports : Agent, Tools, workspace, extensions_dir, load_tools.
from miniagentic import Agent agent = Agent.files(workspace=".", model="ministral-3:3b") print(agent.ask("Liste les fichiers à la racine")) agent.set_workspace("~/autre") # recharge outils + prompt agent.reset() # nouvelle conversation
Source textuelle détaillée : ARCHITECTURE.md à la racine du dépôt.
Si le code diverge, c’est le code qui fait foi.