61 lines
2 KiB
Python
61 lines
2 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, AsyncIterator
|
|
|
|
from sdk.agent_session import build_thread_key
|
|
from sdk.interface import Attachment, MessageChunk, MessageResponse, PlatformClient, User, UserSettings
|
|
from sdk.prototype_state import PrototypeStateStore
|
|
|
|
if TYPE_CHECKING:
|
|
from sdk.agent_session import AgentSessionClient
|
|
|
|
|
|
class RealPlatformClient(PlatformClient):
|
|
def __init__(
|
|
self,
|
|
agent_sessions: AgentSessionClient,
|
|
prototype_state: PrototypeStateStore,
|
|
platform: str = "matrix",
|
|
) -> None:
|
|
self._agent_sessions = agent_sessions
|
|
self._prototype_state = prototype_state
|
|
self._platform = platform
|
|
|
|
async def get_or_create_user(
|
|
self,
|
|
external_id: str,
|
|
platform: str,
|
|
display_name: str | None = None,
|
|
) -> User:
|
|
return await self._prototype_state.get_or_create_user(
|
|
external_id=external_id,
|
|
platform=platform,
|
|
display_name=display_name,
|
|
)
|
|
|
|
async def send_message(
|
|
self,
|
|
user_id: str,
|
|
chat_id: str,
|
|
text: str,
|
|
attachments: list[Attachment] | None = None,
|
|
) -> MessageResponse:
|
|
thread_key = build_thread_key(self._platform, user_id, chat_id)
|
|
return await self._agent_sessions.send_message(thread_key=thread_key, text=text)
|
|
|
|
async def stream_message(
|
|
self,
|
|
user_id: str,
|
|
chat_id: str,
|
|
text: str,
|
|
attachments: list[Attachment] | None = None,
|
|
) -> AsyncIterator[MessageChunk]:
|
|
thread_key = build_thread_key(self._platform, user_id, chat_id)
|
|
async for chunk in self._agent_sessions.stream_message(thread_key=thread_key, text=text):
|
|
yield chunk
|
|
|
|
async def get_settings(self, user_id: str) -> UserSettings:
|
|
return await self._prototype_state.get_settings(user_id)
|
|
|
|
async def update_settings(self, user_id: str, action) -> None:
|
|
await self._prototype_state.update_settings(user_id, action)
|