from typing import List, Dict, Any from pydantic import BaseModel, Field class ChatRequest(BaseModel): message: str = Field(..., min_length=1) history: List[Dict[str, str]] = Field(default_factory=list) session_id: str | None = Field(default=None, description="Unique session identifier for chat persistence") class ChatResponse(BaseModel): reply: str retrieved_chunks: List[Dict[str, Any]] = Field(default_factory=list) class HealthResponse(BaseModel): status: str docs_loaded: bool index_ready: bool chunk_count: int index_path: str class SessionUpdateNameRequest(BaseModel): session_id: str user_name: str class SessionInitRequest(BaseModel): session_id: str user_name: str | None = Field(default=None, description="User name to associate with the session at creation time") class RateRequest(BaseModel): session_id: str rating: int = Field(..., ge=1, le=5) chat_id: int | None = Field(default=None, description="Chat thread to rate; resolved server-side if omitted") class PollRequest(BaseModel): session_id: str last_id: int = Field(default=0) class ResetRequest(BaseModel): session_id: str class DeleteChatRequest(BaseModel): session_id: str