From 236e875cf9eb33665ae3468a37a13c643dabadda Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 3 Aug 2026 05:49:40 +0000 Subject: [PATCH] =?UTF-8?q?N'annonce=20jamais=20au=20mod=C3=A8le=20un=20ou?= =?UTF-8?q?til=20inutilisable=20(id=C3=A9e=20reprise=20d'AJEAN)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AJEAN (github.com/nathaninline/jean) n'expose ses outils web que si le service répond : « le modèle ne peut pas inventer un outil indisponible, un outil absent n'apparaît pas dans son contexte ». Loki, lui, listait les outils d'après les seuls interrupteurs de config. Conséquence : sans Aider installé, code_task était quand même annoncé — le modèle l'appelait, recevait « moteur code indisponible » et perdait un tour, au lieu d'employer directement write_file / edit_file. enabled_tool_names filtre désormais sur la disponibilité réelle. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01SVay7z3y7q2gEe54ByAE6N --- backend/app/agent_config.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/app/agent_config.py b/backend/app/agent_config.py index 6c04086..4543ee0 100644 --- a/backend/app/agent_config.py +++ b/backend/app/agent_config.py @@ -248,4 +248,18 @@ def ollama_options(cfg: dict) -> dict: def enabled_tool_names(cfg: dict) -> list[str]: - return [name for name, on in cfg["tools"].items() if on] + """Outils réellement proposables au modèle. + + Un outil activé dans la config mais INUTILISABLE (dépendance absente) ne + doit pas apparaître dans le contexte : sinon le modèle l'appelle, échoue, + et gâche un tour. Mieux vaut qu'il ne sache pas qu'il existe et emploie + directement write_file / edit_file. + """ + names = [name for name, on in cfg["tools"].items() if on] + + if "code_task" in names: + from . import coder + if not coder.available(): + names.remove("code_task") + + return names