38 lines
821 B
Python
38 lines
821 B
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from dataclasses import dataclass
|
||
|
|
from typing import Any, AsyncGenerator, Protocol
|
||
|
|
|
||
|
|
from app.models.conversation import Conversation, Message
|
||
|
|
from app.models.user import User
|
||
|
|
|
||
|
|
|
||
|
|
RuntimeName = str
|
||
|
|
|
||
|
|
|
||
|
|
@dataclass(slots=True)
|
||
|
|
class RuntimePreparedContext:
|
||
|
|
user: User
|
||
|
|
conversation: Conversation
|
||
|
|
user_message: Message
|
||
|
|
assistant_message: Message
|
||
|
|
raw_message: str
|
||
|
|
full_message: str
|
||
|
|
file_ids: list[str]
|
||
|
|
model_name: str | None
|
||
|
|
memory_context: str | None
|
||
|
|
|
||
|
|
|
||
|
|
class ChatRuntime(Protocol):
|
||
|
|
name: RuntimeName
|
||
|
|
|
||
|
|
async def chat_stream(
|
||
|
|
self,
|
||
|
|
prepared: RuntimePreparedContext,
|
||
|
|
) -> AsyncGenerator[dict[str, Any], None]: ...
|
||
|
|
|
||
|
|
async def chat_once(
|
||
|
|
self,
|
||
|
|
prepared: RuntimePreparedContext,
|
||
|
|
) -> tuple[str, str | None]: ...
|