Production_Rag / reranker.py
TharaKavin's picture
Upload 17 files
6f94597 verified
Raw
History Blame Contribute Delete
821 Bytes
from typing import List, Dict, Any
from sentence_transformers import CrossEncoder
class Reranker:
def __init__(
self,
model_name: str = "cross-encoder/ms-marco-MiniLM-L-4-v2",
device: str = "cpu",
):
self.model = CrossEncoder(model_name, device=device)
def rerank(
self, query: str, documents: List[Dict[str, Any]], top_k: int = 10
) -> List[Dict[str, Any]]:
if not documents:
return []
pairs = [[query, doc["text"]] for doc in documents]
scores = self.model.predict(pairs, batch_size=32, show_progress_bar=False)
for doc, score in zip(documents, scores):
doc["rerank_score"] = float(score)
ranked = sorted(documents, key=lambda x: x["rerank_score"], reverse=True)
return ranked[:top_k]