use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum EncodingFormat {
#[serde(rename = "float")]
Float,
#[serde(rename = "base64")]
Base64,
}
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[serde(untagged)]
#[non_exhaustive]
pub enum EmbeddingInput {
String(String),
StringArray(Vec<String>),
Tokens(Vec<Vec<i64>>),
}
impl From<&str> for EmbeddingInput {
fn from(s: &str) -> Self {
EmbeddingInput::String(s.to_string())
}
}
impl From<String> for EmbeddingInput {
fn from(s: String) -> Self {
EmbeddingInput::String(s)
}
}
impl From<Vec<String>> for EmbeddingInput {
fn from(v: Vec<String>) -> Self {
EmbeddingInput::StringArray(v)
}
}
impl From<Vec<Vec<i64>>> for EmbeddingInput {
fn from(v: Vec<Vec<i64>>) -> Self {
EmbeddingInput::Tokens(v)
}
}
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct EmbeddingCreateRequest {
pub input: EmbeddingInput,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub encoding_format: Option<EncodingFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dimensions: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
}
impl EmbeddingCreateRequest {
pub fn new(input: impl Into<EmbeddingInput>, model: impl Into<String>) -> Self {
Self {
input: input.into(),
model: model.into(),
encoding_format: None,
dimensions: None,
user: None,
}
}
}
pub type EmbeddingRequest = EmbeddingCreateRequest;
pub type CreateEmbeddingRequest = EmbeddingCreateRequest;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct Embedding {
pub object: String,
#[serde(default)]
pub embedding: Option<Vec<f64>>,
#[serde(default)]
pub b64_embedding: Option<String>,
pub index: i64,
}
#[derive(Debug, Clone, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct EmbeddingResponse {
pub object: String,
pub data: Vec<Embedding>,
pub model: String,
pub usage: super::Usage,
}