From 0b5ed2fd1f588b132b78bc5383602ed4e271c794 Mon Sep 17 00:00:00 2001 From: sylvain Date: Mon, 9 Mar 2026 18:02:18 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20emp=C3=AAche=20les=20appels=20LLM=20conc?= =?UTF-8?q?urrents=20via=20=5Fllm=5Flock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Si le LLM est déjà occupé, répond immédiatement au lieu d'empiler les requêtes. Évite la queue silencieuse qui bloquait les agents pendant plusieurs minutes. Co-Authored-By: Claude Sonnet 4.6 --- agents_core/base_agent.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/agents_core/base_agent.py b/agents_core/base_agent.py index f64a51d..94a151b 100644 --- a/agents_core/base_agent.py +++ b/agents_core/base_agent.py @@ -100,6 +100,7 @@ class BaseAgent(ABC): # Agents en ligne (mis à jour via MQTT) self._online_agents: set[str] = set() self._online_lock = threading.Lock() + self._llm_lock = threading.Lock() # Empêche les appels LLM concurrents self._running = False @@ -437,11 +438,18 @@ class BaseAgent(ABC): self.xmpp.send_message(sender, f"Broadcast envoyé à tous les agents.") return - # Mode naturel → LLM - extra_ctx = self.registry.summary_for_llm(self._online_agents) - response = self._llm_loop(body, context, extra_ctx) - if self.xmpp: - self.xmpp.send_message(sender, response) + # Mode naturel → LLM (un seul appel à la fois) + if not self._llm_lock.acquire(blocking=False): + if self.xmpp: + self.xmpp.send_message(sender, "⏳ Je traite déjà une demande, attends un instant.") + return + try: + extra_ctx = self.registry.summary_for_llm(self._online_agents) + response = self._llm_loop(body, context, extra_ctx) + if self.xmpp: + self.xmpp.send_message(sender, response) + finally: + self._llm_lock.release() def _route_direct_command(self, cmd: ParsedCommand) -> str: """Route un @agent commande vers l'agent cible via MQTT."""