Ragcore / app /models /schemas.py
NinjainPJs's picture
Initial deploy: RagCore RAG system with hybrid search and Gradio UI
a34068e
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