use std::sync::Arc;
use super::base::BaseReranker;
use super::config::{RerankingConfig, RerankingType};
use super::huggingface::HuggingFaceReranker;
use super::onnx::OnnxReranker;
use super::pinecone::PineconeReranker;
use super::tei::TeiReranker;
use super::vllm::VllmReranker;
use crate::core::exceptions::OperonError;
pub fn create_reranker(config: RerankingConfig) -> Result<Arc<dyn BaseReranker>, OperonError> {
let reranker: Arc<dyn BaseReranker> = match config.api_type {
RerankingType::Cohere | RerankingType::Vllm => Arc::new(VllmReranker::new(config)),
RerankingType::Pinecone => Arc::new(PineconeReranker::new(config)),
RerankingType::Tei => Arc::new(TeiReranker::new(config)),
RerankingType::HuggingFace => Arc::new(HuggingFaceReranker::new(config)),
RerankingType::Onnx => Arc::new(OnnxReranker::new(config)),
};
Ok(reranker)
}