from pydantic import BaseModel, Field from typing import Optional, List, Dict, Any from datetime import datetime class ChatRequest(BaseModel): message: str = Field(..., min_length=1, max_length=2000) conversation_id: Optional[str] = None class ChatResponse(BaseModel): response: str conversation_id: str tokens_used: Optional[int] = None model: Optional[str] = None class ScheduleGenerateRequest(BaseModel): child_age: int = Field(..., ge=1, le=18) preferences: List[str] = Field(default_factory=list) date: str # ISO format date string description: Optional[str] = None class ScheduleGenerateResponse(BaseModel): schedule_id: str title: str tasks: List[Dict[str, Any]] tokens_used: Optional[int] = None class ConversationHistory(BaseModel): conversation_id: str messages: List[Dict[str, Any]] created_at: datetime updated_at: datetime class Config: from_attributes = True class ConversationListItem(BaseModel): """Элемент списка разговоров""" conversation_id: str last_message: Optional[str] = None created_at: datetime updated_at: datetime message_count: int = 0 class Config: from_attributes = True class ScheduleUpdateRequest(BaseModel): """Запрос на обновление расписания через ИИ""" user_request: str = Field(..., min_length=1, max_length=1000, description="Описание желаемых изменений") class ScheduleUpdateResponse(BaseModel): """Ответ после обновления расписания""" schedule_id: str title: str tasks: List[Dict[str, Any]] tokens_used: Optional[int] = None class RecommendationRequest(BaseModel): """Запрос на получение рекомендаций""" preferences: List[str] = Field(default_factory=list, description="Предпочтения пользователя") category: Optional[str] = Field(None, description="Категория заданий") completed_tasks: Optional[List[str]] = Field(default_factory=list, description="Уже выполненные задания") top_k: int = Field(5, ge=1, le=20, description="Количество рекомендаций") class RecommendationResponse(BaseModel): """Ответ с рекомендациями""" recommendations: List[Dict[str, Any]] total: int