xai_openapi/
embeddings.rs1use serde::{Deserialize, Serialize};
4
5use crate::prelude::*;
6
7use crate::usage::EmbeddingUsage;
8
9#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
11pub struct EmbeddingRequest {
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub input: Option<EmbeddingInput>,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
18 pub model: Option<String>,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub encoding_format: Option<String>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub dimensions: Option<i32>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub preview: Option<bool>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub user: Option<String>,
35}
36
37#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
39#[serde(untagged)]
40pub enum EmbeddingInput {
41 String(String),
43 StringArray(Vec<String>),
45 Ints(Vec<i32>),
47 IntsArray(Vec<Vec<i32>>),
49}
50
51impl Default for EmbeddingInput {
52 fn default() -> Self {
53 EmbeddingInput::String(String::new())
54 }
55}
56
57#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
59pub struct EmbeddingResponse {
60 pub object: String,
62
63 pub model: String,
65
66 pub data: Vec<Embedding>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub usage: Option<EmbeddingUsage>,
72}
73
74#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
76pub struct Embedding {
77 pub index: i32,
79
80 pub embedding: EmbeddingContent,
82
83 pub object: String,
85}
86
87#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
89#[serde(untagged)]
90pub enum EmbeddingContent {
91 Float(Vec<f32>),
93 Base64(String),
95}
96
97impl Default for EmbeddingContent {
98 fn default() -> Self {
99 EmbeddingContent::Float(Vec::new())
100 }
101}