models

Pydantic-модели для запросов и ответов Яндекс Диалогов, а также для валидации конфигурации (config.yaml) через e_lib.Config.

Определяет структуры данных, используемые для валидации входящих запросов от Алисы, формирования ответов навыка LostAndFound и загрузки конфигурации приложения.

  1"""
  2Pydantic-модели для запросов и ответов Яндекс Диалогов, а также
  3для валидации конфигурации (config.yaml) через e_lib.Config.
  4
  5Определяет структуры данных, используемые для валидации входящих
  6запросов от Алисы, формирования ответов навыка LostAndFound
  7и загрузки конфигурации приложения.
  8"""
  9
 10from typing import Any, Dict, List
 11from pydantic import BaseModel, Field
 12
 13
 14class Meta(BaseModel):
 15    """Мета-информация о запросе: локаль, часовой пояс, идентификатор клиента."""
 16
 17    locale: str
 18    timezone: str
 19    client_id: str
 20    interfaces: Dict[str, Any]
 21
 22
 23class User(BaseModel):
 24    """Информация о пользователе Яндекс Диалогов."""
 25
 26    user_id: str
 27
 28
 29class Application(BaseModel):
 30    """Информация о приложении, с которого отправлен запрос."""
 31
 32    application_id: str
 33
 34
 35class Session(BaseModel):
 36    """Данные сессии запроса: идентификаторы сообщения, сессии, навыка и пользователя."""
 37
 38    message_id: int
 39    session_id: str
 40    skill_id: str
 41    user: User
 42    application: Application
 43    user_id: str
 44    new: bool
 45
 46
 47class Nlu(BaseModel):
 48    """NLU-составляющая запроса: токены, сущности и интенты."""
 49
 50    tokens: List[str]
 51    entities: List
 52    intents: Dict
 53
 54
 55class Markup(BaseModel):
 56    """Разметка запроса, указывающая на опасный контекст."""
 57
 58    dangerous_context: bool
 59
 60
 61class Request(BaseModel):
 62    """Тело запроса от Яндекс Алисы: команда, оригинальная фраза, NLU и разметка."""
 63
 64    command: str
 65    original_utterance: str
 66    nlu: Nlu
 67    markup: Markup
 68    type: str
 69
 70
 71class AliceRequest(BaseModel):
 72    """
 73    Полный входящий запрос от Яндекс Алисы.
 74
 75    Содержит мета-информацию, данные сессии, тело запроса и версию протокола.
 76    """
 77
 78    meta: Meta
 79    session: Session
 80    request: Request
 81    version: str
 82
 83
 84class AliceResponse(BaseModel):
 85    """
 86    Модель ответа навыка Яндекс Алисы.
 87
 88    Включает текст ответа, данные сессии и версию протокола.
 89    """
 90
 91    response: Dict[str, Any]
 92    session: Dict[str, Any]
 93    version: str = "1.0"
 94
 95
 96class LLMParseResult(BaseModel):
 97    """
 98    Результат парсинга LLM для LostAndFound.
 99
100    Содержит команду (INSERT/UPDATE/QUERY), вещь и место.
101    """
102
103    command: str  # "INSERT", "UPDATE", or "QUERY"
104    thing: str = ""
105    place: str = ""
106
107
108class LangfuseCleanerConfig(BaseModel):
109    """Конфигурация ассистента очистки Langfuse."""
110
111    NAME: str
112    ENABLED: bool
113    PROJECT: str
114    RETENTION_DAYS: int = 7
115    TIME: str
116
117
118class LLMWarmupConfig(BaseModel):
119    """Конфигурация ассистента прогрева LLM."""
120
121    NAME: str
122    ENABLED: bool
123    PROMPT: str = "Привет"
124    MODEL: str = "e.anisimov/eagent"
125    RETRIES: int = 3
126    DELAY: int = 5
127
128
129class AssistantsConfig(BaseModel):
130    """Секция Assistants конфигурации приложения."""
131
132    LangfuseCleaner: LangfuseCleanerConfig
133    LLMWarmup: LLMWarmupConfig
134
135
136class AppConfig(BaseModel):
137    """Корневая конфигурация приложения из config.yaml."""
138
139    USERS: Dict[str, List[str]] = Field(default_factory=dict)
140    Assistants: AssistantsConfig
class Meta(pydantic.main.BaseModel):
15class Meta(BaseModel):
16    """Мета-информация о запросе: локаль, часовой пояс, идентификатор клиента."""
17
18    locale: str
19    timezone: str
20    client_id: str
21    interfaces: Dict[str, Any]

Мета-информация о запросе: локаль, часовой пояс, идентификатор клиента.

locale: str = PydanticUndefined
timezone: str = PydanticUndefined
client_id: str = PydanticUndefined
interfaces: Dict[str, Any] = PydanticUndefined
class User(pydantic.main.BaseModel):
24class User(BaseModel):
25    """Информация о пользователе Яндекс Диалогов."""
26
27    user_id: str

Информация о пользователе Яндекс Диалогов.

user_id: str = PydanticUndefined
class Application(pydantic.main.BaseModel):
30class Application(BaseModel):
31    """Информация о приложении, с которого отправлен запрос."""
32
33    application_id: str

Информация о приложении, с которого отправлен запрос.

application_id: str = PydanticUndefined
class Session(pydantic.main.BaseModel):
36class Session(BaseModel):
37    """Данные сессии запроса: идентификаторы сообщения, сессии, навыка и пользователя."""
38
39    message_id: int
40    session_id: str
41    skill_id: str
42    user: User
43    application: Application
44    user_id: str
45    new: bool

