vyctor 0.1.0

A fast CLI tool for semantic file search using vector embeddings
Documentation
//! Reranker providers for improving search result relevance
//!
//! Rerankers are cross-encoder models that jointly process query-document pairs
//! to predict relevancy scores. They provide more accurate relevance predictions
//! than embedding-based similarity but are slower, so they're typically applied
//! to top candidates from an initial vector search.

mod provider;
mod voyage;

#[allow(unused_imports)]
pub use provider::RerankResult;
pub use provider::{DocumentToRerank, Reranker};
pub use voyage::VoyageReranker;

use crate::config::{RerankerConfig, RerankerProviderType};
use anyhow::Result;
use std::sync::Arc;

/// Create a reranker based on the configuration
///
/// Returns None if reranking is disabled or provider is None.
pub fn create_reranker(config: &RerankerConfig) -> Result<Option<Arc<dyn Reranker>>> {
    if !config.is_active() {
        return Ok(None);
    }

    match config.provider {
        RerankerProviderType::Voyage => {
            let api_key = config.get_voyage_api_key()?;
            Ok(Some(Arc::new(VoyageReranker::new(
                &api_key,
                &config.voyage.model,
                &config.voyage.base_url,
            ))))
        }
        RerankerProviderType::None => Ok(None),
    }
}