Spaces:
Running
Running
| 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) | |