gproxy_protocol/openai/create_chat_completions/
request.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::openai::create_chat_completions::types::{
6 self, ChatCompletionClaudeThinkingConfig, ChatCompletionGeminiExtraThinkingConfig, HttpMethod,
7};
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct OpenAiChatCompletionsRequest {
12 pub method: HttpMethod,
14 pub path: PathParameters,
16 pub query: QueryParameters,
18 pub headers: RequestHeaders,
20 pub body: RequestBody,
22}
23
24impl Default for OpenAiChatCompletionsRequest {
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#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
38pub struct PathParameters {}
39
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
42pub struct QueryParameters {}
43
44#[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#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
53pub struct RequestBody {
54 pub messages: Vec<types::ChatCompletionMessageParam>,
56 pub model: types::Model,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub audio: Option<types::ChatCompletionAudioParam>,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub frequency_penalty: Option<f64>,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub function_call: Option<types::ChatCompletionFunctionCallOptionParam>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub functions: Option<Vec<types::ChatCompletionLegacyFunction>>,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
72 pub logit_bias: Option<types::LogitBias>,
73 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub logprobs: Option<bool>,
76 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub max_completion_tokens: Option<u64>,
79 #[serde(default, skip_serializing_if = "Option::is_none")]
81 pub max_tokens: Option<u64>,
82 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub metadata: Option<types::Metadata>,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub modalities: Option<Vec<types::ChatCompletionModality>>,
88 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub n: Option<u32>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub parallel_tool_calls: Option<bool>,
94 #[serde(default, skip_serializing_if = "Option::is_none")]
96 pub prediction: Option<types::ChatCompletionPredictionContent>,
97 #[serde(default, skip_serializing_if = "Option::is_none")]
99 pub presence_penalty: Option<f64>,
100 #[serde(default, skip_serializing_if = "Option::is_none")]
102 pub prompt_cache_key: Option<String>,
103 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub prompt_cache_retention: Option<types::ChatCompletionPromptCacheRetention>,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub reasoning_effort: Option<types::ChatCompletionReasoningEffort>,
109 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub response_format: Option<types::ChatCompletionResponseFormat>,
112 #[serde(default, skip_serializing_if = "Option::is_none")]
114 pub safety_identifier: Option<String>,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub seed: Option<i64>,
118 #[serde(default, skip_serializing_if = "Option::is_none")]
120 pub service_tier: Option<types::ChatCompletionServiceTier>,
121 #[serde(default, skip_serializing_if = "Option::is_none")]
123 pub stop: Option<types::ChatCompletionStop>,
124 #[serde(default, skip_serializing_if = "Option::is_none")]
126 pub store: Option<bool>,
127 #[serde(default, skip_serializing_if = "Option::is_none")]
129 pub stream: Option<bool>,
130 #[serde(default, skip_serializing_if = "Option::is_none")]
132 pub stream_options: Option<types::ChatCompletionStreamOptions>,
133 #[serde(default, skip_serializing_if = "Option::is_none")]
135 pub temperature: Option<f64>,
136 #[serde(default, skip_serializing_if = "Option::is_none")]
138 pub tool_choice: Option<types::ChatCompletionToolChoiceOption>,
139 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub tools: Option<Vec<types::ChatCompletionTool>>,
142 #[serde(default, skip_serializing_if = "Option::is_none")]
144 pub top_logprobs: Option<u32>,
145 #[serde(default, skip_serializing_if = "Option::is_none")]
147 pub top_p: Option<f64>,
148 #[serde(default, skip_serializing_if = "Option::is_none")]
150 pub user: Option<String>,
151 #[serde(default, skip_serializing_if = "Option::is_none")]
153 pub verbosity: Option<types::ChatCompletionVerbosity>,
154 #[serde(default, skip_serializing_if = "Option::is_none")]
157 pub thinking: Option<ChatCompletionClaudeThinkingConfig>,
158 #[serde(
159 rename = "thinking_config",
160 default,
161 skip_serializing_if = "Option::is_none"
162 )]
163 pub thinking_config: Option<ChatCompletionGeminiExtraThinkingConfig>,
164 #[serde(
165 rename = "cached_content",
166 default,
167 skip_serializing_if = "Option::is_none"
168 )]
169 pub cached_content: Option<String>,
170 #[serde(default, skip_serializing_if = "Option::is_none")]
172 pub web_search_options: Option<types::ChatCompletionWebSearchOptions>,
173}