from typing import Any from pydantic import BaseModel, Field class RagSearchRequest(BaseModel): query: str = Field(..., description="The query string to search for") match_count: int = Field(default=10, description="Number of results to return") similarity_threshold: float = Field( default=0.82, description="Minimum similarity threshold for vector search (noise filtering)" ) filter_dict: dict[str, Any] | None = Field(default_factory=dict, description="Metadata filter (JSONB)") source_filter: str | None = Field(default=None, description="Optional source ID filter") class RagChunkResponse(BaseModel): id: int url: str chunk_number: int content: str metadata: dict[str, Any] source_id: str similarity: float match_type: str cdn_content: Any = None class RagSearchResponse(BaseModel): status: str = "success" results: list[RagChunkResponse]