Данные сессии запроса: идентификаторы сообщения, сессии, навыка и пользователя.

message_id: int = PydanticUndefined
session_id: str = PydanticUndefined
skill_id: str = PydanticUndefined
user: User = PydanticUndefined
application: Application = PydanticUndefined
user_id: str = PydanticUndefined
new: bool = PydanticUndefined
class Nlu(pydantic.main.BaseModel):
48class Nlu(BaseModel):
49    """NLU-составляющая запроса: токены, сущности и интенты."""
50
51    tokens: List[str]
52    entities: List
53    intents: Dict

NLU-составляющая запроса: токены, сущности и интенты.

tokens: List[str] = PydanticUndefined
entities: List = PydanticUndefined
intents: Dict = PydanticUndefined
class Markup(pydantic.main.BaseModel):
56class Markup(BaseModel):
57    """Разметка запроса, указывающая на опасный контекст."""
58
59    dangerous_context: bool

Разметка запроса, указывающая на опасный контекст.

dangerous_context: bool = PydanticUndefined
class Request(pydantic.main.BaseModel):
62class Request(BaseModel):
63    """Тело запроса от Яндекс Алисы: команда, оригинальная фраза, NLU и разметка."""
64
65    command: str
66    original_utterance: str
67    nlu: Nlu
68    markup: Markup
69    type: str

Тело запроса от Яндекс Алисы: команда, оригинальная фраза, NLU и разметка.

command: str = PydanticUndefined
original_utterance: str = PydanticUndefined
nlu: Nlu = PydanticUndefined
markup: Markup = PydanticUndefined
type: str = PydanticUndefined
class AliceRequest(pydantic.main.BaseModel):
72class AliceRequest(BaseModel):
73    """
74    Полный входящий запрос от Яндекс Алисы.
75
76    Содержит мета-информацию, данные сессии, тело запроса и версию протокола.
77    """
78
79    meta: Meta
80    session: Session
81    request: Request
82    version: str

Полный входящий запрос от Яндекс Алисы.

Содержит мета-информацию, данные сессии, тело запроса и версию протокола.

meta: Meta = PydanticUndefined
session: Session = PydanticUndefined
request: Request = PydanticUndefined
version: str = PydanticUndefined
class AliceResponse(pydantic.main.BaseModel):
85class AliceResponse(BaseModel):
86    """
87    Модель ответа навыка Яндекс Алисы.
88
89    Включает текст ответа, данные сессии и версию протокола.
90    """
91
92    response: Dict[str, Any]
93    session: Dict[str, Any]
94    version: str = "1.0"

Модель ответа навыка Яндекс Алисы.

Включает текст ответа, данные сессии и версию протокола.

response: Dict[str, Any] = PydanticUndefined
session: Dict[str, Any] = PydanticUndefined
version: str = '1.0'
class LLMParseResult(pydantic.main.BaseModel):
 97class LLMParseResult(BaseModel):
 98    """
 99    Результат парсинга LLM для LostAndFound.
100
101    Содержит команду (INSERT/UPDATE/QUERY), вещь и место.
102    """
103
104    command: str  # "INSERT", "UPDATE", or "QUERY"
105    thing: str = ""
106    place: str = ""

Результат парсинга LLM для LostAndFound.

Содержит команду (INSERT/UPDATE/QUERY), вещь и место.

command: str = PydanticUndefined
thing: str = ''
place: str = ''
class LangfuseCleanerConfig(pydantic.main.BaseModel):
109class LangfuseCleanerConfig(BaseModel):
110    """Конфигурация ассистента очистки Langfuse."""
111
112    NAME: str
113    ENABLED: bool
114    PROJECT: str
115    RETENTION_DAYS: int = 7
116    TIME: str

Конфигурация ассистента очистки Langfuse.

NAME: str = PydanticUndefined
ENABLED: bool = PydanticUndefined
PROJECT: str = PydanticUndefined
RETENTION_DAYS: int = 7
TIME: str = PydanticUndefined
class LLMWarmupConfig(pydantic.main.BaseModel):
119class LLMWarmupConfig(BaseModel):
120    """Конфигурация ассистента прогрева LLM."""
121
122    NAME: str
123    ENABLED: bool
124    PROMPT: str = "Привет"
125    MODEL: str = "e.anisimov/eagent"
126    RETRIES: int = 3
127    DELAY: int = 5

Конфигурация ассистента прогрева LLM.

NAME: str = PydanticUndefined
ENABLED: bool = PydanticUndefined
PROMPT: str = 'Привет'
MODEL: str = 'e.anisimov/eagent'
RETRIES: int = 3
DELAY: int = 5
class AssistantsConfig(pydantic.main.BaseModel):
130class AssistantsConfig(BaseModel):
131    """Секция Assistants конфигурации приложения."""
132
133    LangfuseCleaner: LangfuseCleanerConfig
134    LLMWarmup: LLMWarmupConfig

Секция Assistants конфигурации приложения.

LangfuseCleaner: LangfuseCleanerConfig = PydanticUndefined
LLMWarmup: LLMWarmupConfig = PydanticUndefined
class AppConfig(pydantic.main.BaseModel):
137class AppConfig(BaseModel):
138    """Корневая конфигурация приложения из config.yaml."""
139
140    USERS: Dict[str, List[str]] = Field(default_factory=dict)
141    Assistants: AssistantsConfig

Корневая конфигурация приложения из config.yaml.

USERS: Dict[str, List[str]] = PydanticUndefined
Assistants: AssistantsConfig = PydanticUndefined