Skip to main content

gproxy_protocol/protocol/openai/
embeddings.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::common::*;
6
7pub type EmbeddingWireModel = OpenAiWireModel<EmbeddingRequest, EmbeddingResponse>;
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
10#[non_exhaustive]
11pub struct EmbeddingRequest {
12    pub input: EmbeddingInput,
13    pub model: OpenAiModelId,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub dimensions: Option<u32>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub encoding_format: Option<EmbeddingEncodingFormat>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub user: Option<String>,
20    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
21    pub extra: Extra,
22}
23
24#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
25#[serde(untagged)]
26#[non_exhaustive]
27pub enum EmbeddingInput {
28    Text(String),
29    TextList(Vec<String>),
30    TokenList(Vec<i64>),
31    TokenLists(Vec<Vec<i64>>),
32}
33
34#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
35#[non_exhaustive]
36pub struct EmbeddingResponse {
37    pub data: Vec<Embedding>,
38    pub model: OpenAiModelId,
39    pub object: ListObjectType,
40    pub usage: EmbeddingUsage,
41    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
42    pub extra: Extra,
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
46#[non_exhaustive]
47pub struct Embedding {
48    pub embedding: Vec<f64>,
49    pub index: u32,
50    pub object: EmbeddingObjectType,
51    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
52    pub extra: Extra,
53}
54
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
56#[non_exhaustive]
57pub struct EmbeddingUsage {
58    pub prompt_tokens: u32,
59    pub total_tokens: u32,
60    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
61    pub extra: Extra,
62}