|
1 | | -from kernel_agents.generic_agent import GenericAgent |
2 | | -from models.messages_kernel import AgentType |
3 | 1 |
|
| 2 | +from typing import List, Optional |
4 | 3 |
|
5 | | -class SimpleChatAgent(GenericAgent): |
6 | | - """Agent for basic conversational interactions.""" |
| 4 | +from context.cosmos_memory_kernel import CosmosMemoryContext |
| 5 | +from kernel_agents.agent_base import BaseAgent |
| 6 | +from models.messages_kernel import MessageRole, StoredMessage |
| 7 | +from semantic_kernel.functions import KernelFunction |
| 8 | + |
| 9 | + |
| 10 | +class SimpleChatAgent(BaseAgent): |
| 11 | + """A minimal chat agent for open-ended conversation.""" |
| 12 | + |
| 13 | + def __init__( |
| 14 | + self, |
| 15 | + session_id: str, |
| 16 | + user_id: str, |
| 17 | + memory_store: CosmosMemoryContext, |
| 18 | + tools: Optional[List[KernelFunction]] = None, |
| 19 | + system_message: Optional[str] = None, |
| 20 | + agent_name: str = "SimpleChatAgent", |
| 21 | + client=None, |
| 22 | + definition=None, |
| 23 | + ) -> None: |
| 24 | + super().__init__( |
| 25 | + agent_name=agent_name, |
| 26 | + session_id=session_id, |
| 27 | + user_id=user_id, |
| 28 | + memory_store=memory_store, |
| 29 | + tools=tools, |
| 30 | + system_message=system_message, |
| 31 | + client=client, |
| 32 | + definition=definition, |
| 33 | + ) |
7 | 34 |
|
8 | 35 | @staticmethod |
9 | | - def default_system_message(agent_name: str = AgentType.SIMPLE_CHAT.value) -> str: |
10 | | - """Get the default system message for the SimpleChatAgent.""" |
11 | | - return "You are a Simple Chat agent that engages in basic conversation and provides helpful responses." |
| 36 | + def default_system_message(agent_name: str | None = None) -> str: |
| 37 | + """Return the default system message for open-ended chat.""" |
| 38 | + name = agent_name or "assistant" |
| 39 | + return ( |
| 40 | + f"You are {name}, a friendly AI for open-ended conversation. " |
| 41 | + "Engage with the user naturally and helpfully." |
| 42 | + ) |
| 43 | + |
| 44 | + async def handle_user_message(self, content: str) -> str: |
| 45 | + """Process a user message, storing it and returning the agent's reply.""" |
| 46 | + # Record the user message locally and persist it |
| 47 | + self._chat_history.append({"role": "user", "content": content}) |
| 48 | + await self._memory_store.add_item( |
| 49 | + StoredMessage( |
| 50 | + session_id=self._session_id, |
| 51 | + user_id=self._user_id, |
| 52 | + role=MessageRole.user, |
| 53 | + content=content, |
| 54 | + source=self._agent_name, |
| 55 | + ) |
| 56 | + ) |
| 57 | + |
| 58 | + # Generate a reply from the underlying model |
| 59 | + async_generator = self.invoke(messages=str(self._chat_history), thread=None) |
| 60 | + response_content = "" |
| 61 | + async for chunk in async_generator: |
| 62 | + if chunk is not None: |
| 63 | + response_content += str(chunk) |
| 64 | + |
| 65 | + # Record the assistant's response |
| 66 | + self._chat_history.append({"role": "assistant", "content": response_content}) |
| 67 | + await self._memory_store.add_item( |
| 68 | + StoredMessage( |
| 69 | + session_id=self._session_id, |
| 70 | + user_id=self._user_id, |
| 71 | + role=MessageRole.assistant, |
| 72 | + content=response_content, |
| 73 | + source=self._agent_name, |
| 74 | + ) |
| 75 | + ) |
| 76 | + |
| 77 | + return response_content |
| 78 | + |
| 79 | + |
0 commit comments