"""ChainReranker — runs several rerankers in sequence.""" from __future__ import annotations from typing import List from ..core.types import Query, Retrieved class ChainReranker: """Apply multiple rerankers one after another.""" name = "chain" def __init__(self, stages): self.stages = list(stages) def rerank(self, query: Query, candidates: List[Retrieved], k: int) -> List[Retrieved]: cur = candidates for s in self.stages[:-1]: cur = s.rerank(query, cur, max(k, len(cur))) if self.stages: cur = self.stages[-1].rerank(query, cur, k) return cur[:k]