use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use super::{error::EmbeddingError, Embedding};
#[async_trait]
pub trait Embedder: Send + Sync {
async fn embed(&self, texts: &[&str]) -> Result<Vec<Embedding>, EmbeddingError>;
fn dimensions(&self) -> Option<usize>;
fn model_name(&self) -> &str;
fn intended_use_case(&self) -> EmbeddingUseCase;
fn max_batch_size_hint(&self) -> Option<usize>;
fn max_chunk_length_hint(&self) -> Option<usize>; }
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum EmbeddingUseCase {
Similarity,
RetrievalDocument,
RetrievalQuery,
Classification,
Clustering,
QuestionAnswering,
FactVerification, CodeRetrievalQuery, General,
Other(String),
}