from pydantic import BaseModel, Field class DocumentInfo(BaseModel): document_id: str name: str chunks_count: int file_type: str created_at: str metadata: dict = Field(default_factory=dict) class ChunkPreview(BaseModel): index: int section: str = "" page_number: int = 0 text_preview: str = "" char_length: int = 0 class DocumentUploadResponse(BaseModel): document_id: str name: str chunks_count: int status: str = "indexed" created_at: str chunks_preview: list[ChunkPreview] = Field(default_factory=list) class DocumentListResponse(BaseModel): documents: list[DocumentInfo] total: int class ChunkDetail(BaseModel): index: int section: str = "" page_number: int = 0 text: str = "" char_length: int = 0 class DocumentChunksResponse(BaseModel): document_id: str name: str file_type: str chunks_count: int chunks: list[ChunkDetail] = Field(default_factory=list) class DocumentDeleteResponse(BaseModel): ok: bool = True deleted_chunks: int class SourceInfo(BaseModel): document_id: str document_name: str chunk_text: str section: str = "" page: int = 0 relevance_score: float = 0.0 class QueryResponse(BaseModel): answer: str sources: list[SourceInfo] model_used: str assembled_prompt: str = "" class HealthResponse(BaseModel): status: str = "ok" chromadb: str embedding_model: str documents_count: int chunks_count: int