testtest123's picture
feat: Implement GLM-4.7-Flash RAGAS Judge and LLM fallback (Qwen -> GLM-4.7-Flash)
a46ca29
Raw
History Blame Contribute Delete
1.97 kB
from fastapi import APIRouter, Depends, HTTPException
from ..models.schemas import QueryRequest, QueryResponse
from ..routers.ingest import get_current_user
from ..techniques.hybrid_search import HybridSearch
from ..techniques.reranking import ReRanking
from ..techniques.query_expansion import QueryExpansion
from ..techniques.metadata_filter import MetadataFilter
from ..techniques.colbert import ColBERT
from ..techniques.agentic_rag import AgenticRAG
from ..techniques.cache_incremental import CacheIncrementalRAG
from ..techniques.ragas_eval import RagasEval
import uuid
import logging
router = APIRouter()
logger = logging.getLogger(__name__)
TECHNIQUE_MAP = {
"hybrid": HybridSearch,
"rerank": ReRanking,
"hyde": QueryExpansion,
"meta": MetadataFilter,
"colbert": ColBERT,
"agentic": AgenticRAG,
"cache": CacheIncrementalRAG,
"ragas": RagasEval
}
@router.post("/search", response_model=QueryResponse)
async def search(
request: QueryRequest,
user: dict = Depends(get_current_user)
):
job_id = str(uuid.uuid4())
technique_cls = TECHNIQUE_MAP.get(request.technique)
if not technique_cls:
raise HTTPException(status_code=400, detail="Invalid technique")
try:
# Instantiate technique
instance = technique_cls(job_id, user["id"])
# Run pipeline
# Passing extra filters if technique is metadata_filter
result = await instance.run(
query=request.query,
document_id=request.document_id,
top_k=request.top_k,
filters=request.filters,
underlying_technique="hybrid" # for cache technique
)
return QueryResponse(
answer=result["answer"],
sources=result["sources"],
job_id=job_id
)
except Exception as e:
logger.error(f"Search failed: {e}")
raise HTTPException(status_code=500, detail=str(e))