fix: empêche les appels LLM concurrents via _llm_lock

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 <noreply@anthropic.com>
This commit is contained in:
2026-03-09 18:02:18 +00:00
parent 75687957fb
commit 0b5ed2fd1f
+9 -1
View File
@@ -100,6 +100,7 @@ class BaseAgent(ABC):
# Agents en ligne (mis à jour via MQTT) # Agents en ligne (mis à jour via MQTT)
self._online_agents: set[str] = set() self._online_agents: set[str] = set()
self._online_lock = threading.Lock() self._online_lock = threading.Lock()
self._llm_lock = threading.Lock() # Empêche les appels LLM concurrents
self._running = False self._running = False
@@ -437,11 +438,18 @@ class BaseAgent(ABC):
self.xmpp.send_message(sender, f"Broadcast envoyé à tous les agents.") self.xmpp.send_message(sender, f"Broadcast envoyé à tous les agents.")
return return
# Mode naturel → LLM # 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) extra_ctx = self.registry.summary_for_llm(self._online_agents)
response = self._llm_loop(body, context, extra_ctx) response = self._llm_loop(body, context, extra_ctx)
if self.xmpp: if self.xmpp:
self.xmpp.send_message(sender, response) self.xmpp.send_message(sender, response)
finally:
self._llm_lock.release()
def _route_direct_command(self, cmd: ParsedCommand) -> str: def _route_direct_command(self, cmd: ParsedCommand) -> str:
"""Route un @agent commande vers l'agent cible via MQTT.""" """Route un @agent commande vers l'agent cible via MQTT."""