gproxy_protocol/wire/openai/
embeddings.rs1use crate::{Rest, WireRequest, WireResponse};
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
8#[serde(rename_all = "snake_case")]
9#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
10#[derive(gproxy_protocol_macros::DeclaredFields)]
11#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
12pub struct CreateEmbeddingRequestBody {
13 pub input: EmbeddingInput,
14 pub model: String,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub dimensions: Option<i64>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub encoding_format: Option<EmbeddingEncodingFormat>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub user: Option<String>,
21 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
22 pub rest: Rest,
23}
24pub type CreateEmbeddingRequest = WireRequest<CreateEmbeddingRequestBody>;
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
26#[serde(untagged)]
27#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
28#[derive(gproxy_protocol_macros::DeclaredFields)]
29#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
30pub enum EmbeddingInput {
31 Text(String),
32 Texts(Vec<String>),
33 Tokens(Vec<i64>),
34 TokenArrays(Vec<Vec<i64>>),
35}
36#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
37#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
38#[derive(gproxy_protocol_macros::DeclaredFields)]
39#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
40pub enum EmbeddingModel {
41 #[serde(rename = "text-embedding-ada-002")]
42 Ada002,
43 #[serde(rename = "text-embedding-3-small")]
44 ThreeSmall,
45 #[serde(rename = "text-embedding-3-large")]
46 ThreeLarge,
47}
48#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
49#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
50#[derive(gproxy_protocol_macros::DeclaredFields)]
51#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
52pub enum EmbeddingEncodingFormat {
53 #[serde(rename = "float")]
54 Float,
55 #[serde(rename = "base64")]
56 Base64,
57}
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
59#[serde(rename_all = "snake_case")]
60#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
61#[derive(gproxy_protocol_macros::DeclaredFields)]
62#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
63pub struct CreateEmbeddingResponseBody {
64 pub data: Vec<OpenAiEmbedding>,
65 pub model: String,
66 #[serde(rename = "object")]
67 pub object_: EmbeddingListObject,
68 pub usage: EmbeddingUsage,
69 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
70 pub rest: Rest,
71}
72pub type CreateEmbeddingResponse = WireResponse<CreateEmbeddingResponseBody>;
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
74#[serde(rename_all = "snake_case")]
75#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
76#[derive(gproxy_protocol_macros::DeclaredFields)]
77#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
78pub struct OpenAiEmbedding {
79 pub embedding: EmbeddingVector,
80 pub index: i64,
81 #[serde(rename = "object")]
82 pub object_: EmbeddingObject,
83 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
84 pub rest: Rest,
85}
86#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
87#[serde(untagged)]
88#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
89#[derive(gproxy_protocol_macros::DeclaredFields)]
90#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
91pub enum EmbeddingVector {
92 Floats(Vec<serde_json::Number>),
93 Base64(String),
94}
95#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
96#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
97#[derive(gproxy_protocol_macros::DeclaredFields)]
98#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
99pub enum EmbeddingObject {
100 #[serde(rename = "embedding")]
101 Embedding,
102}
103#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
104#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
105#[derive(gproxy_protocol_macros::DeclaredFields)]
106#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
107pub enum EmbeddingListObject {
108 #[serde(rename = "list")]
109 List,
110}
111#[derive(
112 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
113)]
114#[serde(rename_all = "snake_case")]
115#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
116#[derive(gproxy_protocol_macros::DeclaredFields)]
117#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
118pub struct EmbeddingUsage {
119 pub prompt_tokens: i64,
120 pub total_tokens: i64,
121 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
122 pub rest: Rest,
123}