rag-uigreenmetric / src /reranker.py
fortunius's picture
Upload src/reranker.py with huggingface_hub
1f71bd2 verified
Raw
History Blame Contribute Delete
802 Bytes
"""Reranker for the UI GreenMetric RAG system.
BGE V2-M3 cross-encoder. Opt-in via RAG_RERANK=1.
"""
from FlagEmbedding import FlagReranker
_reranker: FlagReranker | None = None
def _get_model() -> FlagReranker:
global _reranker
if _reranker is None:
_reranker = FlagReranker("BAAI/bge-reranker-v2-m3", use_fp16=True)
return _reranker
def rerank(
query: str,
chunks: list[dict],
*,
top_n: int = 7,
) -> list[dict]:
if not chunks:
return []
model = _get_model()
pairs = [[query, chunk["content"]] for chunk in chunks]
scores = model.compute_score(pairs)
for chunk, score in zip(chunks, scores):
chunk["rerank_score"] = float(score)
chunks.sort(key=lambda c: c["rerank_score"], reverse=True)
return chunks[:top_n]