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:
@@ -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."""
|
||||||
|
|||||||
Reference in New Issue
Block a user