1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::common::*;
6use super::response_items::ResponseOutputItem;
7use super::response_tools::ResponseTool;
8use super::responses::{ResponseConversationParam, ResponseInput};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
11#[non_exhaustive]
12pub struct ContextManagement {
13 #[serde(rename = "type")]
14 pub type_: ContextManagementType,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub compact_threshold: Option<f64>,
17 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
18 pub extra: Extra,
19}
20
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
22#[non_exhaustive]
23pub struct PromptRef {
24 pub id: String,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub version: Option<String>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub variables: Option<PromptVariables>,
29 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
30 pub extra: Extra,
31}
32
33pub type PromptVariables = BTreeMap<String, PromptVariableValue>;
34
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
36#[serde(untagged)]
37#[non_exhaustive]
38pub enum PromptVariableValue {
39 Text(String),
40 InputContent(PromptVariableInputContentPart),
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
44#[serde(tag = "type")]
45#[non_exhaustive]
46pub enum PromptVariableInputContentPart {
47 #[serde(rename = "input_text")]
48 InputText {
49 text: String,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
52 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
53 extra: Extra,
54 },
55 #[serde(rename = "input_image")]
56 InputImage {
57 #[serde(skip_serializing_if = "Option::is_none")]
58 detail: Option<DetailLevel>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 file_id: Option<String>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 image_url: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
65 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
66 extra: Extra,
67 },
68 #[serde(rename = "input_file")]
69 InputFile {
70 #[serde(skip_serializing_if = "Option::is_none")]
71 detail: Option<InputFileDetailLevel>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 file_data: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 file_id: Option<String>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 file_url: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 filename: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 prompt_cache_breakpoint: Option<PromptCacheBreakpoint>,
82 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
83 extra: Extra,
84 },
85}
86
87#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
88#[non_exhaustive]
89pub struct ReasoningConfig {
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub context: Option<ReasoningContext>,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub effort: Option<ReasoningEffort>,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub mode: Option<ReasoningMode>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub summary: Option<ReasoningSummary>,
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub generate_summary: Option<ReasoningSummary>,
100 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
101 pub extra: Extra,
102}
103
104#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
105#[non_exhaustive]
106pub struct TextConfig {
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub format: Option<ResponseFormat>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub verbosity: Option<Verbosity>,
111 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
112 pub extra: Extra,
113}
114
115#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
116#[non_exhaustive]
117pub struct ResponseStreamOptions {
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub include_obfuscation: Option<bool>,
120 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
121 pub extra: Extra,
122}
123
124#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
125#[non_exhaustive]
126pub struct ResponseObject {
127 pub id: String,
128 pub created_at: u64,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub background: Option<bool>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub completed_at: Option<u64>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub conversation: Option<ResponseConversationParam>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub error: Option<ResponseError>,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub incomplete_details: Option<IncompleteDetails>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub instructions: Option<ResponseInput>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub max_output_tokens: Option<u32>,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub max_tool_calls: Option<u32>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub metadata: Option<Metadata>,
147 #[serde(skip_serializing_if = "Option::is_none")]
148 pub model: Option<OpenAiModelId>,
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub moderation: Option<ResponseModeration>,
151 #[serde(skip_serializing_if = "Option::is_none")]
152 pub multi_agent: Option<serde_json::Value>,
153 pub object: ResponseObjectType,
154 pub output: Vec<ResponseOutputItem>,
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub output_text: Option<String>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub parallel_tool_calls: Option<bool>,
159 #[serde(skip_serializing_if = "Option::is_none")]
160 pub prompt: Option<PromptRef>,
161 #[serde(skip_serializing_if = "Option::is_none")]
162 pub prompt_cache_key: Option<String>,
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub prompt_cache_options: Option<PromptCacheOptions>,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub prompt_cache_retention: Option<PromptCacheRetention>,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub previous_response_id: Option<String>,
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub reasoning: Option<ReasoningConfig>,
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub safety_identifier: Option<String>,
173 #[serde(skip_serializing_if = "Option::is_none")]
174 pub service_tier: Option<ServiceTier>,
175 #[serde(skip_serializing_if = "Option::is_none")]
176 pub status: Option<ResponseStatus>,
177 #[serde(skip_serializing_if = "Option::is_none")]
178 pub store: Option<bool>,
179 #[serde(skip_serializing_if = "Option::is_none")]
180 pub temperature: Option<f64>,
181 #[serde(skip_serializing_if = "Option::is_none")]
182 pub text: Option<TextConfig>,
183 #[serde(skip_serializing_if = "Option::is_none")]
184 pub tool_choice: Option<ResponseToolChoice>,
185 #[serde(skip_serializing_if = "Option::is_none")]
186 pub tools: Option<Vec<ResponseTool>>,
187 #[serde(skip_serializing_if = "Option::is_none")]
188 pub top_logprobs: Option<u32>,
189 #[serde(skip_serializing_if = "Option::is_none")]
190 pub top_p: Option<f64>,
191 #[serde(skip_serializing_if = "Option::is_none")]
192 pub truncation: Option<TruncationStrategy>,
193 #[serde(skip_serializing_if = "Option::is_none")]
194 pub usage: Option<ResponseUsage>,
195 #[serde(skip_serializing_if = "Option::is_none")]
196 pub user: Option<String>,
197 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
198 pub extra: Extra,
199}
200
201#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
202#[non_exhaustive]
203pub struct ResponseError {
204 pub code: ResponseErrorCode,
205 pub message: String,
206 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
207 pub extra: Extra,
208}
209
210#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
211#[non_exhaustive]
212pub struct ResponseModeration {
213 pub input: ResponseModerationOutcome,
214 pub output: ResponseModerationOutcome,
215 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
216 pub extra: Extra,
217}
218
219#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
220#[serde(untagged)]
221#[non_exhaustive]
222pub enum ResponseModerationOutcome {
223 Result(ModerationResult),
224 Error(ModerationError),
225}
226
227#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
228#[non_exhaustive]
229pub struct IncompleteDetails {
230 #[serde(skip_serializing_if = "Option::is_none")]
231 pub reason: Option<IncompleteReason>,
232 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
233 pub extra: Extra,
234}
235
236#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
237#[non_exhaustive]
238pub struct ResponseUsage {
239 pub input_tokens: u32,
240 pub output_tokens: u32,
241 pub total_tokens: u32,
242 #[serde(skip_serializing_if = "Option::is_none")]
243 pub input_tokens_details: Option<ResponseInputTokensDetails>,
244 pub output_tokens_details: ResponseOutputTokensDetails,
245 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
246 pub extra: Extra,
247}
248
249#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
250#[non_exhaustive]
251pub struct ResponseInputTokensDetails {
252 #[serde(default)]
253 pub cache_write_tokens: u32,
254 #[serde(default)]
255 pub cached_tokens: u32,
256 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
257 pub extra: Extra,
258}
259
260#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
261#[non_exhaustive]
262pub struct ResponseOutputTokensDetails {
263 pub reasoning_tokens: u32,
264 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
265 pub extra: Extra,
266}