use crate::prelude::*;
use super::*;
use reqwest::{Client};
pub struct Embedding {
pub url: String,
pub client: Client
}
impl Embedding {
pub fn new(url: Option<String>) ->
Self
{
if url.is_some() {
Self {
url: url.unwrap().to_string(),
client: Client::new()
}
} else {
Self {
url: fmt!("http://127.0.0.1:1234/v1/embeddings"),
client: Client::new()
}
}
}
pub async fn send(&mut self, req: EmbeddingRequest) -> Result<EmbeddingData> {
let resp = self.client.post(&self.url)
.json(&req)
.send()
.await?
.error_for_status()?
.json()
.await?;
Ok(resp)
}
pub async fn embed(&mut self, req: EmbeddingRequest) -> Result<Vec<f32>> {
let resp = self.send(req).await?;
let embed = resp.data.get(0)
.ok_or_else(|| anyhow::anyhow!("No embeddings returned"))?
.actual_embedding();
Ok(embed)
}
}