testtest123's picture
feat: upgrade RAG conversational intent classification to multi-lingual LLM
27d1bb9
Raw
History Blame Contribute Delete
1.36 kB
from .base import BaseRAGTechnique
from ..services.embed_service import get_embedding
from ..services.rerank_service import rerank_service
from typing import List, Dict, Any
class ReRanking(BaseRAGTechnique):
async def retrieve(self, query: str, document_id: str, top_k: int, **kwargs) -> List[Dict[str, Any]]:
# 1. Embed query
await self.emit("EMBED", "#8B5CF6", "Embedding query...")
q_vec = get_embedding(query)
# 2. Vector Search (Fetch more candidates for re-ranking)
await self.emit("RETRIEVE", "#16A34A", f"pgvector: fetching top-{top_k*4} candidates...")
candidates = await self.supabase.vector_search(q_vec, document_id, self.user_id, top_k * 4)
if not candidates:
return []
# 3. Cross-Encoder Re-ranking
await self.emit("RERANK", "#EF4444", f"Cross-encoder re-scoring {len(candidates)} pairs...")
reranked = rerank_service.rerank(query, candidates, top_k)
await self.emit("DONE", "#22C55E", f"Re-ranked complete. top-{top_k} returned.")
return reranked
async def generate(self, query: str, chunks: List[Dict[str, Any]]) -> str:
await self.emit("GENERATE", "#7C3AED", "Qwen3 generating answer...")
prompt = self.build_prompt(query, chunks)
return self.llm.generate(prompt)