use serde::{Deserialize, Serialize};
use crate::models;
pub(crate) const PATH: &str = "/embeddings";
#[derive(Serialize, Clone, Default, Deserialize, Debug)]
pub struct Input {
text: Option<String>,
image: Option<String>,
}
#[derive(Serialize, Clone, Default, Deserialize, Debug)]
pub struct Request {
pub(crate) input: Vec<Input>,
#[serde(deserialize_with = "models::deserialize_models")]
pub(crate) model: models::Model,
}
impl Request {
pub async fn new(model: models::Model, text: Option<String>, image: Option<String>) -> Request {
Self {
model,
input: vec![Input { text, image }],
}
}
pub async fn add_input(mut self, text: Option<String>, image: Option<String>) -> Self {
self.input.push(Input { text, image });
self
}
pub fn add_inputs(mut self, inputs: Vec<Input>) -> Self {
for i in inputs {
self.input.push(i);
}
self
}
}
#[derive(Serialize, Default, Deserialize, Debug)]
#[serde(default)]
pub struct Data {
pub status: String,
pub index: i64,
pub object: String,
pub embedding: Vec<f64>,
}
#[derive(Serialize, Default, Deserialize, Debug)]
#[serde(default)]
pub struct Response {
pub id: String,
pub object: String,
pub created: i64,
#[serde(deserialize_with = "models::deserialize_models")]
pub model: models::Model,
pub data: Vec<Data>,
}