diff --git a/signalwire/signalwire/core/agent/prompt/manager.py b/signalwire/signalwire/core/agent/prompt/manager.py index debbc0c..323053c 100644 --- a/signalwire/signalwire/core/agent/prompt/manager.py +++ b/signalwire/signalwire/core/agent/prompt/manager.py @@ -11,8 +11,10 @@ from typing import Any, cast import inspect +import json from signalwire.core.logging_config import get_logger +from signalwire.pom import PromptObjectModel logger = get_logger(__name__) @@ -124,7 +126,14 @@ def set_prompt_pom(self, pom: list[dict[str, Any]]) -> None: ValueError: If use_pom is False """ if self.agent._use_pom: - self.agent.pom = pom + # The renderer treats self.agent.pom as a PromptObjectModel (it calls + # .to_dict()), so storing a bare list crashes at render time. Build the + # model from the section list; pass through anything already a POM. + self.agent.pom = ( + PromptObjectModel.from_json(json.dumps(pom)) + if isinstance(pom, list) + else pom + ) else: raise ValueError("use_pom must be True to use set_prompt_pom") diff --git a/tests/unit/core/test_agent_base.py b/tests/unit/core/test_agent_base.py index 59541d8..e6ed2ae 100644 --- a/tests/unit/core/test_agent_base.py +++ b/tests/unit/core/test_agent_base.py @@ -137,13 +137,15 @@ def test_set_prompt_pom_raises_when_use_pom_false(self): self.agent._prompt_manager.set_prompt_pom([{"title": "X", "body": "y"}]) def test_set_prompt_pom_succeeds_when_use_pom_true(self): - """set_prompt_pom assigns the POM list when use_pom is True.""" + """set_prompt_pom builds a PromptObjectModel from the section list when use_pom is True.""" + from signalwire.pom import PromptObjectModel with pytest.MonkeyPatch().context() as m: m.setattr("signalwire.core.agent_base.uvicorn", Mock()) agent = AgentBase("pom_agent", use_pom=True, schema_validation=False) sections = [{"title": "Greeting", "body": "Hello"}] agent._prompt_manager.set_prompt_pom(sections) - assert agent.pom == sections + assert isinstance(agent.pom, PromptObjectModel) + assert agent.pom.to_dict() == sections class TestAgentBaseConfigurationMethods: