Spaces:
Sleeping
Sleeping
| from datetime import datetime | |
| from pydantic import BaseModel, Field | |
| from app.models.document import DocumentMetadata | |
| class IngestResponse(BaseModel): | |
| document_id: str | |
| filename: str | |
| num_chunks: int | |
| message: str | |
| class SearchFilters(BaseModel): | |
| source: str | None = None | |
| doc_type: str | None = None | |
| date_from: datetime | None = None | |
| date_to: datetime | None = None | |
| tags: list[str] | None = None | |
| def has_filters(self) -> bool: | |
| """Return True only if at least one filter field is set.""" | |
| return any([self.source, self.doc_type, self.date_from, self.date_to, self.tags]) | |
| class RetrievedChunk(BaseModel): | |
| chunk_id: str | |
| document_id: str | |
| text: str | |
| score: float | |
| metadata: DocumentMetadata | |
| rank: int = 0 | |
| class SearchRequest(BaseModel): | |
| query: str | |
| top_k: int = 10 | |
| filters: SearchFilters | None = None | |
| class SearchResponse(BaseModel): | |
| query: str | |
| results: list[RetrievedChunk] | |
| total_results: int | |
| search_time_ms: float | |
| class QueryRequest(BaseModel): | |
| query: str | |
| top_k: int = 10 | |
| rerank_top_k: int = 5 | |
| filters: SearchFilters | None = None | |
| stream: bool = False | |
| class GeneratedAnswer(BaseModel): | |
| query: str | |
| answer: str | |
| sources: list[RetrievedChunk] = Field(default_factory=list) | |
| generation_time_ms: float = 0.0 | |
| model: str = "" | |
| class AnalyzedQuery(BaseModel): | |
| original_query: str | |
| clean_query: str | |
| intent: str = "factual" | |
| extracted_filters: SearchFilters = Field(default_factory=SearchFilters) | |
| confidence: float = 0.5 | |