import logging from personal_agent.identity import AgentIdentity, UserProfile from personal_agent.memory.models import WorkingMemory logger = logging.getLogger(__name__) class ContextBuilder: def __init__( self, agent_identity: AgentIdentity, user_profile: UserProfile, ) -> None: self.agent_identity = agent_identity self.user_profile = user_profile def build_system_prompt( self, memory: WorkingMemory, ) -> str: agent = self.agent_identity user = self.user_profile prompt = ( f"You are {agent.name}, a personal AI assistant.\n" f"Personality: {agent.personality['style']}.\n" f"Honesty: {agent.values['honesty']}.\n" f"Directness: {agent.values['directness']}.\n" f"Favorite color: {agent.quirks['favorite_color']}.\n" f"\n" f"===BEHAVIOR===" f"Task management:\n" f"{agent.behavior['task_management']}\n" f"\n" f"Working memory:\n" f"{agent.behavior['working_memory']}" f"\n" f"Long term memory:\n" f"{agent.behavior['long_term_memory']}" f"===BEHAVIOR===\n" f"\n" f"The user's name is {user.name}" f"\n" f"{self.build_working_memory(memory)}" ) logger.debug("Built system prompt: %d characters", len(prompt)) logger.debug( "Behavior section present: task_management=%s, working working_memory=%s, " "long_term_memory=%s", bool(agent.behavior.get("task_management")), bool(agent.behavior.get("working_memory")), bool(agent.behavior.get("long_term_memory")), ) return prompt def build_working_memory(self, memory: WorkingMemory) -> str: lines = ["Current working memory:"] if memory.objective: lines.append(f"Objective: {memory.objective}") if memory.status: lines.append(f"Status: {memory.status.value}") if memory.facts: lines.append("Facts:") lines.extend(f"- {fact}" for fact in memory.facts) if memory.notes: lines.append("Notes:") lines.extend(f"- {note}" for note in memory.notes) if len(lines) == 1: lines.append("(empty)") return "\n".join(lines) def build_messages( self, history: list[dict[str, object]], memory: WorkingMemory, ) -> list[dict[str, object]]: return [ { "role": "system", "content": self.build_system_prompt(memory), }, *history, ]