Refactoring agent and behaviour naming and structure. #25

Merged
9828273 merged 9 commits from refactor/agent-naming into dev 2025-11-19 15:37:14 +00:00
17 changed files with 46 additions and 40 deletions
Showing only changes of commit 9365f109ab - Show all commits

View File

@@ -1 +1,5 @@
from .bdi_core_agent import BDICoreAgent as BDICoreAgent from .bdi_belief_collector_agent.bel_collector_agent import (
BDIBeliefCollectorAgent as BDIBeliefCollectorAgent,
)
from .bdi_core_agent.bdi_core_agent import BDICoreAgent as BDICoreAgent
from .bdi_text_belief_agent.bdi_text_belief_agent import BDITextBeliefAgent as BDITextBeliefAgent

View File

@@ -3,9 +3,9 @@ from control_backend.agents.base import BaseAgent
from .behaviours.continuous_collect import ContinuousBeliefCollector from .behaviours.continuous_collect import ContinuousBeliefCollector
class BelCollectorAgent(BaseAgent): class BDIBeliefCollectorAgent(BaseAgent):
async def setup(self): async def setup(self):
self.logger.info("BelCollectorAgent starting (%s)", self.jid) self.logger.info("BDIBeliefCollectorAgent starting (%s)", self.jid)
# Attach the continuous collector behaviour (listens and forwards to BDI) # Attach the continuous collector behaviour (listens and forwards to BDI)
self.add_behaviour(ContinuousBeliefCollector()) self.add_behaviour(ContinuousBeliefCollector())
self.logger.info("BelCollectorAgent ready.") self.logger.info("BDIBeliefCollectorAgent ready.")

View File

@@ -32,7 +32,7 @@ class BeliefSetterBehaviour(CyclicBehaviour):
self.agent.logger.debug("Processing message from sender: %s", sender) self.agent.logger.debug("Processing message from sender: %s", sender)
match sender: match sender:
case settings.agent_settings.bel_collector_agent_name: case settings.agent_settings.bdi_belief_collector_agent_name:
self.agent.logger.debug( self.agent.logger.debug(
"Message is from the belief collector agent. Processing as belief message." "Message is from the belief collector agent. Processing as belief message."
) )

View File

@@ -3,6 +3,6 @@ from control_backend.agents.base import BaseAgent
from .behaviours.text_belief_extractor import BeliefFromText from .behaviours.text_belief_extractor import BeliefFromText
class BelTextExtractAgent(BaseAgent): class BDITextBeliefAgent(BaseAgent):
async def setup(self): async def setup(self):
self.add_behaviour(BeliefFromText()) self.add_behaviour(BeliefFromText())

View File

@@ -71,7 +71,7 @@ class BeliefFromText(CyclicBehaviour):
belief_message = Message() belief_message = Message()
belief_message.to = ( belief_message.to = (
settings.agent_settings.bel_collector_agent_name settings.agent_settings.bdi_belief_collector_agent_name
+ "@" + "@"
+ settings.agent_settings.host + settings.agent_settings.host
) )
@@ -95,7 +95,9 @@ class BeliefFromText(CyclicBehaviour):
belief_msg = Message() belief_msg = Message()
belief_msg.to = ( belief_msg.to = (
settings.agent_settings.bel_collector_agent_name + "@" + settings.agent_settings.host settings.agent_settings.bdi_belief_collector_agent_name
+ "@"
+ settings.agent_settings.host
) )
belief_msg.body = payload belief_msg.body = payload
belief_msg.thread = "beliefs" belief_msg.thread = "beliefs"

View File

@@ -1,4 +0,0 @@
from .bel_collector_agent.bel_collector_agent import BelCollectorAgent as BelCollectorAgent
from .bel_text_extract_agent.bel_text_extract_agent import (
BelTextExtractAgent as BelTextExtractAgent,
)

View File

@@ -11,7 +11,7 @@ class BelTextAgent(Agent):
class SendOnceBehaviourBlfText(OneShotBehaviour): class SendOnceBehaviourBlfText(OneShotBehaviour):
async def run(self): async def run(self):
to_jid = ( to_jid = (
settings.agent_settings.bel_collector_agent_name settings.agent_settings.bdi_belief_collector_agent_name
+ "@" + "@"
+ settings.agent_settings.host + settings.agent_settings.host
) )

View File

