from typing import List, Optional from pydantic import BaseModel, Field, HttpUrl class ScrapeRequest(BaseModel): url: HttpUrl session_id: Optional[str] = None class QueryRequest(BaseModel): question: str = Field(..., min_length=1, max_length=2000) session_id: Optional[str] = None class SourceInfo(BaseModel): file_name: str text: str score: Optional[float] = None class FinalResponse(BaseModel): final_answer: str sources: List[SourceInfo] class SummarizeRequest(BaseModel): max_length: int = Field(default=500, ge=50, le=2000) style: str = "concise" class SummaryResponse(BaseModel): summary: str word_count: int source_documents: List[str] class StatusResponse(BaseModel): status: str message: str details: Optional[dict] = None