use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::operation::request::RequestTrait;
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct EmbeddingsParam {
#[builder(setter(into))]
pub model: String,
pub input: EmbeddingsInput,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub parameters: Option<EmbeddingsParameters>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub text_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Builder, Deserialize, PartialEq)]
pub struct EmbeddingsInput {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub texts: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub image: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub video: Option<String>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct EmbeddingsParameters {
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub dimension: Option<u16>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub output_type: Option<String>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub instruct: Option<String>,
}
impl RequestTrait for EmbeddingsParam {
type P = EmbeddingsParameters;
fn model(&self) -> &str {
&self.model
}
fn parameters(&self) -> Option<&Self::P> {
self.parameters.as_ref()
}
}