1use super::input::{
4 ConversationParam, Input, ReasoningConfig, ResponseInputFile, ResponseInputImage,
5 ResponseInputText, TextConfig, present_nullable, present_optional,
6};
7use super::tools::Tool;
8use crate::Rest;
9use serde::{Deserialize, Serialize};
10use std::collections::BTreeMap;
11
12#[derive(
13 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
14)]
15#[serde(rename_all = "snake_case")]
16#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
17#[derive(gproxy_protocol_macros::DeclaredFields)]
18pub struct GenerateContentRequestBody {
19 #[serde(
20 default,
21 deserialize_with = "present_nullable",
22 skip_serializing_if = "Option::is_none"
23 )]
24 pub multi_agent: Option<Option<super::multi_agent::MultiAgentConfig>>,
25 #[serde(
26 default,
27 deserialize_with = "present_nullable",
28 skip_serializing_if = "Option::is_none"
29 )]
30 pub background: Option<Option<bool>>,
31 #[serde(
32 default,
33 deserialize_with = "present_nullable",
34 skip_serializing_if = "Option::is_none"
35 )]
36 pub context_management: Option<Option<Vec<ContextManagement>>>,
37 #[serde(
38 default,
39 deserialize_with = "present_nullable",
40 skip_serializing_if = "Option::is_none"
41 )]
42 pub conversation: Option<Option<ConversationParam>>,
43 #[serde(
44 default,
45 deserialize_with = "present_nullable",
46 skip_serializing_if = "Option::is_none"
47 )]
48 pub include: Option<Option<Vec<ResponseIncludable>>>,
49 #[serde(
50 default,
51 deserialize_with = "present_optional",
52 skip_serializing_if = "Option::is_none"
53 )]
54 pub input: Option<Input>,
55 #[serde(
56 default,
57 deserialize_with = "present_nullable",
58 skip_serializing_if = "Option::is_none"
59 )]
60 pub instructions: Option<Option<String>>,
61 #[serde(
62 default,
63 deserialize_with = "present_nullable",
64 skip_serializing_if = "Option::is_none"
65 )]
66 pub max_output_tokens: Option<Option<i64>>,
67 #[serde(
68 default,
69 deserialize_with = "present_nullable",
70 skip_serializing_if = "Option::is_none"
71 )]
72 pub max_tool_calls: Option<Option<i64>>,
73 #[serde(
74 default,
75 deserialize_with = "present_nullable",
76 skip_serializing_if = "Option::is_none"
77 )]
78 pub metadata: Option<Option<BTreeMap<String, String>>>,
79 #[serde(
80 default,
81 deserialize_with = "present_optional",
82 skip_serializing_if = "Option::is_none"
83 )]
84 pub model: Option<String>,
85 #[serde(
86 default,
87 deserialize_with = "present_nullable",
88 skip_serializing_if = "Option::is_none"
89 )]
90 pub moderation: Option<Option<ResponseModeration>>,
91 #[serde(
92 default,
93 deserialize_with = "present_nullable",
94 skip_serializing_if = "Option::is_none"
95 )]
96 pub parallel_tool_calls: Option<Option<bool>>,
97 #[serde(
98 default,
99 deserialize_with = "present_nullable",
100 skip_serializing_if = "Option::is_none"
101 )]
102 pub previous_response_id: Option<Option<String>>,
103 #[serde(
104 default,
105 deserialize_with = "present_nullable",
106 skip_serializing_if = "Option::is_none"
107 )]
108 pub prompt: Option<Option<ResponsePrompt>>,
109 #[serde(
110 default,
111 deserialize_with = "present_nullable",
112 skip_serializing_if = "Option::is_none"
113 )]
114 pub prompt_cache_key: Option<Option<String>>,
115 #[serde(
116 default,
117 deserialize_with = "present_optional",
118 skip_serializing_if = "Option::is_none"
119 )]
120 pub prompt_cache_options: Option<PromptCacheOptions>,
121 #[serde(
122 default,
123 deserialize_with = "present_nullable",
124 skip_serializing_if = "Option::is_none"
125 )]
126 pub prompt_cache_retention: Option<Option<PromptCacheRetention>>,
127 #[serde(
128 default,
129 deserialize_with = "present_nullable",
130 skip_serializing_if = "Option::is_none"
131 )]
132 pub reasoning: Option<Option<ReasoningConfig>>,
133 #[serde(
134 default,
135 deserialize_with = "present_nullable",
136 skip_serializing_if = "Option::is_none"
137 )]
138 pub safety_identifier: Option<Option<String>>,
139 #[serde(
140 default,
141 deserialize_with = "present_nullable",
142 skip_serializing_if = "Option::is_none"
143 )]
144 pub service_tier: Option<Option<ServiceTier>>,
145 #[serde(
146 default,
147 deserialize_with = "present_nullable",
148 skip_serializing_if = "Option::is_none"
149 )]
150 pub store: Option<Option<bool>>,
151 #[serde(
152 default,
153 deserialize_with = "present_nullable",
154 skip_serializing_if = "Option::is_none"
155 )]
156 pub stream: Option<Option<bool>>,
157 #[serde(
158 default,
159 deserialize_with = "present_nullable",
160 skip_serializing_if = "Option::is_none"
161 )]
162 pub stream_options: Option<Option<StreamOptions>>,
163 #[serde(
164 default,
165 deserialize_with = "present_nullable",
166 skip_serializing_if = "Option::is_none"
167 )]
168 pub temperature: Option<Option<serde_json::Number>>,
169 #[serde(
170 default,
171 deserialize_with = "present_optional",
172 skip_serializing_if = "Option::is_none"
173 )]
174 pub text: Option<TextConfig>,
175 #[serde(
176 default,
177 deserialize_with = "present_optional",
178 skip_serializing_if = "Option::is_none"
179 )]
180 pub tool_choice: Option<super::input::ToolChoice>,
181 #[serde(
182 default,
183 deserialize_with = "present_optional",
184 skip_serializing_if = "Option::is_none"
185 )]
186 pub tools: Option<Vec<Tool>>,
187 #[serde(
188 default,
189 deserialize_with = "present_nullable",
190 skip_serializing_if = "Option::is_none"
191 )]
192 pub top_logprobs: Option<Option<i64>>,
193 #[serde(
194 default,
195 deserialize_with = "present_nullable",
196 skip_serializing_if = "Option::is_none"
197 )]
198 pub top_p: Option<Option<serde_json::Number>>,
199 #[serde(
200 default,
201 deserialize_with = "present_nullable",
202 skip_serializing_if = "Option::is_none"
203 )]
204 pub truncation: Option<Option<GenerateTruncation>>,
205 #[serde(
206 default,
207 deserialize_with = "present_optional",
208 skip_serializing_if = "Option::is_none"
209 )]
210 pub user: Option<String>,
211 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
212 pub rest: Rest,
213}
214
215#[derive(
216 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
217)]
218#[serde(rename_all = "snake_case")]
219#[derive(gproxy_protocol_macros::DeclaredFields)]
220pub struct ContextManagement {
221 pub r#type: String,
222 #[serde(
223 default,
224 deserialize_with = "present_nullable",
225 skip_serializing_if = "Option::is_none"
226 )]
227 pub compact_threshold: Option<Option<i64>>,
228 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
229 pub rest: Rest,
230}
231#[derive(
232 Debug,
233 Clone,
234 Copy,
235 PartialEq,
236 Eq,
237 Serialize,
238 Deserialize,
239 gproxy_protocol_macros::DeclaredFields,
240)]
241pub enum ResponseIncludable {
242 #[serde(rename = "web_search_call.action.sources")]
243 WebSearchSources,
244 #[serde(rename = "code_interpreter_call.outputs")]
245 CodeInterpreterOutputs,
246 #[serde(rename = "computer_call_output.output.image_url")]
247 ComputerImageUrl,
248 #[serde(rename = "file_search_call.results")]
249 FileSearchResults,
250 #[serde(rename = "message.input_image.image_url")]
251 InputImageUrl,
252 #[serde(rename = "message.output_text.logprobs")]
253 OutputLogprobs,
254 #[serde(rename = "reasoning.encrypted_content")]
255 ReasoningEncryptedContent,
256}
257#[derive(
258 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
259)]
260#[serde(rename_all = "snake_case")]
261#[derive(gproxy_protocol_macros::DeclaredFields)]
262pub struct ResponseModeration {
263 pub model: String,
264 #[serde(
265 default,
266 deserialize_with = "present_nullable",
267 skip_serializing_if = "Option::is_none"
268 )]
269 pub policy: Option<Option<ModerationPolicy>>,
270 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
271 pub rest: Rest,
272}
273#[derive(
274 Debug,
275 Clone,
276 Copy,
277 PartialEq,
278 Eq,
279 Serialize,
280 Deserialize,
281 gproxy_protocol_macros::DeclaredFields,
282)]
283pub enum ModerationMode {
284 #[serde(rename = "score")]
285 Score,
286 #[serde(rename = "block")]
287 Block,
288}
289#[derive(
290 Debug,
291 Clone,
292 PartialEq,
293 Eq,
294 Serialize,
295 Deserialize,
296 gproxy_protocol_macros::WireBuilder,
297 gproxy_protocol_macros::DeclaredFields,
298)]
299pub struct ModerationPolicy {
300 #[serde(
301 default,
302 deserialize_with = "present_nullable",
303 skip_serializing_if = "Option::is_none"
304 )]
305 pub input: Option<Option<ModerationPolicyMode>>,
306 #[serde(
307 default,
308 deserialize_with = "present_nullable",
309 skip_serializing_if = "Option::is_none"
310 )]
311 pub output: Option<Option<ModerationPolicyMode>>,
312 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
313 pub rest: Rest,
314}
315#[derive(
316 Debug,
317 Clone,
318 PartialEq,
319 Eq,
320 Serialize,
321 Deserialize,
322 gproxy_protocol_macros::WireBuilder,
323 gproxy_protocol_macros::DeclaredFields,
324)]
325pub struct ModerationPolicyMode {
326 pub mode: ModerationMode,
327 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
328 pub rest: Rest,
329}
330#[derive(
331 Debug,
332 Clone,
333 PartialEq,
334 Eq,
335 Serialize,
336 Deserialize,
337 gproxy_protocol_macros::WireBuilder,
338 gproxy_protocol_macros::DeclaredFields,
339)]
340pub struct ResponsePrompt {
341 pub id: String,
342 #[serde(
343 default,
344 deserialize_with = "present_nullable",
345 skip_serializing_if = "Option::is_none"
346 )]
347 pub variables: Option<Option<BTreeMap<String, PromptVariableValue>>>,
348 #[serde(
349 default,
350 deserialize_with = "present_nullable",
351 skip_serializing_if = "Option::is_none"
352 )]
353 pub version: Option<Option<String>>,
354 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
355 pub rest: Rest,
356}
357#[derive(
358 Debug,
359 Clone,
360 Copy,
361 PartialEq,
362 Eq,
363 Serialize,
364 Deserialize,
365 gproxy_protocol_macros::DeclaredFields,
366)]
367pub enum PromptCachingMode {
368 #[serde(rename = "implicit")]
369 Implicit,
370 #[serde(rename = "explicit")]
371 Explicit,
372}
373#[derive(
374 Debug,
375 Clone,
376 PartialEq,
377 Eq,
378 Serialize,
379 Deserialize,
380 gproxy_protocol_macros::WireBuilder,
381 gproxy_protocol_macros::DeclaredFields,
382)]
383pub struct PromptCacheOptions {
384 #[serde(
385 default,
386 deserialize_with = "present_nullable",
387 skip_serializing_if = "Option::is_none"
388 )]
389 pub comparison_response_id: Option<Option<String>>,
390 #[serde(skip_serializing_if = "Option::is_none")]
391 pub prewarm: Option<bool>,
392
393 #[serde(
394 default,
395 deserialize_with = "present_optional",
396 skip_serializing_if = "Option::is_none"
397 )]
398 pub mode: Option<PromptCachingMode>,
399 #[serde(
400 default,
401 deserialize_with = "present_optional",
402 skip_serializing_if = "Option::is_none"
403 )]
404 pub ttl: Option<PromptCacheTtl>,
405 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
406 pub rest: Rest,
407}
408#[derive(
409 Debug,
410 Clone,
411 Copy,
412 PartialEq,
413 Eq,
414 Serialize,
415 Deserialize,
416 gproxy_protocol_macros::DeclaredFields,
417)]
418pub enum PromptCacheRetention {
419 #[serde(rename = "in_memory")]
420 InMemory,
421 #[serde(rename = "24h")]
422 TwentyFourHours,
423}
424#[derive(
425 Debug,
426 Clone,
427 Copy,
428 PartialEq,
429 Eq,
430 Serialize,
431 Deserialize,
432 gproxy_protocol_macros::DeclaredFields,
433)]
434pub enum ServiceTier {
435 #[serde(rename = "auto")]
436 Auto,
437 #[serde(rename = "default")]
438 Default,
439 #[serde(rename = "flex")]
440 Flex,
441 #[serde(rename = "scale")]
442 Scale,
443 #[serde(rename = "priority")]
444 Priority,
445 #[serde(rename = "fast")]
446 Fast,
447 #[serde(rename = "ultrafast")]
448 Ultrafast,
449}
450#[derive(
451 Debug,
452 Clone,
453 PartialEq,
454 Eq,
455 Serialize,
456 Deserialize,
457 gproxy_protocol_macros::WireBuilder,
458 gproxy_protocol_macros::DeclaredFields,
459)]
460pub struct StreamOptions {
461 #[serde(
462 default,
463 deserialize_with = "present_optional",
464 skip_serializing_if = "Option::is_none"
465 )]
466 pub include_obfuscation: Option<bool>,
467 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
468 pub rest: Rest,
469}
470#[derive(
471 Debug,
472 Clone,
473 Copy,
474 PartialEq,
475 Eq,
476 Serialize,
477 Deserialize,
478 gproxy_protocol_macros::DeclaredFields,
479)]
480pub enum GenerateTruncation {
481 #[serde(rename = "auto")]
482 Auto,
483 #[serde(rename = "disabled")]
484 Disabled,
485}
486pub type GenerateContentRequest = crate::WireRequest<GenerateContentRequestBody>;
487
488#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
490#[serde(untagged)]
491#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
492#[derive(gproxy_protocol_macros::DeclaredFields)]
493pub enum PromptVariableValue {
494 String(String),
495 Text(ResponseInputText),
496 Image(ResponseInputImage),
497 File(ResponseInputFile),
498}
499
500#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
502#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
503#[derive(gproxy_protocol_macros::DeclaredFields)]
504pub enum PromptCacheTtl {
505 #[serde(rename = "30m")]
506 ThirtyMinutes,
507}