Skip to main content

gproxy_protocol/openai/embeddings/
types.rs

1use serde::{Deserialize, Serialize};
2
3pub use crate::openai::types::{
4    HttpMethod, OpenAiApiError, OpenAiApiErrorResponse, OpenAiResponseHeaders,
5};
6
7/// Input union accepted by OpenAI `/embeddings`.
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9#[serde(untagged)]
10pub enum OpenAiEmbeddingInput {
11    String(String),
12    StringArray(Vec<String>),
13    TokenArray(Vec<i64>),
14    TokenArrayArray(Vec<Vec<i64>>),
15}
16
17/// Supported embedding model names.
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
19#[serde(untagged)]
20pub enum OpenAiEmbeddingModel {
21    Known(OpenAiEmbeddingModelKnown),
22    Custom(String),
23}
24
25/// Known embedding model constants from upstream docs.
26#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27pub enum OpenAiEmbeddingModelKnown {
28    #[serde(rename = "text-embedding-ada-002")]
29    TextEmbeddingAda002,
30    #[serde(rename = "text-embedding-3-small")]
31    TextEmbedding3Small,
32    #[serde(rename = "text-embedding-3-large")]
33    TextEmbedding3Large,
34}
35
36/// Encoding format for returned embedding values.
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38pub enum OpenAiEmbeddingEncodingFormat {
39    #[serde(rename = "float")]
40    Float,
41    #[serde(rename = "base64")]
42    Base64,
43}
44
45/// A single embedding object in the response list.
46#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
47pub struct OpenAiEmbeddingData {
48    /// Embedding vector, encoded as float list or base64 string.
49    pub embedding: OpenAiEmbeddingVector,
50    /// Position of this embedding in the request input list.
51    pub index: u64,
52    /// Object discriminator, always `embedding`.
53    pub object: OpenAiEmbeddingDataObject,
54}
55
56/// Embedding payload.
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
58#[serde(untagged)]
59pub enum OpenAiEmbeddingVector {
60    FloatArray(Vec<f64>),
61    Base64(String),
62}
63
64/// OpenAI embedding item object discriminator.
65#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
66pub enum OpenAiEmbeddingDataObject {
67    #[serde(rename = "embedding")]
68    Embedding,
69}
70
71/// Usage metrics for embeddings.
72#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
73pub struct OpenAiEmbeddingUsage {
74    pub prompt_tokens: u64,
75    pub total_tokens: u64,
76}
77
78/// Successful response payload for OpenAI `/embeddings`.
79#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
80pub struct OpenAiCreateEmbeddingResponse {
81    pub data: Vec<OpenAiEmbeddingData>,
82    pub model: String,
83    pub object: OpenAiEmbeddingResponseObject,
84    pub usage: OpenAiEmbeddingUsage,
85}
86
87/// OpenAI embeddings response object discriminator.
88#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
89pub enum OpenAiEmbeddingResponseObject {
90    #[serde(rename = "list")]
91    List,
92}