Files
pepperplus-cb/src/control_backend/agents/test_agent.py
Kasper 1eb414ea0d feat: add agent that is able to receive messages from UI
Inside the `/message` enpoint we put a message onto the internal event
queue, which gets read by TestAgent. This agent, in turn, logs the
message (temporary behaviour until we implement RI integration).

The name TestAgent is of course temporary, this is just for exploratory
purposes.

ref: N25B-165
2025-10-08 18:27:24 +02:00

38 lines
1.2 KiB
Python

import json
import logging
from spade.agent import Agent
from spade.behaviour import CyclicBehaviour
import zmq
from control_backend.core.config import settings
from control_backend.core.zmq_context import context
from control_backend.schemas.message import Message
logger = logging.getLogger(__name__)
class TestAgent(Agent):
socket: zmq.Socket
class ListenBehaviour(CyclicBehaviour):
async def run(self):
assert self.agent is not None
topic, body = await self.agent.socket.recv_multipart()
try:
message_json = json.loads(body.decode("utf-8"))
message = Message.model_validate(message_json)
logger.info("Received message \"%s\"", message.message)
except Exception as e:
logger.error("Error processing message: %s", e)
async def setup(self):
logger.info("Setting up %s", self.jid)
self.socket = context.socket(zmq.SUB)
self.socket.connect(settings.zmq_settings.internal_comm_address)
self.socket.setsockopt(zmq.SUBSCRIBE, b"message")
b = self.ListenBehaviour()
self.add_behaviour(b)
logger.info("Finished setting up %s", self.jid)