test2 / app /services /reranker.py
joedown11's picture
Upload 47 files
3910b9e verified
Raw
History Blame Contribute Delete
908 Bytes
from typing import List, Dict
import numpy as np
from sentence_transformers import CrossEncoder
class RerankerService:
def __init__(self, model_name: str) -> None:
self.model = CrossEncoder(model_name)
def rerank(self, query: str, chunks: List[Dict[str, str]], top_n: int = 4) -> List[Dict[str, str]]:
if not chunks:
return []
# Prepare pairs for cross-encoder
pairs = [[query, chunk["text"]] for chunk in chunks]
# Get scores
scores = self.model.predict(pairs)
# Add scores to chunks and sort
for i, chunk in enumerate(chunks):
chunk["rerank_score"] = float(scores[i])
# Sort by rerank_score descending
sorted_chunks = sorted(chunks, key=lambda x: x["rerank_score"], reverse=True)
return sorted_chunks[:top_n]