55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
|
|
|
|
class HealthResponse(BaseModel):
|
|
status: str
|
|
version: str
|
|
|
|
|
|
class CheckResponse(BaseModel):
|
|
task_id: str
|
|
status: str
|
|
message: str
|
|
|
|
|
|
class MatchResult(BaseModel):
|
|
method: str = Field(..., description="exact | fuzzy | semantic")
|
|
similarity: float = Field(..., ge=0, le=100)
|
|
source_title: Optional[str] = None
|
|
source_db: Optional[str] = None
|
|
url: Optional[str] = None
|
|
source_id: Optional[str] = None
|
|
fragment_text: Optional[str] = None
|
|
fragment_start: Optional[int] = None
|
|
fragment_end: Optional[int] = None
|
|
|
|
|
|
class ReportResponse(BaseModel):
|
|
task_id: str
|
|
status: str
|
|
overall_similarity: Optional[float] = None
|
|
matches: Optional[List[MatchResult]] = None
|
|
source_text: Optional[str] = None
|
|
created_at: Optional[datetime] = None
|
|
completed_at: Optional[datetime] = None
|
|
|
|
|
|
class ReportSummary(BaseModel):
|
|
task_id: str
|
|
status: str
|
|
overall_similarity: Optional[float] = None
|
|
created_at: Optional[datetime] = None
|
|
|
|
|
|
class ReportsListResponse(BaseModel):
|
|
tasks: List[ReportSummary]
|
|
|
|
|
|
class StatsResponse(BaseModel):
|
|
total_documents_indexed: int
|
|
faiss_index_size: int
|
|
elasticsearch_available: bool
|
|
api_version: str
|