use crate::error::Result;
use crate::traits::ScoredResult;
pub trait RerankerBackend: Send + Sync {
fn rerank(
&self,
query: &str,
candidates: Vec<ScoredResult>,
) -> Result<Vec<ScoredResult>>;
}
#[cfg(test)]
mod tests {
use super::*;
struct IdentityReranker;
impl RerankerBackend for IdentityReranker {
fn rerank(&self, _query: &str, candidates: Vec<ScoredResult>) -> Result<Vec<ScoredResult>> {
Ok(candidates)
}
}
#[test]
fn trait_object_works() {
let reranker: Box<dyn RerankerBackend> = Box::new(IdentityReranker);
let candidates = vec![ScoredResult {
memory_id: 1,
score: 0.8,
raw_score: 0.8,
score_multiplier: 1.0,
}];
let result = reranker.rerank("query", candidates).expect("rerank");
assert_eq!(result.len(), 1);
}
}