pub mod client;
pub mod gemini;
pub mod manager;
pub mod ollama;
pub mod onnx;
pub mod openai;
pub mod server;
use anyhow::Result;
use ndarray::Array2;
pub trait EmbeddingProvider: Send + Sync {
fn compute_embeddings(&self, chunks: &[String]) -> Result<Array2<f32>>;
fn dimensions(&self) -> usize;
fn name(&self) -> &str;
}
#[derive(Debug, Clone, PartialEq)]
pub enum EmbeddingMode {
SentenceTransformers,
OpenAI,
Ollama,
Gemini,
Mlx,
}
impl EmbeddingMode {
pub fn from_str_lossy(s: &str) -> Self {
match s.to_lowercase().as_str() {
"openai" => EmbeddingMode::OpenAI,
"ollama" => EmbeddingMode::Ollama,
"gemini" => EmbeddingMode::Gemini,
"mlx" => EmbeddingMode::Mlx,
_ => EmbeddingMode::SentenceTransformers,
}
}
pub fn as_str(&self) -> &str {
match self {
EmbeddingMode::SentenceTransformers => "sentence-transformers",
EmbeddingMode::OpenAI => "openai",
EmbeddingMode::Ollama => "ollama",
EmbeddingMode::Gemini => "gemini",
EmbeddingMode::Mlx => "mlx",
}
}
}