swiftide_integrations/ollama/
embed.rs1use anyhow::{Context as _, Result};
2use async_openai::types::CreateEmbeddingRequestArgs;
3use async_trait::async_trait;
4
5use swiftide_core::{chat_completion::errors::LanguageModelError, EmbeddingModel, Embeddings};
6
7use super::Ollama;
8use crate::openai::openai_error_to_language_model_error;
9
10#[async_trait]
11impl EmbeddingModel for Ollama {
12 async fn embed(&self, input: Vec<String>) -> Result<Embeddings, LanguageModelError> {
13 let model = self
14 .default_options
15 .embed_model
16 .as_ref()
17 .context("Model not set")?;
18
19 let request = CreateEmbeddingRequestArgs::default()
20 .model(model)
21 .input(&input)
22 .build()
23 .map_err(LanguageModelError::permanent)?;
24 tracing::debug!(
25 num_chunks = input.len(),
26 model = &model,
27 "[Embed] Request to openai"
28 );
29 let response = self
30 .client
31 .embeddings()
32 .create(request)
33 .await
34 .map_err(openai_error_to_language_model_error)?;
35
36 let num_embeddings = response.data.len();
37 tracing::debug!(num_embeddings = num_embeddings, "[Embed] Response openai");
38
39 Ok(response.data.into_iter().map(|d| d.embedding).collect())
41 }
42}