use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct ScoredItem {
pub id: String,
pub score: f32,
}
impl ScoredItem {
pub fn new(id: impl Into<String>, score: f32) -> Self {
Self { id: id.into(), score }
}
}
#[derive(Debug, Clone)]
pub struct FusedScore {
pub hybrid: f32,
pub bm25: Option<f32>,
pub vector: Option<f32>,
}
pub trait FusionStrategy: Send + Sync {
fn fuse(
&self,
bm25_items: &[ScoredItem],
vector_items: &[ScoredItem],
) -> HashMap<String, FusedScore>;
}
pub mod linear;
pub mod rrf;
pub use linear::Linear;
pub use rrf::Rrf;