use serde::{Deserialize, Serialize};
use super::common::Options;
#[derive(Serialize, Debug, Clone)]
#[serde(untagged)]
pub enum EmbedInput {
Single(String),
Multiple(Vec<String>),
}
impl From<String> for EmbedInput {
fn from(s: String) -> Self {
Self::Single(s)
}
}
impl From<&str> for EmbedInput {
fn from(s: &str) -> Self {
Self::Single(s.to_string())
}
}
impl From<Vec<String>> for EmbedInput {
fn from(v: Vec<String>) -> Self {
Self::Multiple(v)
}
}
#[derive(Serialize, Debug)]
pub struct EmbedRequest {
pub model: String,
pub input: EmbedInput,
#[serde(skip_serializing_if = "Option::is_none")]
pub truncate: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dimensions: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keep_alive: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<Options>,
}
#[derive(Deserialize, Debug, Clone)]
#[non_exhaustive]
pub struct EmbedResponse {
pub model: String,
pub embeddings: Vec<Vec<f64>>,
#[serde(default)]
pub total_duration: Option<u64>,
#[serde(default)]
pub load_duration: Option<u64>,
#[serde(default)]
pub prompt_eval_count: Option<u64>,
}