| """Pydantic response models returned by FastAPI routes. |
| |
| Shared shape: :class:`SourceCitation` appears on ask, summarise, and audit detail responses. |
| """ |
|
|
| from datetime import datetime |
|
|
| from pydantic import BaseModel, Field |
|
|
|
|
| |
|
|
|
|
| class SourceCitation(BaseModel): |
| document_name: str |
| page_number: int |
| chunk_text: str |
| relevance_score: float |
|
|
|
|
| |
|
|
|
|
| class AskQueryResponse(BaseModel): |
| query_id: str |
| question: str |
| answer: str |
| sources: list[SourceCitation] = Field(default_factory=list) |
| model_used: str |
| tokens_used: int |
| response_time_ms: int |
| timestamp: datetime |
|
|
|
|
| |
|
|
|
|
| class SummariseQueryResponse(BaseModel): |
| query_id: str |
| summary: str |
| document_count: int |
| sources: list[SourceCitation] = Field(default_factory=list) |
| timestamp: datetime |
|
|
|
|
| |
|
|
|
|
| class IngestUploadResponse(BaseModel): |
| job_id: str |
| status: str |
| total_files: int |
| filenames: list[str] |
| message: str |
|
|
|
|
| class UrlIngestResponse(BaseModel): |
| job_id: str |
| status: str |
| total_urls: int |
| message: str |
|
|
|
|
| class CollectionItem(BaseModel): |
| name: str |
| document_count: int |
| created_at: datetime | None = None |
|
|
|
|
| class IngestCollectionsResponse(BaseModel): |
| collections: list[CollectionItem] = Field(default_factory=list) |
| total: int |
|
|
|
|
| class IngestDeleteCollectionResponse(BaseModel): |
| message: str |
| documents_removed: int |
|
|
|
|
| |
|
|
|
|
| class JobStatusResponse(BaseModel): |
| job_id: str |
| status: str |
| total_files: int |
| processed_files: int |
| failed_files: int |
| progress_percent: int |
| started_at: datetime | None |
| completed_at: datetime | None |
| errors: list[str] = Field(default_factory=list) |
|
|
|
|
| class JobListItem(BaseModel): |
| job_id: str |
| status: str |
| total_files: int |
| completed_at: datetime | None = None |
|
|
|
|
| class JobListResponse(BaseModel): |
| jobs: list[JobListItem] = Field(default_factory=list) |
| total: int |
|
|
|
|
| |
|
|
|
|
| class AuditLogEntry(BaseModel): |
| query_id: str |
| user_id: str |
| question: str |
| answer_summary: str |
| sources_count: int |
| model_used: str | None |
| timestamp: datetime |
|
|
|
|
| class AuditLogsResponse(BaseModel): |
| logs: list[AuditLogEntry] = Field(default_factory=list) |
| total: int |
| limit: int |
| offset: int |
|
|
|
|
| class AuditLogDetailResponse(BaseModel): |
| query_id: str |
| user_id: str |
| question: str |
| full_answer: str |
| sources: list[SourceCitation] = Field(default_factory=list) |
| model_used: str | None |
| tokens_used: int | None |
| timestamp: datetime |
|
|