Added code samples for AI-Agents
This commit is contained in:
39
models/__init__.py
Normal file
39
models/__init__.py
Normal file
@@ -0,0 +1,39 @@
|
||||
"""Модели данных для AI-агентов."""
|
||||
from models.conversation import (
|
||||
ChatRequest,
|
||||
ChatResponse,
|
||||
ConversationCreate,
|
||||
ConversationResponse,
|
||||
Message,
|
||||
)
|
||||
from models.gigachat_types import (
|
||||
GigaChatChoice,
|
||||
GigaChatMessage,
|
||||
GigaChatRequest,
|
||||
GigaChatResponse,
|
||||
GigaChatTokenResponse,
|
||||
GigaChatUsage,
|
||||
)
|
||||
from models.schedule import Schedule, ScheduleGenerateRequest, Task
|
||||
from models.task import TaskCreate, TaskResponse, TaskUpdate
|
||||
|
||||
__all__ = [
|
||||
"Schedule",
|
||||
"ScheduleGenerateRequest",
|
||||
"Task",
|
||||
"TaskCreate",
|
||||
"TaskUpdate",
|
||||
"TaskResponse",
|
||||
"ChatRequest",
|
||||
"ChatResponse",
|
||||
"ConversationCreate",
|
||||
"ConversationResponse",
|
||||
"Message",
|
||||
"GigaChatMessage",
|
||||
"GigaChatRequest",
|
||||
"GigaChatResponse",
|
||||
"GigaChatTokenResponse",
|
||||
"GigaChatUsage",
|
||||
"GigaChatChoice",
|
||||
]
|
||||
|
||||
50
models/conversation.py
Normal file
50
models/conversation.py
Normal file
@@ -0,0 +1,50 @@
|
||||
"""Pydantic модели для диалогов с ИИ."""
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class Message(BaseModel):
|
||||
"""Модель сообщения в диалоге."""
|
||||
|
||||
role: str = Field(..., description="Роль: system, user, assistant")
|
||||
content: str = Field(..., description="Текст сообщения")
|
||||
timestamp: Optional[datetime] = None
|
||||
|
||||
|
||||
class ConversationCreate(BaseModel):
|
||||
"""Модель для создания диалога."""
|
||||
|
||||
user_id: UUID
|
||||
title: Optional[str] = None
|
||||
|
||||
|
||||
class ConversationResponse(BaseModel):
|
||||
"""Модель ответа с диалогом."""
|
||||
|
||||
id: UUID
|
||||
user_id: UUID
|
||||
title: Optional[str]
|
||||
messages: List[Message] = Field(default_factory=list)
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class ChatRequest(BaseModel):
|
||||
"""Запрос на отправку сообщения в чат."""
|
||||
|
||||
message: str = Field(..., min_length=1, max_length=2000)
|
||||
conversation_id: Optional[UUID] = None
|
||||
user_id: UUID
|
||||
|
||||
|
||||
class ChatResponse(BaseModel):
|
||||
"""Ответ от ИИ-агента."""
|
||||
|
||||
response: str
|
||||
conversation_id: UUID
|
||||
tokens_used: Optional[int] = None
|
||||
model: Optional[str] = None
|
||||
|
||||
58
models/gigachat_types.py
Normal file
58
models/gigachat_types.py
Normal file
@@ -0,0 +1,58 @@
|
||||
"""Типы для работы с GigaChat API."""
|
||||
from typing import List, Literal, Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class GigaChatMessage(BaseModel):
|
||||
"""Сообщение для GigaChat API."""
|
||||
|
||||
role: Literal["system", "user", "assistant"]
|
||||
content: str
|
||||
|
||||
|
||||
class GigaChatRequest(BaseModel):
|
||||
"""Запрос к GigaChat API."""
|
||||
|
||||
model: str = Field(default="GigaChat-2", description="Модель GigaChat")
|
||||
messages: List[GigaChatMessage] = Field(..., description="История сообщений")
|
||||
temperature: float = Field(default=0.7, ge=0.0, le=2.0)
|
||||
max_tokens: int = Field(default=2000, ge=1, le=8192)
|
||||
top_p: float = Field(default=0.9, ge=0.0, le=1.0)
|
||||
stream: bool = Field(default=False)
|
||||
|
||||
|
||||
class GigaChatChoice(BaseModel):
|
||||
"""Вариант ответа от GigaChat."""
|
||||
|
||||
message: GigaChatMessage
|
||||
index: int
|
||||
finish_reason: Optional[str] = None
|
||||
|
||||
|
||||
class GigaChatUsage(BaseModel):
|
||||
"""Использование токенов."""
|
||||
|
||||
prompt_tokens: int
|
||||
completion_tokens: int
|
||||
total_tokens: int
|
||||
|
||||
|
||||
class GigaChatResponse(BaseModel):
|
||||
"""Ответ от GigaChat API."""
|
||||
|
||||
id: str
|
||||
object: str
|
||||
created: int
|
||||
model: str
|
||||
choices: List[GigaChatChoice]
|
||||
usage: GigaChatUsage
|
||||
|
||||
|
||||
class GigaChatTokenResponse(BaseModel):
|
||||
"""Ответ на запрос токена."""
|
||||
|
||||
access_token: str
|
||||
expires_at: int
|
||||
token_type: str = "Bearer"
|
||||
|
||||
40
models/schedule.py
Normal file
40
models/schedule.py
Normal file
@@ -0,0 +1,40 @@
|
||||
"""Pydantic модели для расписаний."""
|
||||
from datetime import date
|
||||
from typing import List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class Task(BaseModel):
|
||||
"""Модель задания в расписании."""
|
||||
|
||||
id: Optional[UUID] = None
|
||||
title: str = Field(..., description="Название задания")
|
||||
description: Optional[str] = Field(None, description="Подробное описание")
|
||||
duration_minutes: int = Field(..., ge=1, description="Длительность в минутах")
|
||||
category: str = Field(..., description="Категория задания")
|
||||
image_url: Optional[str] = Field(None, description="URL изображения")
|
||||
completed: bool = Field(default=False, description="Выполнено ли задание")
|
||||
order: int = Field(default=0, description="Порядок в расписании")
|
||||
|
||||
|
||||
class Schedule(BaseModel):
|
||||
"""Модель расписания."""
|
||||
|
||||
id: Optional[UUID] = None
|
||||
title: str = Field(..., description="Название расписания")
|
||||
date: date = Field(..., description="Дата расписания")
|
||||
tasks: List[Task] = Field(default_factory=list, description="Список заданий")
|
||||
user_id: Optional[UUID] = None
|
||||
created_at: Optional[str] = None
|
||||
|
||||
|
||||
class ScheduleGenerateRequest(BaseModel):
|
||||
"""Запрос на генерацию расписания."""
|
||||
|
||||
child_age: int = Field(..., ge=1, le=18, description="Возраст ребенка")
|
||||
preferences: List[str] = Field(default_factory=list, description="Предпочтения ребенка")
|
||||
date: date = Field(..., description="Дата расписания")
|
||||
existing_tasks: Optional[List[str]] = Field(None, description="Существующие задания для учета")
|
||||
|
||||
45
models/task.py
Normal file
45
models/task.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""Pydantic модели для заданий."""
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class TaskCreate(BaseModel):
|
||||
"""Модель для создания задания."""
|
||||
|
||||
title: str = Field(..., min_length=1, max_length=255)
|
||||
description: Optional[str] = None
|
||||
duration_minutes: int = Field(..., ge=1, le=480)
|
||||
category: str = Field(..., description="Категория: утренняя_рутина, обучение, игра, отдых, вечерняя_рутина")
|
||||
image_url: Optional[str] = None
|
||||
order: int = Field(default=0, ge=0)
|
||||
|
||||
|
||||
class TaskUpdate(BaseModel):
|
||||
"""Модель для обновления задания."""
|
||||
|
||||
title: Optional[str] = Field(None, min_length=1, max_length=255)
|
||||
description: Optional[str] = None
|
||||
duration_minutes: Optional[int] = Field(None, ge=1, le=480)
|
||||
category: Optional[str] = None
|
||||
image_url: Optional[str] = None
|
||||
completed: Optional[bool] = None
|
||||
order: Optional[int] = Field(None, ge=0)
|
||||
|
||||
|
||||
class TaskResponse(BaseModel):
|
||||
"""Модель ответа с заданием."""
|
||||
|
||||
id: UUID
|
||||
title: str
|
||||
description: Optional[str]
|
||||
duration_minutes: int
|
||||
category: str
|
||||
image_url: Optional[str]
|
||||
completed: bool
|
||||
order: int
|
||||
schedule_id: UUID
|
||||
created_at: datetime
|
||||
|
||||
Reference in New Issue
Block a user