feat: pydantic models and inter-process messaging

Moved `InternalMessage` into schemas and created a `BeliefMessage`
model. Also added the ability for agents to communicate via ZMQ to
agents on another process.

ref: N25B-316
This commit is contained in:
2025-11-24 14:03:34 +01:00
parent 47a20413c4
commit ef00c03ec5
9 changed files with 113 additions and 37 deletions

View File

@@ -1,16 +1,17 @@
import asyncio
import copy
import json
import time
from collections.abc import Iterable
import agentspeak
import agentspeak.runtime
import agentspeak.stdlib
from pydantic import ValidationError
from control_backend.agents.base import BaseAgent
from control_backend.core.agent_system import InternalMessage
from control_backend.core.config import settings
from control_backend.schemas.belief_message import BeliefMessage
from control_backend.schemas.ri_message import SpeechCommand
@@ -58,16 +59,19 @@ class BDICoreAgent(BaseAgent):
maybe_more_work = True
while maybe_more_work:
maybe_more_work = False
self.logger.debug("Stepping BDI.")
if self.bdi_agent.step():
maybe_more_work = True
if not maybe_more_work:
deadline = self.bdi_agent.shortest_deadline()
if deadline:
self.logger.debug("Sleeping until %s", deadline)
await asyncio.sleep(deadline - time.time())
maybe_more_work = True
else:
self._wake_bdi_loop.clear()
self.logger.debug("No more deadlines. Halting BDI loop.")
async def handle_message(self, msg: InternalMessage):
"""
@@ -80,10 +84,10 @@ class BDICoreAgent(BaseAgent):
self.logger.debug("Processing message from belief collector.")
try:
if msg.thread == "beliefs":
beliefs = json.loads(msg.body)
beliefs = BeliefMessage.model_validate_json(msg.body).beliefs
self._add_beliefs(beliefs)
except Exception as e:
self.logger.error(f"Error processing belief: {e}")
except ValidationError:
self.logger.exception("Error processing belief.")
case settings.agent_settings.llm_name:
content = msg.body
self.logger.info("Received LLM response: %s", content)

View File

@@ -1,3 +1,3 @@
+user_said(NewMessage) <-
-user_said(NewMessage);
.reply(NewMessage).
+user_said(Message) <-
-user_said(Message);
.reply(Message).

View File

@@ -3,6 +3,7 @@ import json
from control_backend.agents.base import BaseAgent
from control_backend.core.agent_system import InternalMessage
from control_backend.core.config import settings
from control_backend.schemas.belief_message import BeliefMessage
class BDIBeliefCollectorAgent(BaseAgent):
@@ -80,7 +81,7 @@ class BDIBeliefCollectorAgent(BaseAgent):
msg = InternalMessage(
to=settings.agent_settings.bdi_core_name,
sender=self.name,
body=json.dumps(beliefs),
body=BeliefMessage(beliefs=beliefs).model_dump_json(),
thread="beliefs",
)