use crate::{
core::{
capabilities::ModelName,
client::EmbeddingClient,
embedding_model::{EmbeddingModel, EmbeddingModelOptions, EmbeddingModelResponse},
},
error::Result,
providers::google::Google,
};
use async_trait::async_trait;
#[derive(Debug, Clone)]
pub struct GoogleEmbeddingModelOptions {}
#[async_trait]
impl<M: ModelName> EmbeddingModel for Google<M> {
async fn embed(&self, input: EmbeddingModelOptions) -> Result<EmbeddingModelResponse> {
let mut model = self.clone();
let mut options: crate::providers::google::client::GoogleEmbeddingOptions = input.into();
let embedding_model = model.embedding_options.model.clone();
options.model = embedding_model.clone();
let _ = options.requests.iter_mut().for_each(|r| {
r.model = format!("models/{}", embedding_model.clone());
});
model.embedding_options = options;
let response = model.send(&model.settings.base_url).await?;
Ok(response.embeddings.into_iter().map(|e| e.values).collect())
}
}