File size: 802 Bytes
d82f721
 
1f71bd2
d82f721
 
1f71bd2
d82f721
1f71bd2
d82f721
 
1f71bd2
d82f721
 
1f71bd2
d82f721
 
 
1f71bd2
 
 
 
 
 
d82f721
 
1f71bd2
d82f721
1f71bd2
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""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]