yuvrajsingh6
feat: RAG system with OCR for Hugging Face Spaces
4d592a4
from pydantic import BaseModel, Field
from typing import List, Optional
from datetime import datetime
from enum import Enum
class QueryMode(str, Enum):
WEB = "web"
PDF = "pdf"
HYBRID = "hybrid"
RESTRICTED = "restricted"
class SourceType(str, Enum):
PDF = "pdf"
WEB = "web"
class QueryRequest(BaseModel):
query: str = Field(..., min_length=1, max_length=1000)
mode: QueryMode
document_ids: Optional[List[str]] = None
restrictions: Optional[List[str]] = None
top_k: Optional[int] = Field(default=5, ge=1, le=20)
class Source(BaseModel):
type: SourceType
content: str
reference: str
title: str
relevance_score: Optional[float] = None
class QueryResponse(BaseModel):
answer: str
sources: List[Source]
confidence: float = Field(..., ge=0, le=100)
mode_used: QueryMode
query: str
timestamp: datetime
processing_time_ms: int
class UploadResponse(BaseModel):
document_id: str
filename: str
status: str
chunks_created: int
upload_date: datetime
class Document(BaseModel):
id: str
filename: str
upload_date: datetime
chunk_count: int
file_size: int
status: str
class DocumentListResponse(BaseModel):
documents: List[Document]
total: int
class HealthResponse(BaseModel):
status: str
embedding_model: str
vector_db: str
llm: str