1pub use super::audio::{
2 AudioTranscriptionConfig, AudioTranscriptionMode, LanguageAuto, LanguageHints,
3 TranslationConfig,
4};
5use super::content::*;
6use crate::Rest;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
10#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
11#[derive(gproxy_protocol_macros::DeclaredFields)]
12pub enum ThinkingLevel {
13 #[serde(rename = "THINKING_LEVEL_UNSPECIFIED")]
14 Unspecified,
15 #[serde(rename = "MINIMAL")]
16 Minimal,
17 #[serde(rename = "LOW")]
18 Low,
19 #[serde(rename = "MEDIUM")]
20 Medium,
21 #[serde(rename = "HIGH")]
22 High,
23}
24#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
25#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
26#[derive(gproxy_protocol_macros::DeclaredFields)]
27pub enum GenerationMediaResolution {
28 #[serde(rename = "MEDIA_RESOLUTION_UNSPECIFIED")]
29 Unspecified,
30 #[serde(rename = "MEDIA_RESOLUTION_LOW")]
31 Low,
32 #[serde(rename = "MEDIA_RESOLUTION_MEDIUM")]
33 Medium,
34 #[serde(rename = "MEDIA_RESOLUTION_HIGH")]
35 High,
36}
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
39#[derive(gproxy_protocol_macros::DeclaredFields)]
40pub enum TextMimeType {
41 #[serde(rename = "MIME_TYPE_UNSPECIFIED")]
42 Unspecified,
43 #[serde(rename = "APPLICATION_JSON")]
44 ApplicationJson,
45 #[serde(rename = "TEXT_PLAIN")]
46 TextPlain,
47}
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
49#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
50#[derive(gproxy_protocol_macros::DeclaredFields)]
51pub enum AudioMimeType {
52 #[serde(rename = "MIME_TYPE_UNSPECIFIED")]
53 Unspecified,
54 #[serde(rename = "AUDIO_MP3")]
55 AudioMp3,
56 #[serde(rename = "AUDIO_OGG_OPUS")]
57 AudioOggOpus,
58 #[serde(rename = "AUDIO_L16")]
59 AudioL16,
60 #[serde(rename = "AUDIO_WAV")]
61 AudioWav,
62 #[serde(rename = "AUDIO_ALAW")]
63 AudioAlaw,
64 #[serde(rename = "AUDIO_MULAW")]
65 AudioMulaw,
66}
67#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
68#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
69#[derive(gproxy_protocol_macros::DeclaredFields)]
70pub enum Delivery {
71 #[serde(rename = "DELIVERY_UNSPECIFIED")]
72 Unspecified,
73 #[serde(rename = "INLINE")]
74 Inline,
75 #[serde(rename = "URI")]
76 Uri,
77}
78#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
79#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
80#[derive(gproxy_protocol_macros::DeclaredFields)]
81pub enum ImageMimeType {
82 #[serde(rename = "MIME_TYPE_UNSPECIFIED")]
83 Unspecified,
84 #[serde(rename = "IMAGE_JPEG")]
85 ImageJpeg,
86}
87#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
88#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
89#[derive(gproxy_protocol_macros::DeclaredFields)]
90pub enum AspectRatio {
91 #[serde(rename = "ASPECT_RATIO_UNSPECIFIED")]
92 Unspecified,
93 #[serde(rename = "ASPECT_RATIO_ONE_BY_ONE")]
94 OneByOne,
95 #[serde(rename = "ASPECT_RATIO_TWO_BY_THREE")]
96 TwoByThree,
97 #[serde(rename = "ASPECT_RATIO_THREE_BY_TWO")]
98 ThreeByTwo,
99 #[serde(rename = "ASPECT_RATIO_THREE_BY_FOUR")]
100 ThreeByFour,
101 #[serde(rename = "ASPECT_RATIO_FOUR_BY_THREE")]
102 FourByThree,
103 #[serde(rename = "ASPECT_RATIO_FOUR_BY_FIVE")]
104 FourByFive,
105 #[serde(rename = "ASPECT_RATIO_FIVE_BY_FOUR")]
106 FiveByFour,
107 #[serde(rename = "ASPECT_RATIO_NINE_BY_SIXTEEN")]
108 NineBySixteen,
109 #[serde(rename = "ASPECT_RATIO_SIXTEEN_BY_NINE")]
110 SixteenByNine,
111 #[serde(rename = "ASPECT_RATIO_TWENTY_ONE_BY_NINE")]
112 TwentyOneByNine,
113 #[serde(rename = "ASPECT_RATIO_ONE_BY_EIGHT")]
114 OneByEight,
115 #[serde(rename = "ASPECT_RATIO_EIGHT_BY_ONE")]
116 EightByOne,
117 #[serde(rename = "ASPECT_RATIO_ONE_BY_FOUR")]
118 OneByFour,
119 #[serde(rename = "ASPECT_RATIO_FOUR_BY_ONE")]
120 FourByOne,
121}
122#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
123#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
124#[derive(gproxy_protocol_macros::DeclaredFields)]
125pub enum ImageSize {
126 #[serde(rename = "IMAGE_SIZE_UNSPECIFIED")]
127 Unspecified,
128 #[serde(rename = "IMAGE_SIZE_FIVE_TWELVE")]
129 FiveTwelve,
130 #[serde(rename = "IMAGE_SIZE_ONE_K")]
131 OneK,
132 #[serde(rename = "IMAGE_SIZE_TWO_K")]
133 TwoK,
134 #[serde(rename = "IMAGE_SIZE_FOUR_K")]
135 FourK,
136}
137#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
138#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
139#[derive(gproxy_protocol_macros::DeclaredFields)]
140pub enum ServiceTier {
141 #[serde(rename = "unspecified")]
142 Unspecified,
143 #[serde(rename = "standard")]
144 Standard,
145 #[serde(rename = "flex")]
146 Flex,
147 #[serde(rename = "priority")]
148 Priority,
149}
150
151#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
152#[serde(rename_all = "camelCase")]
153#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
154#[derive(gproxy_protocol_macros::DeclaredFields)]
155pub struct SpeechConfig {
156 #[serde(skip_serializing_if = "Option::is_none")]
157 #[serde(alias = "voice_config")]
158 pub voice_config: Option<VoiceConfig>,
159 #[serde(skip_serializing_if = "Option::is_none")]
160 #[serde(alias = "multi_speaker_voice_config")]
161 pub multi_speaker_voice_config: Option<MultiSpeakerVoiceConfig>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 #[serde(alias = "language_code")]
164 pub language_code: Option<String>,
165 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
166 pub rest: Rest,
167}
168#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
169#[serde(rename_all = "camelCase")]
170#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
171#[derive(gproxy_protocol_macros::DeclaredFields)]
172pub struct VoiceConfig {
173 #[serde(alias = "prebuilt_voice_config")]
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub prebuilt_voice_config: Option<PrebuiltVoiceConfig>,
176 #[serde(skip_serializing_if = "Option::is_none")]
178 pub voice: Option<String>,
179 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
180 pub rest: Rest,
181}
182#[derive(
183 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
184)]
185#[serde(rename_all = "camelCase")]
186#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
187#[derive(gproxy_protocol_macros::DeclaredFields)]
188pub struct PrebuiltVoiceConfig {
189 #[serde(alias = "voice_name")]
190 #[serde(skip_serializing_if = "Option::is_none")]
191 pub voice_name: Option<String>,
192 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
193 pub rest: Rest,
194}
195#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
196#[serde(rename_all = "camelCase")]
197#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
198#[derive(gproxy_protocol_macros::DeclaredFields)]
199pub struct MultiSpeakerVoiceConfig {
200 #[serde(alias = "speaker_voice_configs")]
201 pub speaker_voice_configs: Vec<SpeakerVoiceConfig>,
202 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
203 pub rest: Rest,
204}
205#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
206#[serde(rename_all = "camelCase")]
207#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
208#[derive(gproxy_protocol_macros::DeclaredFields)]
209pub struct SpeakerVoiceConfig {
210 pub speaker: String,
211 #[serde(alias = "voice_config")]
212 pub voice_config: VoiceConfig,
213 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
214 pub rest: Rest,
215}
216#[derive(
217 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
218)]
219#[serde(rename_all = "camelCase")]
220#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
221#[derive(gproxy_protocol_macros::DeclaredFields)]
222pub struct ThinkingConfig {
223 #[serde(skip_serializing_if = "Option::is_none")]
224 #[serde(alias = "thinking_budget")]
225 pub thinking_budget: Option<i64>,
226 #[serde(skip_serializing_if = "Option::is_none")]
227 #[serde(alias = "thinking_level")]
228 pub thinking_level: Option<ThinkingLevel>,
229 #[serde(skip_serializing_if = "Option::is_none")]
230 #[serde(alias = "include_thoughts")]
231 pub include_thoughts: Option<bool>,
232 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
233 pub rest: Rest,
234}
235#[derive(
236 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
237)]
238#[serde(rename_all = "camelCase")]
239#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
240#[derive(gproxy_protocol_macros::DeclaredFields)]
241pub struct ImageConfig {
242 #[serde(skip_serializing_if = "Option::is_none")]
243 #[serde(alias = "aspect_ratio")]
244 pub aspect_ratio: Option<String>,
245 #[serde(skip_serializing_if = "Option::is_none")]
246 #[serde(alias = "image_size")]
247 pub image_size: Option<String>,
248 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
249 pub rest: Rest,
250}
251#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
252#[serde(rename_all = "camelCase")]
253#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
254#[derive(gproxy_protocol_macros::DeclaredFields)]
255pub struct ResponseFormatConfig {
256 #[serde(skip_serializing_if = "Option::is_none")]
257 pub text: Option<TextResponseFormat>,
258 #[serde(skip_serializing_if = "Option::is_none")]
259 pub audio: Option<AudioResponseFormat>,
260 #[serde(skip_serializing_if = "Option::is_none")]
261 pub image: Option<ImageResponseFormat>,
262 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
263 pub rest: Rest,
264}
265#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
266#[serde(rename_all = "camelCase")]
267#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
268#[derive(gproxy_protocol_macros::DeclaredFields)]
269pub struct TextResponseFormat {
270 #[serde(skip_serializing_if = "Option::is_none")]
271 #[serde(alias = "mime_type")]
272 pub mime_type: Option<TextMimeType>,
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub schema: Option<serde_json::Value>,
275 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
276 pub rest: Rest,
277}
278#[derive(
279 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
280)]
281#[serde(rename_all = "camelCase")]
282#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
283#[derive(gproxy_protocol_macros::DeclaredFields)]
284pub struct AudioResponseFormat {
285 #[serde(skip_serializing_if = "Option::is_none")]
286 #[serde(alias = "mime_type")]
287 pub mime_type: Option<AudioMimeType>,
288 #[serde(skip_serializing_if = "Option::is_none")]
289 pub delivery: Option<Delivery>,
290 #[serde(skip_serializing_if = "Option::is_none")]
291 #[serde(alias = "sample_rate")]
292 pub sample_rate: Option<i64>,
293 #[serde(skip_serializing_if = "Option::is_none")]
294 #[serde(alias = "bit_rate")]
295 pub bit_rate: Option<i64>,
296 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
297 pub rest: Rest,
298}
299#[derive(
300 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
301)]
302#[serde(rename_all = "camelCase")]
303#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
304#[derive(gproxy_protocol_macros::DeclaredFields)]
305pub struct ImageResponseFormat {
306 #[serde(skip_serializing_if = "Option::is_none")]
307 #[serde(alias = "mime_type")]
308 pub mime_type: Option<ImageMimeType>,
309 #[serde(skip_serializing_if = "Option::is_none")]
310 pub delivery: Option<Delivery>,
311 #[serde(skip_serializing_if = "Option::is_none")]
312 #[serde(alias = "aspect_ratio")]
313 pub aspect_ratio: Option<AspectRatio>,
314 #[serde(skip_serializing_if = "Option::is_none")]
315 #[serde(alias = "image_size")]
316 pub image_size: Option<ImageSize>,
317 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
318 pub rest: Rest,
319}
320
321#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
322#[serde(rename_all = "camelCase")]
323#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
324#[derive(gproxy_protocol_macros::DeclaredFields)]
328pub struct EmbeddedGenerateContentRequest {
329 pub model: String,
331 pub contents: Vec<Content>,
332 #[serde(skip_serializing_if = "Option::is_none")]
333 pub tools: Option<Vec<Tool>>,
334 #[serde(skip_serializing_if = "Option::is_none")]
335 #[serde(alias = "tool_config")]
336 pub tool_config: Option<ToolConfig>,
337 #[serde(skip_serializing_if = "Option::is_none")]
338 #[serde(alias = "safety_settings")]
339 pub safety_settings: Option<Vec<SafetySetting>>,
340 #[serde(skip_serializing_if = "Option::is_none")]
341 pub labels: Option<std::collections::BTreeMap<String, String>>,
342 #[serde(skip_serializing_if = "Option::is_none")]
343 #[serde(alias = "system_instruction")]
344 pub system_instruction: Option<Content>,
345 #[serde(skip_serializing_if = "Option::is_none")]
346 #[serde(alias = "generation_config")]
347 pub generation_config: Option<GenerationConfig>,
348 #[serde(skip_serializing_if = "Option::is_none")]
349 #[serde(alias = "cached_content")]
350 pub cached_content: Option<String>,
351 #[serde(skip_serializing_if = "Option::is_none")]
352 #[serde(alias = "service_tier")]
353 pub service_tier: Option<ServiceTier>,
354 #[serde(skip_serializing_if = "Option::is_none")]
355 pub store: Option<bool>,
356 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
357 pub rest: Rest,
358}
359
360#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
361#[serde(rename_all = "camelCase")]
362#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
363#[derive(gproxy_protocol_macros::DeclaredFields)]
364pub struct GenerationConfig {
365 #[serde(skip_serializing_if = "Option::is_none")]
366 #[serde(alias = "stop_sequences")]
367 pub stop_sequences: Option<Vec<String>>,
368 #[serde(skip_serializing_if = "Option::is_none")]
369 #[serde(alias = "response_mime_type")]
370 pub response_mime_type: Option<String>,
371 #[serde(skip_serializing_if = "Option::is_none")]
372 #[serde(alias = "response_schema")]
373 pub response_schema: Option<Schema>,
374 #[serde(
375 rename = "_responseJsonSchema",
376 skip_serializing_if = "Option::is_none"
377 )]
378 pub response_json_schema_internal: Option<serde_json::Value>,
379 #[serde(skip_serializing_if = "Option::is_none")]
380 #[serde(alias = "response_json_schema")]
381 pub response_json_schema: Option<serde_json::Value>,
382 #[serde(skip_serializing_if = "Option::is_none")]
383 #[serde(alias = "response_modalities")]
384 pub response_modalities: Option<Vec<Modality>>,
385 #[serde(skip_serializing_if = "Option::is_none")]
386 #[serde(alias = "candidate_count")]
387 pub candidate_count: Option<i64>,
388 #[serde(skip_serializing_if = "Option::is_none")]
389 #[serde(alias = "max_output_tokens")]
390 pub max_output_tokens: Option<i64>,
391 #[serde(skip_serializing_if = "Option::is_none")]
392 pub temperature: Option<f64>,
393 #[serde(skip_serializing_if = "Option::is_none")]
394 #[serde(alias = "top_p")]
395 pub top_p: Option<f64>,
396 #[serde(skip_serializing_if = "Option::is_none")]
397 #[serde(alias = "top_k")]
398 pub top_k: Option<i64>,
399 #[serde(skip_serializing_if = "Option::is_none")]
400 pub seed: Option<i64>,
401 #[serde(skip_serializing_if = "Option::is_none")]
402 #[serde(alias = "presence_penalty")]
403 pub presence_penalty: Option<f64>,
404 #[serde(skip_serializing_if = "Option::is_none")]
405 #[serde(alias = "frequency_penalty")]
406 pub frequency_penalty: Option<f64>,
407 #[serde(skip_serializing_if = "Option::is_none")]
408 #[serde(alias = "response_logprobs")]
409 pub response_logprobs: Option<bool>,
410 #[serde(skip_serializing_if = "Option::is_none")]
411 pub logprobs: Option<i64>,
412 #[serde(skip_serializing_if = "Option::is_none")]
413 #[serde(alias = "enable_enhanced_civic_answers")]
414 pub enable_enhanced_civic_answers: Option<bool>,
415 #[serde(skip_serializing_if = "Option::is_none")]
416 #[serde(alias = "speech_config")]
417 pub speech_config: Option<SpeechConfig>,
418 #[serde(skip_serializing_if = "Option::is_none")]
419 #[serde(alias = "thinking_config")]
420 pub thinking_config: Option<ThinkingConfig>,
421 #[serde(skip_serializing_if = "Option::is_none")]
422 #[serde(alias = "image_config")]
423 pub image_config: Option<ImageConfig>,
424 #[serde(skip_serializing_if = "Option::is_none")]
425 #[serde(alias = "media_resolution")]
426 pub media_resolution: Option<GenerationMediaResolution>,
427 #[serde(skip_serializing_if = "Option::is_none")]
428 #[serde(alias = "response_format")]
429 pub response_format: Option<ResponseFormatConfig>,
430 #[serde(
431 alias = "enable_affective_dialog",
432 skip_serializing_if = "Option::is_none"
433 )]
434 pub enable_affective_dialog: Option<bool>,
435 #[serde(alias = "translation_config", skip_serializing_if = "Option::is_none")]
436 pub translation_config: Option<TranslationConfig>,
437 #[serde(
438 alias = "audio_transcription_config",
439 skip_serializing_if = "Option::is_none"
440 )]
441 pub audio_transcription_config: Option<AudioTranscriptionConfig>,
442 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
443 pub rest: Rest,
444}