pub mod config;
pub mod index_manager;
pub mod manager;
pub mod providers;
pub use config::EmbeddingsConfig;
pub use config::ProviderConfig;
pub use index_manager::EmbeddingIndexManager;
pub use index_manager::IndexKey;
pub use index_manager::SearchResult;
pub use manager::EmbeddingsManager;
use thiserror::Error;
pub type EmbeddingVector = Vec<f32>;
#[derive(Debug, Error)]
pub enum EmbeddingError {
#[error("Embeddings not enabled")]
NotEnabled,
#[error("Provider not available: {0}")]
ProviderNotAvailable(String),
#[error("API error: {0}")]
ApiError(String),
#[error("Dimension mismatch: expected {expected}, got {actual}")]
DimensionMismatch { expected: usize, actual: usize },
#[error("Index error: {0}")]
IndexError(#[from] index_manager::IndexError),
#[error(transparent)]
Io(#[from] std::io::Error),
#[error("Provider error: {0}")]
Provider(String),
}
#[async_trait::async_trait]
pub trait EmbeddingProvider: Send + Sync {
fn model_id(&self) -> String;
fn dimensions(&self) -> usize;
async fn embed(&self, text: &str) -> Result<EmbeddingVector, EmbeddingError>;
async fn embed_batch(&self, texts: &[String]) -> Result<Vec<EmbeddingVector>, EmbeddingError>;
fn is_available(&self) -> bool;
}