39 lines
No EOL
1.3 KiB
Python
39 lines
No EOL
1.3 KiB
Python
from enum import Enum
|
|
from pydantic import BaseModel, Field, TypeAdapter
|
|
from typing import Annotated, Union, Literal
|
|
|
|
|
|
__all__ = ['EClientMessage', 'MsgUserMessage', 'ClientMessage']
|
|
|
|
|
|
class EClientMessage(str, Enum):
|
|
USER_MESSAGE = "USER_MESSAGE"
|
|
|
|
|
|
class MsgUserMessage(BaseModel):
|
|
"""
|
|
Полное сообщение от пользователя.
|
|
"""
|
|
type: Literal[EClientMessage.USER_MESSAGE] = EClientMessage.USER_MESSAGE
|
|
text: str
|
|
"""
|
|
Текст сообщения.
|
|
"""
|
|
attachments: list[str] = Field(default_factory=list)
|
|
"""
|
|
Список вложений (файлов) к сообщению.
|
|
Передается путь до файла относительно /workspace .
|
|
Файлы уже должны быть загружены в директорию.
|
|
"""
|
|
|
|
|
|
ClientMessage = TypeAdapter(Annotated[
|
|
Union[MsgUserMessage,],
|
|
Field(discriminator="type")
|
|
])
|
|
"""
|
|
Объединяет все типы входящих сообщений в одно для удобной автоматической десериализации.\n
|
|
Pydantic сам определит нужный тип в зависимости от поля ``type``.\n
|
|
Использование:\n
|
|
msg = ClientMessage.model_validate_json(json)
|
|
""" |