| """ |
| Nutricore Food Solution - ChatKit Server |
| """ |
|
|
| from collections.abc import AsyncIterator |
| from chatkit.server import ChatKitServer |
| from chatkit.types import ThreadMetadata, ThreadStreamEvent, UserMessageItem |
| from chatkit.agents import AgentContext, simple_to_agent_input, stream_agent_response |
| from agents import Runner |
|
|
| from agent import nutri_agent |
| from store import InMemoryStore |
|
|
|
|
| class NutricoreServer(ChatKitServer[dict]): |
|
|
| def __init__(self, store: InMemoryStore): |
| super().__init__(store) |
|
|
| async def respond( |
| self, |
| thread: ThreadMetadata, |
| input_user_message: UserMessageItem | None, |
| context: dict, |
| ) -> AsyncIterator[ThreadStreamEvent]: |
| items_page = await self.store.load_thread_items( |
| thread.id, after=None, limit=20, order="asc", context=context |
| ) |
| agent_input = await simple_to_agent_input(items_page.data) |
| agent_context = AgentContext(thread=thread, store=self.store, request_context=context) |
| result = Runner.run_streamed(nutri_agent, agent_input, context=agent_context) |
| async for event in stream_agent_response(agent_context, result): |
| yield event |
|
|
|
|
| store = InMemoryStore() |
| nutricore_server = NutricoreServer(store=store) |
|
|