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) """