use std::sync::Arc;
use super::base::BaseEmbedder;
use super::config::{EmbeddingConfig, EmbeddingType};
use super::huggingface::HuggingFaceEmbedder;
use super::onnx::OnnxEmbedder;
use super::tei::TeiEmbedder;
use super::vllm::VllmEmbedder;
use crate::core::exceptions::OperonError;
pub fn create_embedder(config: EmbeddingConfig) -> Result<Arc<dyn BaseEmbedder>, OperonError> {
let embedder: Arc<dyn BaseEmbedder> = match config.api_type {
EmbeddingType::OpenAI
| EmbeddingType::Azure
| EmbeddingType::Gemini
| EmbeddingType::Vllm => Arc::new(VllmEmbedder::new(config)),
EmbeddingType::Tei => Arc::new(TeiEmbedder::new(config)),
EmbeddingType::HuggingFace => Arc::new(HuggingFaceEmbedder::new(config)),
EmbeddingType::Onnx => Arc::new(OnnxEmbedder::new(config)),
};
Ok(embedder)
}