refactor: restructure to make sure the Bel agents are also part of BDI.
ref: N25B-257
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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.")
|
||||||
@@ -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."
|
||||||
)
|
)
|
||||||
@@ -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())
|
||||||
@@ -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"
|
||||||
@@ -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,
|
|
||||||
)
|
|
||||||
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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": (
|
||||||
|
|||||||
@@ -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.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user