51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
"""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
|
|
|