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}