Skip to main content

gproxy_protocol/openai/create_response/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::openai::create_response::types::{
6    HttpMethod, Metadata, Model, ResponseContextManagementEntry, ResponseConversation,
7    ResponseIncludable, ResponseInput, ResponsePrompt, ResponsePromptCacheRetention,
8    ResponseReasoning, ResponseServiceTier, ResponseStreamOptions, ResponseTextConfig,
9    ResponseTool, ResponseToolChoice, ResponseTruncation,
10};
11
12/// Request descriptor for OpenAI `responses.create` endpoint.
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
14pub struct OpenAiCreateResponseRequest {
15    /// HTTP method.
16    pub method: HttpMethod,
17    /// Path parameters.
18    pub path: PathParameters,
19    /// Query parameters.
20    pub query: QueryParameters,
21    /// Request headers.
22    pub headers: RequestHeaders,
23    /// Request body.
24    pub body: RequestBody,
25}
26
27impl Default for OpenAiCreateResponseRequest {
28    fn default() -> Self {
29        Self {
30            method: HttpMethod::Post,
31            path: PathParameters::default(),
32            query: QueryParameters::default(),
33            headers: RequestHeaders::default(),
34            body: RequestBody::default(),
35        }
36    }
37}
38
39/// `responses.create` does not define path params.
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
41pub struct PathParameters {}
42
43/// `responses.create` does not define query params.
44#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
45pub struct QueryParameters {}
46
47/// Proxy-side request model does not carry auth headers.
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
49pub struct RequestHeaders {
50    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
51    pub extra: BTreeMap<String, String>,
52}
53
54/// Body payload for `POST /responses`.
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
56pub struct RequestBody {
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub background: Option<bool>,
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub context_management: Option<Vec<ResponseContextManagementEntry>>,
61    #[serde(default, skip_serializing_if = "Option::is_none")]
62    pub conversation: Option<ResponseConversation>,
63    #[serde(default, skip_serializing_if = "Option::is_none")]
64    pub include: Option<Vec<ResponseIncludable>>,
65    #[serde(default, skip_serializing_if = "Option::is_none")]
66    pub input: Option<ResponseInput>,
67    #[serde(default, skip_serializing_if = "Option::is_none")]
68    pub instructions: Option<String>,
69    #[serde(default, skip_serializing_if = "Option::is_none")]
70    pub max_output_tokens: Option<u64>,
71    #[serde(default, skip_serializing_if = "Option::is_none")]
72    pub max_tool_calls: Option<u64>,
73    #[serde(default, skip_serializing_if = "Option::is_none")]
74    pub metadata: Option<Metadata>,
75    #[serde(default, skip_serializing_if = "Option::is_none")]
76    pub model: Option<Model>,
77    #[serde(default, skip_serializing_if = "Option::is_none")]
78    pub parallel_tool_calls: Option<bool>,
79    #[serde(default, skip_serializing_if = "Option::is_none")]
80    pub previous_response_id: Option<String>,
81    #[serde(default, skip_serializing_if = "Option::is_none")]
82    pub prompt: Option<ResponsePrompt>,
83    #[serde(default, skip_serializing_if = "Option::is_none")]
84    pub prompt_cache_key: Option<String>,
85    #[serde(default, skip_serializing_if = "Option::is_none")]
86    pub prompt_cache_retention: Option<ResponsePromptCacheRetention>,
87    #[serde(default, skip_serializing_if = "Option::is_none")]
88    pub reasoning: Option<ResponseReasoning>,
89    #[serde(default, skip_serializing_if = "Option::is_none")]
90    pub safety_identifier: Option<String>,
91    #[serde(default, skip_serializing_if = "Option::is_none")]
92    pub service_tier: Option<ResponseServiceTier>,
93    #[serde(default, skip_serializing_if = "Option::is_none")]
94    pub store: Option<bool>,
95    #[serde(default, skip_serializing_if = "Option::is_none")]
96    pub stream: Option<bool>,
97    #[serde(default, skip_serializing_if = "Option::is_none")]
98    pub stream_options: Option<ResponseStreamOptions>,
99    #[serde(default, skip_serializing_if = "Option::is_none")]
100    pub temperature: Option<f64>,
101    #[serde(default, skip_serializing_if = "Option::is_none")]
102    pub text: Option<ResponseTextConfig>,
103    #[serde(default, skip_serializing_if = "Option::is_none")]
104    pub tool_choice: Option<ResponseToolChoice>,
105    #[serde(default, skip_serializing_if = "Option::is_none")]
106    pub tools: Option<Vec<ResponseTool>>,
107    #[serde(default, skip_serializing_if = "Option::is_none")]
108    pub top_logprobs: Option<u32>,
109    #[serde(default, skip_serializing_if = "Option::is_none")]
110    pub top_p: Option<f64>,
111    #[serde(default, skip_serializing_if = "Option::is_none")]
112    pub truncation: Option<ResponseTruncation>,
113    #[serde(default, skip_serializing_if = "Option::is_none")]
114    pub user: Option<String>,
115}