use std::collections::HashMap;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::core::exceptions::OperonError;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EmbedOpts {
#[serde(default)]
pub extras: HashMap<String, Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbedResult {
pub embeddings: Vec<Vec<f32>>,
#[serde(default)]
pub model: String,
#[serde(default)]
pub usage: Option<Value>,
#[serde(flatten)]
pub extras: HashMap<String, Value>,
}
#[async_trait]
pub trait BaseEmbedder: Send + Sync {
async fn run(&self, texts: Vec<String>, opts: &EmbedOpts) -> Result<EmbedResult, OperonError>;
fn output_dim(&self) -> usize;
}