Compare commits

...

1 Commits

Author SHA1 Message Date
Pim Hutting
02063a73b2 feat: added recursive mapping
ref: N25B-400
2026-01-22 11:15:13 +01:00
2 changed files with 15 additions and 6 deletions

View File

@@ -7,7 +7,6 @@ import numpy as np
import zmq import zmq
import zmq.asyncio as azmq import zmq.asyncio as azmq
from pydantic_core import ValidationError from pydantic_core import ValidationError
import struct
from control_backend.agents import BaseAgent from control_backend.agents import BaseAgent
from control_backend.agents.perception.visual_emotion_recognition_agent.visual_emotion_recognizer import ( # noqa from control_backend.agents.perception.visual_emotion_recognition_agent.visual_emotion_recognizer import ( # noqa
@@ -89,7 +88,7 @@ class VisualEmotionRecognitionAgent(BaseAgent):
while self._running: while self._running:
try: try:
frame_bytes = await self.video_in_socket.recv() frame_bytes = await self.video_in_socket.recv()
# Convert bytes to a numpy buffer # Convert bytes to a numpy buffer
nparr = np.frombuffer(frame_bytes, np.uint8) nparr = np.frombuffer(frame_bytes, np.uint8)
@@ -126,7 +125,6 @@ class VisualEmotionRecognitionAgent(BaseAgent):
except zmq.Again: except zmq.Again:
self.logger.warning("No video frame received within timeout.") self.logger.warning("No video frame received within timeout.")
async def update_emotions(self, prev_emotions: set[str], emotions: set[str]): async def update_emotions(self, prev_emotions: set[str], emotions: set[str]):
""" """
Compare emotions from previous window and current emotions, Compare emotions from previous window and current emotions,

View File

@@ -9,7 +9,7 @@ from control_backend.agents.bdi.agentspeak_generator import AgentSpeakGenerator
from control_backend.core.agent_system import InternalMessage from control_backend.core.agent_system import InternalMessage
from control_backend.core.config import settings from control_backend.core.config import settings
from control_backend.schemas.belief_message import Belief, BeliefMessage from control_backend.schemas.belief_message import Belief, BeliefMessage
from control_backend.schemas.program import ConditionalNorm, Program from control_backend.schemas.program import ConditionalNorm, Goal, Program
from control_backend.schemas.ri_message import ( from control_backend.schemas.ri_message import (
GestureCommand, GestureCommand,
PauseCommand, PauseCommand,
@@ -250,6 +250,18 @@ class UserInterruptAgent(BaseAgent):
self._cond_norm_map = {} self._cond_norm_map = {}
self._cond_norm_reverse_map = {} self._cond_norm_reverse_map = {}
def _register_goal(goal: Goal):
"""Recursively register goals and their subgoals."""
slug = AgentSpeakGenerator.slugify(goal)
self._goal_map[str(goal.id)] = slug
self._goal_reverse_map[slug] = str(goal.id)
# Recursively check steps for subgoals
if goal.plan and goal.plan.steps:
for step in goal.plan.steps:
if isinstance(step, Goal):
_register_goal(step)
for phase in program.phases: for phase in program.phases:
for trigger in phase.triggers: for trigger in phase.triggers:
slug = AgentSpeakGenerator.slugify(trigger) slug = AgentSpeakGenerator.slugify(trigger)
@@ -257,8 +269,7 @@ class UserInterruptAgent(BaseAgent):
self._trigger_reverse_map[slug] = str(trigger.id) self._trigger_reverse_map[slug] = str(trigger.id)
for goal in phase.goals: for goal in phase.goals:
self._goal_map[str(goal.id)] = AgentSpeakGenerator.slugify(goal) _register_goal(goal)
self._goal_reverse_map[AgentSpeakGenerator.slugify(goal)] = str(goal.id)
for goal, id in self._goal_reverse_map.items(): for goal, id in self._goal_reverse_map.items():
self.logger.debug(f"Goal mapping: UI ID {goal} -> {id}") self.logger.debug(f"Goal mapping: UI ID {goal} -> {id}")