openai_types/embedding/
manual.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
8#[non_exhaustive]
9pub enum EncodingFormat {
10 #[serde(rename = "float")]
11 Float,
12 #[serde(rename = "base64")]
13 Base64,
14}
15
16#[derive(Debug, Clone, Serialize)]
18#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
19#[serde(untagged)]
20#[non_exhaustive]
21pub enum EmbeddingInput {
22 String(String),
23 StringArray(Vec<String>),
24 Tokens(Vec<Vec<i64>>),
25}
26
27impl From<&str> for EmbeddingInput {
28 fn from(s: &str) -> Self {
29 EmbeddingInput::String(s.to_string())
30 }
31}
32
33impl From<String> for EmbeddingInput {
34 fn from(s: String) -> Self {
35 EmbeddingInput::String(s)
36 }
37}
38
39impl From<Vec<String>> for EmbeddingInput {
40 fn from(v: Vec<String>) -> Self {
41 EmbeddingInput::StringArray(v)
42 }
43}
44
45impl From<Vec<Vec<i64>>> for EmbeddingInput {
46 fn from(v: Vec<Vec<i64>>) -> Self {
47 EmbeddingInput::Tokens(v)
48 }
49}
50
51#[derive(Debug, Clone, Serialize)]
53#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
54pub struct EmbeddingCreateRequest {
55 pub input: EmbeddingInput,
57
58 pub model: String,
60
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub encoding_format: Option<EncodingFormat>,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub dimensions: Option<i64>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub user: Option<String>,
72}
73
74impl EmbeddingCreateRequest {
75 pub fn new(input: impl Into<EmbeddingInput>, model: impl Into<String>) -> Self {
76 Self {
77 input: input.into(),
78 model: model.into(),
79 encoding_format: None,
80 dimensions: None,
81 user: None,
82 }
83 }
84}
85
86pub type EmbeddingRequest = EmbeddingCreateRequest;
88
89pub type CreateEmbeddingRequest = EmbeddingCreateRequest;
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
94#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
95pub struct Embedding {
96 pub object: String,
97 #[serde(default)]
99 pub embedding: Option<Vec<f64>>,
100 #[serde(default)]
102 pub b64_embedding: Option<String>,
103 pub index: i64,
104}
105
106#[derive(Debug, Clone, Deserialize)]
108#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
109pub struct EmbeddingResponse {
110 pub object: String,
111 pub data: Vec<Embedding>,
112 pub model: String,
113 pub usage: super::Usage,
114}