Coverage for src / qdrant_loader_mcp_server / search / hybrid / components / reranking.py: 78%
23 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-18 04:51 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-18 04:51 +0000
1from __future__ import annotations
3import logging
4from typing import Any
6from .cross_encoder_reranker import CrossEncoderReranker
9class HybridReranker:
10 """Hybrid reranker that optionally applies cross-encoder re-ranking."""
12 def __init__(
13 self,
14 enabled: bool = False,
15 model: str = "cross-encoder/ms-marco-MiniLM-L-12-v2",
16 device: str = "cpu",
17 batch_size: int = 32,
18 ):
19 self.logger = logging.getLogger(__name__)
20 self.cross_encoder = None
22 if enabled:
23 try:
24 self.cross_encoder = CrossEncoderReranker(
25 model_name=model,
26 device=device,
27 batch_size=batch_size,
28 enabled=True,
29 )
30 self.logger.info("Cross-encoder reranker enabled")
31 except Exception:
32 self.logger.exception(
33 "Failed to initialize cross-encoder reranker; continuing without reranking"
34 )
35 else:
36 self.logger.info("Cross-encoder reranker disabled")
38 def rerank(
39 self,
40 query: str,
41 results: list[Any],
42 top_k: int | None = None,
43 text_key: str = "text",
44 ) -> list[Any]:
46 if not results or self.cross_encoder is None:
47 return results
49 try:
50 return self.cross_encoder.rerank(
51 query=query,
52 results=results,
53 top_k=top_k,
54 text_key=text_key,
55 )
56 except Exception:
57 self.logger.exception(
58 "Cross-encoder reranking failed; returning original ranking"
59 )
60 return results