use crate::{
core::{
capabilities::ModelName,
client::EmbeddingClient,
embedding_model::{EmbeddingModel, EmbeddingModelOptions, EmbeddingModelResponse},
},
error::Result,
providers::openai::OpenAI,
};
use async_trait::async_trait;
#[derive(Debug, Clone)]
pub struct OpenAIEmbeddingModelOptions {}
#[async_trait]
impl<M: ModelName> EmbeddingModel for OpenAI<M> {
async fn embed(&self, input: EmbeddingModelOptions) -> Result<EmbeddingModelResponse> {
let mut model = self.clone();
let mut options: crate::providers::openai::client::OpenAIEmbeddingOptions = input.into();
options.model = model.embedding_options.model.clone();
model.embedding_options = options;
let response = model.send(&model.settings.base_url).await?;
Ok(response.data.into_iter().map(|e| e.embedding).collect())
}
}