Skip to main content

adk_rag/
reranker.rs

1//! Reranker trait for re-scoring search results.
2
3use async_trait::async_trait;
4
5use crate::document::SearchResult;
6use crate::error::Result;
7
8/// A reranker that re-scores and reorders search results.
9///
10/// Implementations can use cross-encoder models, LLM-based scoring, or
11/// other strategies to improve precision beyond initial vector similarity.
12#[async_trait]
13pub trait Reranker: Send + Sync {
14    /// Rerank search results given the original query.
15    ///
16    /// Returns results in a new order with potentially updated scores.
17    async fn rerank(&self, query: &str, results: Vec<SearchResult>) -> Result<Vec<SearchResult>>;
18}
19
20/// A no-op reranker that returns results unchanged.
21///
22/// Useful as a default when no reranking is needed.
23///
24/// # Example
25///
26/// ```rust,ignore
27/// use adk_rag::NoOpReranker;
28///
29/// let reranker = NoOpReranker;
30/// let reranked = reranker.rerank("query", results).await?;
31/// // reranked == results (same order, same scores)
32/// ```
33#[derive(Debug, Clone, Copy, Default)]
34pub struct NoOpReranker;
35
36#[async_trait]
37impl Reranker for NoOpReranker {
38    async fn rerank(&self, _query: &str, results: Vec<SearchResult>) -> Result<Vec<SearchResult>> {
39        Ok(results)
40    }
41}