From 3a8d1730a1cb2bf205ba2eabaa936bcea5461dd0 Mon Sep 17 00:00:00 2001
From: Pim Hutting
Date: Thu, 8 Jan 2026 12:29:16 +0100
Subject: [PATCH] fix: made mapping for conditional norms only
ref: N25B-400
---
src/control_backend/agents/bdi/agentspeak_generator.py | 5 +++++
.../agents/user_interrupt/user_interrupt_agent.py | 10 ++++++----
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/control_backend/agents/bdi/agentspeak_generator.py b/src/control_backend/agents/bdi/agentspeak_generator.py
index 18cb794..15a5120 100644
--- a/src/control_backend/agents/bdi/agentspeak_generator.py
+++ b/src/control_backend/agents/bdi/agentspeak_generator.py
@@ -415,6 +415,11 @@ class AgentSpeakGenerator:
def slugify(element: ProgramElement) -> str:
raise NotImplementedError(f"Cannot convert element {element} to a slug.")
+ @slugify.register
+ @staticmethod
+ def _(n: Norm) -> str:
+ return f"norm_{AgentSpeakGenerator._slugify_str(n.norm)}"
+
@slugify.register
@staticmethod
def _(sb: SemanticBelief) -> str:
diff --git a/src/control_backend/agents/user_interrupt/user_interrupt_agent.py b/src/control_backend/agents/user_interrupt/user_interrupt_agent.py
index 465125d..925e10e 100644
--- a/src/control_backend/agents/user_interrupt/user_interrupt_agent.py
+++ b/src/control_backend/agents/user_interrupt/user_interrupt_agent.py
@@ -8,7 +8,7 @@ from control_backend.agents import BaseAgent
from control_backend.agents.bdi.agentspeak_generator import AgentSpeakGenerator
from control_backend.core.agent_system import InternalMessage
from control_backend.core.config import settings
-from control_backend.schemas.program import Program
+from control_backend.schemas.program import BasicNorm, Program
from control_backend.schemas.ri_message import GestureCommand, RIEndpoint, SpeechCommand
@@ -211,15 +211,17 @@ class UserInterruptAgent(BaseAgent):
self._goal_map[str(goal.id)] = AgentSpeakGenerator.slugify(goal)
for norm in phase.norms:
- if norm.condition:
+ if not isinstance(norm, BasicNorm):
asl_slug = AgentSpeakGenerator.slugify(norm)
- belief_id = str(norm.condition)
+
+ belief_id = str(norm.condition.id)
self._cond_norm_map[belief_id] = asl_slug
self._cond_norm_reverse_map[asl_slug] = belief_id
self.logger.info(
- f"Mapped {len(self._trigger_map)} triggers and {len(self._goal_map)} goals."
+ f"Mapped {len(self._trigger_map)} triggers and {len(self._goal_map)} goals "
+ f"and {len(self._cond_norm_map)} conditional norms for UserInterruptAgent."
)
except Exception as e:
self.logger.error(f"Mapping failed: {e}")