Merge branch 'feat/semantic-beliefs' into feat/extra-agentspeak-functionality
# Conflicts: # src/control_backend/agents/bdi/bdi_program_manager.py
This commit is contained in:
@@ -8,9 +8,16 @@ from zmq.asyncio import Context
|
||||
from control_backend.agents import BaseAgent
|
||||
from control_backend.agents.bdi.agentspeak_generator import AgentSpeakGenerator
|
||||
from control_backend.core.config import settings
|
||||
from control_backend.schemas.belief_list import BeliefList
|
||||
from control_backend.schemas.belief_list import BeliefList, GoalList
|
||||
from control_backend.schemas.internal_message import InternalMessage
|
||||
from control_backend.schemas.program import Belief, ConditionalNorm, InferredBelief, Phase, Program
|
||||
from control_backend.schemas.program import (
|
||||
Belief,
|
||||
ConditionalNorm,
|
||||
Goal,
|
||||
InferredBelief,
|
||||
Phase,
|
||||
Program,
|
||||
)
|
||||
|
||||
|
||||
class BDIProgramManager(BaseAgent):
|
||||
@@ -124,6 +131,46 @@ class BDIProgramManager(BaseAgent):
|
||||
|
||||
await self.send(message)
|
||||
|
||||
@staticmethod
|
||||
def _extract_goals_from_program(program: Program) -> list[Goal]:
|
||||
"""
|
||||
Extract all goals from the program, including subgoals.
|
||||
|
||||
:param program: The program received from the API.
|
||||
:return: A list of Goal objects.
|
||||
"""
|
||||
goals: list[Goal] = []
|
||||
|
||||
def extract_goals_from_goal(goal_: Goal) -> list[Goal]:
|
||||
goals_: list[Goal] = [goal]
|
||||
for plan in goal_.plan:
|
||||
if isinstance(plan, Goal):
|
||||
goals_.extend(extract_goals_from_goal(plan))
|
||||
return goals_
|
||||
|
||||
for phase in program.phases:
|
||||
for goal in phase.goals:
|
||||
goals.extend(extract_goals_from_goal(goal))
|
||||
|
||||
return goals
|
||||
|
||||
async def _send_goals_to_semantic_belief_extractor(self, program: Program):
|
||||
"""
|
||||
Extract goals from the program and send them to the Semantic Belief Extractor Agent.
|
||||
|
||||
:param program: The program received from the API.
|
||||
"""
|
||||
goals = GoalList(goals=self._extract_goals_from_program(program))
|
||||
|
||||
message = InternalMessage(
|
||||
to=settings.agent_settings.text_belief_extractor_name,
|
||||
sender=self.name,
|
||||
body=goals.model_dump_json(),
|
||||
thread="goals",
|
||||
)
|
||||
|
||||
await self.send(message)
|
||||
|
||||
async def _receive_programs(self):
|
||||
"""
|
||||
Continuous loop that receives program updates from the HTTP endpoint.
|
||||
@@ -145,6 +192,7 @@ class BDIProgramManager(BaseAgent):
|
||||
await asyncio.gather(
|
||||
self._create_agentspeak_and_send_to_bdi(program),
|
||||
self._send_beliefs_to_semantic_belief_extractor(),
|
||||
self._send_goals_to_semantic_belief_extractor(program),
|
||||
)
|
||||
|
||||
async def setup(self):
|
||||
|
||||
Reference in New Issue
Block a user