diff --git a/src/control_backend/core/agent_system.py b/src/control_backend/core/agent_system.py index 9d7a47f..1411c0d 100644 --- a/src/control_backend/core/agent_system.py +++ b/src/control_backend/core/agent_system.py @@ -130,16 +130,21 @@ class BaseAgent(ABC): :param message: The message to send. """ - target = AgentDirectory.get(message.to) - if target: - await target.inbox.put(message) - self.logger.debug(f"Sent message {message.body} to {message.to} via regular inbox.") - else: - # Apparently target agent is on a different process, send via ZMQ - topic = f"internal/{message.to}".encode() - body = message.model_dump_json().encode() - await self._internal_pub_socket.send_multipart([topic, body]) - self.logger.debug(f"Sent message {message.body} to {message.to} via ZMQ.") + to = message.to + receivers = [to] if isinstance(to, str) else to + + for receiver in receivers: + target = AgentDirectory.get(receiver) + + if target: + await target.inbox.put(message) + self.logger.debug(f"Sent message {message.body} to {message.to} via regular inbox.") + else: + # Apparently target agent is on a different process, send via ZMQ + topic = f"internal/{message.to}".encode() + body = message.model_dump_json().encode() + await self._internal_pub_socket.send_multipart([topic, body]) + self.logger.debug(f"Sent message {message.body} to {message.to} via ZMQ.") async def _process_inbox(self): """ diff --git a/src/control_backend/schemas/internal_message.py b/src/control_backend/schemas/internal_message.py index 071d884..d70f80a 100644 --- a/src/control_backend/schemas/internal_message.py +++ b/src/control_backend/schemas/internal_message.py @@ -1,3 +1,5 @@ +from collections.abc import Iterable + from pydantic import BaseModel @@ -11,7 +13,7 @@ class InternalMessage(BaseModel): :ivar thread: An optional thread identifier/topic to categorize the message (e.g., 'beliefs'). """ - to: str + to: str | Iterable[str] sender: str body: str thread: str | None = None