Skip to main content

gproxy_protocol/openai/embeddings/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::openai::embeddings::types::{
6    HttpMethod, OpenAiEmbeddingEncodingFormat, OpenAiEmbeddingInput, OpenAiEmbeddingModel,
7};
8
9/// Request descriptor for OpenAI `embeddings.create` endpoint.
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct OpenAiEmbeddingsRequest {
12    /// HTTP method.
13    pub method: HttpMethod,
14    /// Path parameters.
15    pub path: PathParameters,
16    /// Query parameters.
17    pub query: QueryParameters,
18    /// Request headers.
19    pub headers: RequestHeaders,
20    /// Request body.
21    pub body: RequestBody,
22}
23
24impl Default for OpenAiEmbeddingsRequest {
25    fn default() -> Self {
26        Self {
27            method: HttpMethod::Post,
28            path: PathParameters::default(),
29            query: QueryParameters::default(),
30            headers: RequestHeaders::default(),
31            body: RequestBody::default(),
32        }
33    }
34}
35
36/// OpenAI `/embeddings` does not define path params.
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
38pub struct PathParameters {}
39
40/// OpenAI `/embeddings` does not define query params.
41#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
42pub struct QueryParameters {}
43
44/// Proxy-side request model does not carry auth headers.
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
46pub struct RequestHeaders {
47    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
48    pub extra: BTreeMap<String, String>,
49}
50
51/// Request body for OpenAI `/embeddings`.
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53pub struct RequestBody {
54    /// Input text or tokens to embed.
55    pub input: OpenAiEmbeddingInput,
56    /// Target embedding model.
57    pub model: OpenAiEmbeddingModel,
58    /// Optional output vector dimensionality.
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub dimensions: Option<u32>,
61    /// Optional output encoding format.
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub encoding_format: Option<OpenAiEmbeddingEncodingFormat>,
64    /// Optional caller-specified end-user identifier.
65    #[serde(default, skip_serializing_if = "Option::is_none")]
66    pub user: Option<String>,
67}
68
69impl Default for RequestBody {
70    fn default() -> Self {
71        Self {
72            input: OpenAiEmbeddingInput::String(String::new()),
73            model: OpenAiEmbeddingModel::Custom(String::new()),
74            dimensions: None,
75            encoding_format: None,
76            user: None,
77        }
78    }
79}