@@ -47,7 +47,7 @@ class PerTranscriptionAgent(BaseAgent):
async def _share_transcription(self, transcription: str): async def _share_transcription(self, transcription: str):
"""Share a transcription to the other agents that depend on it.""" """Share a transcription to the other agents that depend on it."""
receiver_jids = [ receiver_jids = [
settings.agent_settings.texbel_text_extractor_agent_name settings.agent_settings.texbdi_text_belief_agent_name
+ "@" + "@"
+ settings.agent_settings.host, + settings.agent_settings.host,
] # Set message receivers here ] # Set message receivers here

View File

@@ -10,8 +10,8 @@ class ZMQSettings(BaseModel):
class AgentSettings(BaseModel): class AgentSettings(BaseModel):
host: str = "localhost" host: str = "localhost"
bdi_core_agent_agent_name: str = "bdi_core_agent" bdi_core_agent_agent_name: str = "bdi_core_agent"
bel_collector_agent_name: str = "bel_collector_agent" bdi_belief_collector_agent_name: str = "bdi_belief_collector_agent"
bel_text_extractor_agent_name: str = "bel_text_extractor_agent" bdi_text_belief_agent_name: str = "bdi_text_belief_agent"
per_vad_agent_name: str = "per_vad_agent" per_vad_agent_name: str = "per_vad_agent"
llm_agent_name: str = "llm_agent" llm_agent_name: str = "llm_agent"
test_agent_name: str = "test_agent" test_agent_name: str = "test_agent"

View File

@@ -9,10 +9,11 @@ from zmq.asyncio import Context
# Act agents # Act agents
# BDI agents # BDI agents
from control_backend.agents.bdi_agents import BDICoreAgent from control_backend.agents.bdi_agents import (
BDIBeliefCollectorAgent,
# Believe Agents BDICoreAgent,
from control_backend.agents.bel_agents import BelCollectorAgent, BelTextExtractAgent BDITextBeliefAgent,
)
# Communication agents # Communication agents
from control_backend.agents.com_agents import ComRIAgent from control_backend.agents.com_agents import ComRIAgent
@@ -104,22 +105,22 @@ async def lifespan(app: FastAPI):
"asl": "src/control_backend/agents/bdi/rules.asl", "asl": "src/control_backend/agents/bdi/rules.asl",
}, },
), ),
"BelCollectorAgent": ( "BDIBeliefCollectorAgent": (
BelCollectorAgent, BDIBeliefCollectorAgent,
{ {
"name": settings.agent_settings.bel_collector_agent_name, "name": settings.agent_settings.bdi_belief_collector_agent_name,
"jid": f"{settings.agent_settings.bel_collector_agent_name}@" "jid": f"{settings.agent_settings.bdi_belief_collector_agent_name}@"
f"{settings.agent_settings.host}", f"{settings.agent_settings.host}",
"password": settings.agent_settings.bel_collector_agent_name, "password": settings.agent_settings.bdi_belief_collector_agent_name,
}, },
), ),
"TBeliefExtractor": ( "TBeliefExtractor": (
BelTextExtractAgent, BDITextBeliefAgent,
{ {
"name": settings.agent_settings.bel_text_extractor_agent_name, "name": settings.agent_settings.bdi_text_belief_agent_name,
"jid": f"{settings.agent_settings.bel_text_extractor_agent_name}@" "jid": f"{settings.agent_settings.bdi_text_belief_agent_name}@"
f"{settings.agent_settings.host}", f"{settings.agent_settings.host}",
"password": settings.agent_settings.bel_text_extractor_agent_name, "password": settings.agent_settings.bdi_text_belief_agent_name,
}, },
), ),
"PerVADAgent": ( "PerVADAgent": (

View File

@@ -4,10 +4,12 @@ from unittest.mock import AsyncMock, MagicMock, call
import pytest import pytest
from control_backend.agents.bdi_agents.behaviours.belief_setter import BeliefSetterBehaviour from control_backend.agents.bdi_agents.bdi_core_agent.behaviours.belief_setter import (
BeliefSetterBehaviour,
)
# Define a constant for the collector agent name to use in tests # Define a constant for the collector agent name to use in tests
COLLECTOR_AGENT_NAME = "bel_collector_agent" COLLECTOR_AGENT_NAME = "bdi_belief_collector_agent"
COLLECTOR_AGENT_JID = f"{COLLECTOR_AGENT_NAME}@test" COLLECTOR_AGENT_JID = f"{COLLECTOR_AGENT_NAME}@test"
@@ -25,7 +27,8 @@ def belief_setter(mock_agent, mocker):
"""Fixture to create an instance of BeliefSetterBehaviour with a mocked agent.""" """Fixture to create an instance of BeliefSetterBehaviour with a mocked agent."""
# Patch the settings to use a predictable agent name # Patch the settings to use a predictable agent name
mocker.patch( mocker.patch(
"control_backend.agents.bdi_agents.behaviours.belief_setter.settings.agent_settings.bel_collector_agent_name", "control_backend.agents.bdi_agents.bdi_core_agent."
"behaviours.belief_setter.settings.agent_settings.bdi_belief_collector_agent_name",
COLLECTOR_AGENT_NAME, COLLECTOR_AGENT_NAME,
) )
@@ -62,7 +65,7 @@ async def test_run_message_received(belief_setter, mocker):
belief_setter._process_message.assert_called_once_with(msg) belief_setter._process_message.assert_called_once_with(msg)
def test_process_message_from_bel_collector_agent(belief_setter, mocker): def test_process_message_from_bdi_belief_collector_agent(belief_setter, mocker):
""" """
Test processing a message from the correct belief collector agent. Test processing a message from the correct belief collector agent.
""" """

View File

@@ -3,7 +3,7 @@ from unittest.mock import AsyncMock, MagicMock
import pytest import pytest
from control_backend.agents.bel_agents.bel_collector_agent.behaviours.continuous_collect import ( from control_backend.agents.bdi_agents.bdi_belief_collector_agent.behaviours.continuous_collect import ( # noqa: E501
ContinuousBeliefCollector, ContinuousBeliefCollector,
) )
@@ -20,7 +20,7 @@ def create_mock_message(sender_node: str, body: str) -> MagicMock:
def mock_agent(mocker): def mock_agent(mocker):
"""Fixture to create a mock Agent.""" """Fixture to create a mock Agent."""
agent = MagicMock() agent = MagicMock()
agent.jid = "bel_collector_agent@test" agent.jid = "bdi_belief_collector_agent@test"
return agent return agent

View File

@@ -4,7 +4,7 @@ from unittest.mock import AsyncMock, MagicMock, patch
import pytest import pytest
from spade.message import Message from spade.message import Message
from control_backend.agents.bel_agents.bel_text_extract_agent.behaviours.text_belief_extractor import ( # noqa: E501, We can't shorten this import. from control_backend.agents.bdi_agents.bdi_text_belief_agent.behaviours.text_belief_extractor import ( # noqa: E501, We can't shorten this import.
BeliefFromText, BeliefFromText,
) )
@@ -18,14 +18,14 @@ def mock_settings():
# Create a mock object that mimics the nested structure # Create a mock object that mimics the nested structure
settings_mock = MagicMock() settings_mock = MagicMock()
settings_mock.agent_settings.per_transcription_agent_name = "transcriber" settings_mock.agent_settings.per_transcription_agent_name = "transcriber"
settings_mock.agent_settings.bel_collector_agent_name = "collector" settings_mock.agent_settings.bdi_belief_collector_agent_name = "collector"
settings_mock.agent_settings.host = "fake.host" settings_mock.agent_settings.host = "fake.host"
# Use patch to replace the settings object during the test # Use patch to replace the settings object during the test
# Adjust 'control_backend.behaviours.belief_from_text.settings' to where # Adjust 'control_backend.behaviours.belief_from_text.settings' to where
# your behaviour file imports it from. # your behaviour file imports it from.
with patch( with patch(
"control_backend.agents.bel_agents.bel_text_extract_agent.behaviours.text_belief_extractor.settings", "control_backend.agents.bdi_agents.bdi_text_belief_agent.behaviours.text_belief_extractor.settings",
settings_mock, settings_mock,
): ):
yield settings_mock yield settings_mock
@@ -122,7 +122,7 @@ async def test_run_message_from_transcriber_demo(behavior, mock_settings, monkey
assert ( assert (
sent_msg.to sent_msg.to
== mock_settings.agent_settings.bel_collector_agent_name == mock_settings.agent_settings.bdi_belief_collector_agent_name
+ "@" + "@"
+ mock_settings.agent_settings.host + mock_settings.agent_settings.host
) )
@@ -162,7 +162,7 @@ async def test_process_transcription_success(behavior, mock_settings):
# 2. Inspect the sent message # 2. Inspect the sent message
sent_msg: Message = behavior.send.call_args[0][0] sent_msg: Message = behavior.send.call_args[0][0]
expected_to = ( expected_to = (
mock_settings.agent_settings.bel_collector_agent_name mock_settings.agent_settings.bdi_belief_collector_agent_name
+ "@" + "@"
+ mock_settings.agent_settings.host + mock_settings.agent_settings.host
) )