aiway_model_protocol/
embedding.rs1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3use crate::shared::Usage;
4
5#[derive(Serialize, Deserialize, Debug, Default, Builder, Clone, PartialEq)]
6#[builder(name = "EmbeddingParametersBuilder")]
7#[builder(setter(into, strip_option), default)]
8pub struct EmbeddingParameters {
9 pub input: EmbeddingInput,
12 pub model: String,
14 #[serde(skip_serializing_if = "Option::is_none")]
16 pub encoding_format: Option<EmbeddingEncodingFormat>,
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub dimensions: Option<u32>,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub user: Option<String>,
23}
24
25#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
26pub struct EmbeddingResponse {
27 pub object: String,
29 pub data: Vec<Embedding>,
31 pub model: String,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub usage: Option<Usage>,
36}
37
38#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
39#[serde(untagged)]
40pub enum EmbeddingInput {
41 String(String),
43 StringArray(Vec<String>),
45 IntegerArray(Vec<u32>),
47 IntegerArrayArray(Vec<Vec<u32>>),
49}
50
51#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
52#[serde(untagged)]
53pub enum EmbeddingOutput {
54 Float(Vec<f64>),
55 Base64(String),
56}
57
58#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
59pub struct Embedding {
60 pub index: u32,
62 pub embedding: EmbeddingOutput,
64 pub object: String,
66}
67
68#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
69#[serde(rename_all = "snake_case")]
70pub enum EmbeddingEncodingFormat {
71 Float,
72 Base64,
73}
74
75impl Default for EmbeddingInput {
76 fn default() -> Self {
77 EmbeddingInput::String(String::new())
78 }
79}