1use crate::Rest;
2use serde::{Deserialize, Serialize};
3
4fn deserialize_present_value<'de, D>(deserializer: D) -> Result<Option<serde_json::Value>, D::Error>
5where
6 D: serde::Deserializer<'de>,
7{
8 Ok(Some(serde_json::Value::deserialize(deserializer)?))
9}
10
11#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
12#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
13#[derive(gproxy_protocol_macros::DeclaredFields)]
14pub enum Modality {
15 #[serde(rename = "MODALITY_UNSPECIFIED")]
16 Unspecified,
17 #[serde(rename = "TEXT")]
18 Text,
19 #[serde(rename = "IMAGE")]
20 Image,
21 #[serde(rename = "VIDEO")]
22 Video,
23 #[serde(rename = "AUDIO")]
24 Audio,
25 #[serde(rename = "DOCUMENT")]
26 Document,
27}
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
29#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
30#[derive(gproxy_protocol_macros::DeclaredFields)]
31pub enum SchemaType {
32 #[serde(rename = "TYPE_UNSPECIFIED")]
33 Unspecified,
34 #[serde(rename = "STRING")]
35 String,
36 #[serde(rename = "NUMBER")]
37 Number,
38 #[serde(rename = "INTEGER")]
39 Integer,
40 #[serde(rename = "BOOLEAN")]
41 Boolean,
42 #[serde(rename = "ARRAY")]
43 Array,
44 #[serde(rename = "OBJECT")]
45 Object,
46 #[serde(rename = "NULL")]
47 Null,
48}
49#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
50#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
51#[derive(gproxy_protocol_macros::DeclaredFields)]
52pub enum HarmCategory {
53 #[serde(rename = "HARM_CATEGORY_UNSPECIFIED")]
54 Unspecified,
55 #[serde(rename = "HARM_CATEGORY_HARASSMENT")]
56 Harassment,
57 #[serde(rename = "HARM_CATEGORY_HATE_SPEECH")]
58 HateSpeech,
59 #[serde(rename = "HARM_CATEGORY_SEXUALLY_EXPLICIT")]
60 SexuallyExplicit,
61 #[serde(rename = "HARM_CATEGORY_DANGEROUS_CONTENT")]
62 DangerousContent,
63 #[serde(rename = "HARM_CATEGORY_CIVIC_INTEGRITY")]
64 CivicIntegrity,
65 #[serde(rename = "HARM_CATEGORY_DEROGATORY")]
66 Derogatory,
67 #[serde(rename = "HARM_CATEGORY_TOXICITY")]
68 Toxicity,
69 #[serde(rename = "HARM_CATEGORY_VIOLENCE")]
70 Violence,
71 #[serde(rename = "HARM_CATEGORY_SEXUAL")]
72 Sexual,
73 #[serde(rename = "HARM_CATEGORY_MEDICAL")]
74 Medical,
75 #[serde(rename = "HARM_CATEGORY_DANGEROUS")]
76 Dangerous,
77 #[serde(rename = "HARM_CATEGORY_JAILBREAK")]
78 Jailbreak,
79}
80#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
81#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
82#[derive(gproxy_protocol_macros::DeclaredFields)]
83pub enum HarmBlockThreshold {
84 #[serde(rename = "HARM_BLOCK_THRESHOLD_UNSPECIFIED")]
85 Unspecified,
86 #[serde(rename = "BLOCK_LOW_AND_ABOVE")]
87 BlockLowAndAbove,
88 #[serde(rename = "BLOCK_MEDIUM_AND_ABOVE")]
89 BlockMediumAndAbove,
90 #[serde(rename = "BLOCK_ONLY_HIGH")]
91 BlockOnlyHigh,
92 #[serde(rename = "BLOCK_NONE")]
93 BlockNone,
94 #[serde(rename = "OFF")]
95 Off,
96}
97#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
98#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
99#[derive(gproxy_protocol_macros::DeclaredFields)]
100pub enum FunctionCallingMode {
101 #[serde(rename = "MODE_UNSPECIFIED")]
102 Unspecified,
103 #[serde(rename = "AUTO")]
104 Auto,
105 #[serde(rename = "ANY")]
106 Any,
107 #[serde(rename = "NONE")]
108 None,
109 #[serde(rename = "VALIDATED")]
110 Validated,
111}
112#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
113#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
114#[derive(gproxy_protocol_macros::DeclaredFields)]
115pub enum Behavior {
116 #[serde(rename = "UNSPECIFIED")]
117 Unspecified,
118 #[serde(rename = "BLOCKING")]
119 Blocking,
120 #[serde(rename = "NON_BLOCKING")]
121 NonBlocking,
122}
123
124#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
125#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
126#[derive(gproxy_protocol_macros::DeclaredFields)]
127pub enum Scheduling {
128 #[serde(rename = "SCHEDULING_UNSPECIFIED")]
129 Unspecified,
130 #[serde(rename = "SILENT")]
131 Silent,
132 #[serde(rename = "WHEN_IDLE")]
133 WhenIdle,
134 #[serde(rename = "INTERRUPT")]
135 Interrupt,
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 Language {
141 #[serde(rename = "LANGUAGE_UNSPECIFIED")]
142 Unspecified,
143 #[serde(rename = "PYTHON")]
144 Python,
145}
146#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
147#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
148#[derive(gproxy_protocol_macros::DeclaredFields)]
149pub enum Outcome {
150 #[serde(rename = "OUTCOME_UNSPECIFIED")]
151 Unspecified,
152 #[serde(rename = "OUTCOME_OK")]
153 Ok,
154 #[serde(rename = "OUTCOME_FAILED")]
155 Failed,
156 #[serde(rename = "OUTCOME_DEADLINE_EXCEEDED")]
157 DeadlineExceeded,
158}
159#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
160#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
161#[derive(gproxy_protocol_macros::DeclaredFields)]
162pub enum ToolType {
163 #[serde(rename = "TOOL_TYPE_UNSPECIFIED")]
164 Unspecified,
165 #[serde(rename = "GOOGLE_SEARCH_WEB")]
166 GoogleSearchWeb,
167 #[serde(rename = "GOOGLE_SEARCH_IMAGE")]
168 GoogleSearchImage,
169 #[serde(rename = "URL_CONTEXT")]
170 UrlContext,
171 #[serde(rename = "GOOGLE_MAPS")]
172 GoogleMaps,
173 #[serde(rename = "FILE_SEARCH")]
174 FileSearch,
175}
176#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
177#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
178#[derive(gproxy_protocol_macros::DeclaredFields)]
179pub enum MediaResolutionLevel {
180 #[serde(rename = "MEDIA_RESOLUTION_UNSPECIFIED")]
181 Unspecified,
182 #[serde(rename = "MEDIA_RESOLUTION_LOW")]
183 Low,
184 #[serde(rename = "MEDIA_RESOLUTION_MEDIUM")]
185 Medium,
186 #[serde(rename = "MEDIA_RESOLUTION_HIGH")]
187 High,
188 #[serde(rename = "MEDIA_RESOLUTION_ULTRA_HIGH")]
189 UltraHigh,
190}
191#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
192#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
193#[derive(gproxy_protocol_macros::DeclaredFields)]
194pub enum RetrievalMode {
195 #[serde(rename = "MODE_UNSPECIFIED")]
196 Unspecified,
197 #[serde(rename = "MODE_DYNAMIC")]
198 Dynamic,
199}
200#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
201#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
202#[derive(gproxy_protocol_macros::DeclaredFields)]
203pub enum ComputerEnvironment {
204 #[serde(rename = "ENVIRONMENT_UNSPECIFIED")]
205 Unspecified,
206 #[serde(rename = "ENVIRONMENT_BROWSER")]
207 Browser,
208 #[serde(rename = "ENVIRONMENT_MOBILE")]
209 Mobile,
210 #[serde(rename = "ENVIRONMENT_DESKTOP")]
211 Desktop,
212}
213
214#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
215#[serde(rename_all = "camelCase")]
216#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
217#[derive(gproxy_protocol_macros::DeclaredFields)]
218pub struct Content {
219 #[serde(skip_serializing_if = "Option::is_none")]
220 pub parts: Option<Vec<Part>>,
221 #[serde(skip_serializing_if = "Option::is_none")]
222 pub role: Option<String>,
223 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
224 pub rest: Rest,
225}
226
227#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
228#[serde(rename_all = "camelCase")]
229#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
230#[derive(gproxy_protocol_macros::DeclaredFields)]
231pub struct Part {
232 #[serde(skip_serializing_if = "Option::is_none")]
233 pub thought: Option<bool>,
234 #[serde(skip_serializing_if = "Option::is_none")]
235 #[serde(alias = "thought_signature")]
236 pub thought_signature: Option<String>,
237 #[serde(skip_serializing_if = "Option::is_none")]
238 #[serde(alias = "part_metadata")]
239 pub part_metadata: Option<Rest>,
240 #[serde(skip_serializing_if = "Option::is_none")]
241 #[serde(alias = "media_resolution")]
242 pub media_resolution: Option<MediaResolution>,
243 #[serde(alias = "media_processing", skip_serializing_if = "Option::is_none")]
244 pub media_processing: Option<MediaProcessing>,
245 #[serde(alias = "audio_transcription", skip_serializing_if = "Option::is_none")]
246 pub audio_transcription: Option<super::audio::AudioTranscription>,
247 #[serde(alias = "speech_metadata", skip_serializing_if = "Option::is_none")]
248 pub speech_metadata: Option<super::audio::SpeechMetadata>,
249 #[serde(skip_serializing_if = "Option::is_none")]
250 pub text: Option<String>,
251 #[serde(skip_serializing_if = "Option::is_none")]
252 #[serde(alias = "inline_data")]
253 pub inline_data: Option<Blob>,
254 #[serde(skip_serializing_if = "Option::is_none")]
255 #[serde(alias = "function_call")]
256 pub function_call: Option<FunctionCall>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 #[serde(alias = "function_response")]
259 pub function_response: Option<FunctionResponse>,
260 #[serde(skip_serializing_if = "Option::is_none")]
261 #[serde(alias = "file_data")]
262 pub file_data: Option<FileData>,
263 #[serde(skip_serializing_if = "Option::is_none")]
264 #[serde(alias = "executable_code")]
265 pub executable_code: Option<ExecutableCode>,
266 #[serde(skip_serializing_if = "Option::is_none")]
267 #[serde(alias = "code_execution_result")]
268 pub code_execution_result: Option<CodeExecutionResult>,
269 #[serde(skip_serializing_if = "Option::is_none")]
270 #[serde(alias = "tool_call")]
271 pub tool_call: Option<ToolCall>,
272 #[serde(skip_serializing_if = "Option::is_none")]
273 #[serde(alias = "tool_response")]
274 pub tool_response: Option<ToolResponse>,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 #[serde(alias = "video_metadata")]
277 pub video_metadata: Option<VideoMetadata>,
278 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
279 pub rest: Rest,
280}
281
282#[derive(
283 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
284)]
285#[serde(rename_all = "camelCase")]
286#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
287#[derive(gproxy_protocol_macros::DeclaredFields)]
288pub struct Blob {
289 #[serde(alias = "mime_type")]
290 pub mime_type: String,
291 pub data: String,
292 #[serde(alias = "display_name", skip_serializing_if = "Option::is_none")]
293 pub display_name: Option<String>,
294 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
295 pub rest: Rest,
296}
297#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
298#[serde(rename_all = "camelCase")]
299#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
300#[derive(gproxy_protocol_macros::DeclaredFields)]
301pub struct FileData {
302 #[serde(alias = "file_uri")]
303 pub file_uri: String,
304 #[serde(skip_serializing_if = "Option::is_none")]
305 #[serde(alias = "mime_type")]
306 pub mime_type: Option<String>,
307 #[serde(alias = "display_name", skip_serializing_if = "Option::is_none")]
308 pub display_name: Option<String>,
309 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
310 pub rest: Rest,
311}
312#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
313#[serde(rename_all = "camelCase")]
314#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
315#[derive(gproxy_protocol_macros::DeclaredFields)]
316pub struct FunctionCall {
317 pub name: String,
318 #[serde(skip_serializing_if = "Option::is_none")]
319 pub id: Option<String>,
320 #[serde(skip_serializing_if = "Option::is_none")]
321 pub args: Option<Rest>,
322 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
323 pub rest: Rest,
324}
325#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
326#[serde(rename_all = "camelCase")]
327#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
328#[derive(gproxy_protocol_macros::DeclaredFields)]
329pub struct FunctionResponse {
330 pub name: String,
331 pub response: Rest,
332 #[serde(skip_serializing_if = "Option::is_none")]
333 pub id: Option<String>,
334 #[serde(skip_serializing_if = "Option::is_none")]
335 #[serde(alias = "parts")]
336 pub parts: Option<Vec<FunctionResponsePart>>,
337 #[serde(skip_serializing_if = "Option::is_none")]
338 #[serde(alias = "will_continue")]
339 pub will_continue: Option<bool>,
340 #[serde(skip_serializing_if = "Option::is_none")]
341 #[serde(alias = "scheduling")]
342 pub scheduling: Option<Scheduling>,
343 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
344 pub rest: Rest,
345}
346#[derive(
347 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
348)]
349#[serde(rename_all = "camelCase")]
350#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
351#[derive(gproxy_protocol_macros::DeclaredFields)]
352pub struct FunctionResponsePart {
353 #[serde(skip_serializing_if = "Option::is_none")]
354 #[serde(alias = "inline_data")]
355 pub inline_data: Option<Blob>,
356 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
357 pub rest: Rest,
358}
359#[derive(
360 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
361)]
362#[serde(rename_all = "camelCase")]
363#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
364#[derive(gproxy_protocol_macros::DeclaredFields)]
365pub struct ExecutableCode {
366 pub language: Language,
367 pub code: String,
368 #[serde(skip_serializing_if = "Option::is_none")]
369 pub id: Option<String>,
370 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
371 pub rest: Rest,
372}
373#[derive(
374 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
375)]
376#[serde(rename_all = "camelCase")]
377#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
378#[derive(gproxy_protocol_macros::DeclaredFields)]
379pub struct CodeExecutionResult {
380 pub outcome: Outcome,
381 #[serde(skip_serializing_if = "Option::is_none")]
382 pub id: Option<String>,
383 #[serde(skip_serializing_if = "Option::is_none")]
384 pub output: Option<String>,
385 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
386 pub rest: Rest,
387}
388#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
389#[serde(rename_all = "camelCase")]
390#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
391#[derive(gproxy_protocol_macros::DeclaredFields)]
392pub struct ToolCall {
393 #[serde(alias = "tool_type")]
394 pub tool_type: ToolType,
395 #[serde(skip_serializing_if = "Option::is_none")]
396 pub id: Option<String>,
397 #[serde(alias = "tool_name", skip_serializing_if = "Option::is_none")]
398 pub tool_name: Option<String>,
399 #[serde(skip_serializing_if = "Option::is_none")]
400 pub args: Option<Rest>,
401 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
402 pub rest: Rest,
403}
404#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
405#[serde(rename_all = "camelCase")]
406#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
407#[derive(gproxy_protocol_macros::DeclaredFields)]
408pub struct ToolResponse {
409 #[serde(alias = "tool_type")]
410 pub tool_type: ToolType,
411 #[serde(skip_serializing_if = "Option::is_none")]
412 pub id: Option<String>,
413 #[serde(skip_serializing_if = "Option::is_none")]
414 pub response: Option<Rest>,
415 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
416 pub rest: Rest,
417}
418#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
419#[serde(rename_all = "camelCase")]
420#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
421#[derive(gproxy_protocol_macros::DeclaredFields)]
422pub struct VideoMetadata {
423 #[serde(skip_serializing_if = "Option::is_none")]
424 #[serde(alias = "start_offset")]
425 pub start_offset: Option<String>,
426 #[serde(skip_serializing_if = "Option::is_none")]
427 #[serde(alias = "end_offset")]
428 pub end_offset: Option<String>,
429 #[serde(skip_serializing_if = "Option::is_none")]
430 pub fps: Option<f64>,
431 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
432 pub rest: Rest,
433}
434
435#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
436#[serde(rename_all = "camelCase")]
437#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
438#[derive(gproxy_protocol_macros::DeclaredFields)]
439pub struct MediaResolution {
440 #[serde(skip_serializing_if = "Option::is_none")]
441 pub level: Option<MediaResolutionLevel>,
442 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
443 pub rest: Rest,
444}
445
446#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
447#[serde(rename_all = "camelCase")]
448#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
449#[derive(gproxy_protocol_macros::DeclaredFields)]
450pub struct Schema {
451 #[serde(rename = "type")]
452 pub type_: SchemaType,
453 #[serde(skip_serializing_if = "Option::is_none")]
454 pub format: Option<String>,
455 #[serde(skip_serializing_if = "Option::is_none")]
456 pub title: Option<String>,
457 #[serde(skip_serializing_if = "Option::is_none")]
458 pub description: Option<String>,
459 #[serde(skip_serializing_if = "Option::is_none")]
460 pub nullable: Option<bool>,
461 #[serde(skip_serializing_if = "Option::is_none")]
462 pub r#enum: Option<Vec<String>>,
463 #[serde(skip_serializing_if = "Option::is_none")]
464 #[serde(alias = "max_items")]
465 pub max_items: Option<String>,
466 #[serde(skip_serializing_if = "Option::is_none")]
467 #[serde(alias = "min_items")]
468 pub min_items: Option<String>,
469 #[serde(skip_serializing_if = "Option::is_none")]
470 pub properties: Option<std::collections::BTreeMap<String, Box<Schema>>>,
471 #[serde(skip_serializing_if = "Option::is_none")]
472 pub required: Option<Vec<String>>,
473 #[serde(skip_serializing_if = "Option::is_none")]
474 #[serde(alias = "min_properties")]
475 pub min_properties: Option<String>,
476 #[serde(skip_serializing_if = "Option::is_none")]
477 #[serde(alias = "max_properties")]
478 pub max_properties: Option<String>,
479 #[serde(skip_serializing_if = "Option::is_none")]
480 #[serde(alias = "min_length")]
481 pub min_length: Option<String>,
482 #[serde(skip_serializing_if = "Option::is_none")]
483 #[serde(alias = "max_length")]
484 pub max_length: Option<String>,
485 #[serde(skip_serializing_if = "Option::is_none")]
486 pub pattern: Option<String>,
487 #[serde(skip_serializing_if = "Option::is_none")]
488 #[serde(default, deserialize_with = "deserialize_present_value")]
489 pub example: Option<serde_json::Value>,
490 #[serde(skip_serializing_if = "Option::is_none")]
491 #[serde(alias = "any_of")]
492 pub any_of: Option<Vec<Box<Schema>>>,
493 #[serde(skip_serializing_if = "Option::is_none")]
494 #[serde(alias = "property_ordering")]
495 pub property_ordering: Option<Vec<String>>,
496 #[serde(skip_serializing_if = "Option::is_none")]
497 #[serde(default, deserialize_with = "deserialize_present_value")]
498 pub default: Option<serde_json::Value>,
499 #[serde(skip_serializing_if = "Option::is_none")]
500 pub items: Option<Box<Schema>>,
501 #[serde(skip_serializing_if = "Option::is_none")]
502 pub minimum: Option<f64>,
503 #[serde(skip_serializing_if = "Option::is_none")]
504 pub maximum: Option<f64>,
505 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
506 pub rest: Rest,
507}
508
509#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
510#[serde(rename_all = "camelCase")]
511#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
512#[derive(gproxy_protocol_macros::DeclaredFields)]
513pub struct FunctionDeclaration {
514 pub name: String,
515 pub description: String,
516 #[serde(skip_serializing_if = "Option::is_none")]
517 pub behavior: Option<Behavior>,
518 #[serde(skip_serializing_if = "Option::is_none")]
519 pub parameters: Option<Schema>,
520 #[serde(skip_serializing_if = "Option::is_none")]
521 #[serde(alias = "parameters_json_schema")]
522 pub parameters_json_schema: Option<serde_json::Value>,
523 #[serde(skip_serializing_if = "Option::is_none")]
524 pub response: Option<Schema>,
525 #[serde(skip_serializing_if = "Option::is_none")]
526 #[serde(alias = "response_json_schema")]
527 pub response_json_schema: Option<serde_json::Value>,
528 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
529 pub rest: Rest,
530}
531#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
532#[serde(rename_all = "camelCase")]
533#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
534#[derive(gproxy_protocol_macros::DeclaredFields)]
535pub struct GoogleSearchRetrieval {
536 #[serde(skip_serializing_if = "Option::is_none")]
537 #[serde(alias = "dynamic_retrieval_config")]
538 pub dynamic_retrieval_config: Option<DynamicRetrievalConfig>,
539 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
540 pub rest: Rest,
541}
542#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
543#[serde(rename_all = "camelCase")]
544#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
545#[derive(gproxy_protocol_macros::DeclaredFields)]
546pub struct DynamicRetrievalConfig {
547 #[serde(skip_serializing_if = "Option::is_none")]
548 pub mode: Option<RetrievalMode>,
549 #[serde(skip_serializing_if = "Option::is_none")]
550 #[serde(alias = "dynamic_threshold")]
551 pub dynamic_threshold: Option<f64>,
552 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
553 pub rest: Rest,
554}
555#[derive(
556 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
557)]
558#[serde(rename_all = "camelCase")]
559#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
560#[derive(gproxy_protocol_macros::DeclaredFields)]
561pub struct CodeExecution {
562 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
563 pub rest: Rest,
564}
565#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
566#[serde(rename_all = "camelCase")]
567#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
568#[derive(gproxy_protocol_macros::DeclaredFields)]
569pub struct GoogleSearch {
570 #[serde(skip_serializing_if = "Option::is_none")]
571 #[serde(alias = "time_range_filter")]
572 pub time_range_filter: Option<Interval>,
573 #[serde(skip_serializing_if = "Option::is_none")]
574 #[serde(alias = "search_types")]
575 pub search_types: Option<SearchTypes>,
576 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
577 pub rest: Rest,
578}
579#[derive(
580 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
581)]
582#[serde(rename_all = "camelCase")]
583#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
584#[derive(gproxy_protocol_macros::DeclaredFields)]
585pub struct Interval {
586 #[serde(skip_serializing_if = "Option::is_none")]
587 #[serde(alias = "start_time")]
588 pub start_time: Option<String>,
589 #[serde(skip_serializing_if = "Option::is_none")]
590 #[serde(alias = "end_time")]
591 pub end_time: Option<String>,
592 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
593 pub rest: Rest,
594}
595#[derive(
596 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
597)]
598#[serde(rename_all = "camelCase")]
599#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
600#[derive(gproxy_protocol_macros::DeclaredFields)]
601pub struct SearchTypes {
602 #[serde(skip_serializing_if = "Option::is_none")]
603 #[serde(alias = "web_search")]
604 pub web_search: Option<WebSearch>,
605 #[serde(skip_serializing_if = "Option::is_none")]
606 #[serde(alias = "image_search")]
607 pub image_search: Option<ImageSearch>,
608 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
609 pub rest: Rest,
610}
611#[derive(
612 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
613)]
614#[serde(rename_all = "camelCase")]
615#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
616#[derive(gproxy_protocol_macros::DeclaredFields)]
617pub struct WebSearch {
618 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
619 pub rest: Rest,
620}
621#[derive(
622 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
623)]
624#[serde(rename_all = "camelCase")]
625#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
626#[derive(gproxy_protocol_macros::DeclaredFields)]
627pub struct ImageSearch {
628 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
629 pub rest: Rest,
630}
631#[derive(
632 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
633)]
634#[serde(rename_all = "camelCase")]
635#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
636#[derive(gproxy_protocol_macros::DeclaredFields)]
637pub struct UrlContext {
638 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
639 pub rest: Rest,
640}
641#[derive(
642 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
643)]
644#[serde(rename_all = "camelCase")]
645#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
646#[derive(gproxy_protocol_macros::DeclaredFields)]
647pub struct FileSearch {
648 #[serde(alias = "file_search_store_names")]
649 pub file_search_store_names: Vec<String>,
650 #[serde(skip_serializing_if = "Option::is_none")]
651 #[serde(alias = "metadata_filter")]
652 pub metadata_filter: Option<String>,
653 #[serde(skip_serializing_if = "Option::is_none")]
654 #[serde(alias = "top_k")]
655 pub top_k: Option<i64>,
656 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
657 pub rest: Rest,
658}
659#[derive(
660 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
661)]
662#[serde(rename_all = "camelCase")]
663#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
664#[derive(gproxy_protocol_macros::DeclaredFields)]
665pub struct McpServer {
666 pub name: String,
667 #[serde(skip_serializing_if = "Option::is_none")]
668 #[serde(alias = "streamable_http_transport")]
669 pub streamable_http_transport: Option<StreamableHttpTransport>,
670 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
671 pub rest: Rest,
672}
673#[derive(
674 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
675)]
676#[serde(rename_all = "camelCase")]
677#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
678#[derive(gproxy_protocol_macros::DeclaredFields)]
679pub struct StreamableHttpTransport {
680 pub url: String,
681 #[serde(skip_serializing_if = "Option::is_none")]
682 pub headers: Option<std::collections::BTreeMap<String, String>>,
683 #[serde(skip_serializing_if = "Option::is_none")]
684 pub timeout: Option<String>,
685 #[serde(skip_serializing_if = "Option::is_none")]
686 #[serde(alias = "sse_read_timeout")]
687 pub sse_read_timeout: Option<String>,
688 #[serde(skip_serializing_if = "Option::is_none")]
689 #[serde(alias = "terminate_on_close")]
690 pub terminate_on_close: Option<bool>,
691 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
692 pub rest: Rest,
693}
694#[derive(
695 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
696)]
697#[serde(rename_all = "camelCase")]
698#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
699#[derive(gproxy_protocol_macros::DeclaredFields)]
700pub struct ComputerUse {
701 pub environment: ComputerEnvironment,
702 #[serde(skip_serializing_if = "Option::is_none")]
703 #[serde(alias = "excluded_predefined_functions")]
704 pub excluded_predefined_functions: Option<Vec<String>>,
705 #[serde(
706 alias = "enable_prompt_injection_detection",
707 skip_serializing_if = "Option::is_none"
708 )]
709 pub enable_prompt_injection_detection: Option<bool>,
710 #[serde(
711 alias = "disabled_safety_policies",
712 skip_serializing_if = "Option::is_none"
713 )]
714 pub disabled_safety_policies: Option<Vec<ComputerUseSafetyPolicy>>,
715 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
716 pub rest: Rest,
717}
718#[derive(
719 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
720)]
721#[serde(rename_all = "camelCase")]
722#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
723#[derive(gproxy_protocol_macros::DeclaredFields)]
724pub struct GoogleMaps {
725 #[serde(skip_serializing_if = "Option::is_none")]
726 #[serde(alias = "enable_widget")]
727 pub enable_widget: Option<bool>,
728 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
729 pub rest: Rest,
730}
731#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
732#[serde(rename_all = "camelCase")]
733#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
734#[derive(gproxy_protocol_macros::DeclaredFields)]
735pub struct Tool {
736 #[serde(skip_serializing_if = "Option::is_none")]
737 #[serde(alias = "function_declarations")]
738 pub function_declarations: Option<Vec<FunctionDeclaration>>,
739 #[serde(skip_serializing_if = "Option::is_none")]
740 #[serde(alias = "google_search_retrieval")]
741 pub google_search_retrieval: Option<GoogleSearchRetrieval>,
742 #[serde(skip_serializing_if = "Option::is_none")]
743 #[serde(alias = "code_execution")]
744 pub code_execution: Option<CodeExecution>,
745 #[serde(skip_serializing_if = "Option::is_none")]
746 #[serde(alias = "google_search")]
747 pub google_search: Option<GoogleSearch>,
748 #[serde(skip_serializing_if = "Option::is_none")]
749 #[serde(alias = "computer_use")]
750 pub computer_use: Option<ComputerUse>,
751 #[serde(skip_serializing_if = "Option::is_none")]
752 #[serde(alias = "url_context")]
753 pub url_context: Option<UrlContext>,
754 #[serde(skip_serializing_if = "Option::is_none")]
755 #[serde(alias = "file_search")]
756 pub file_search: Option<FileSearch>,
757 #[serde(skip_serializing_if = "Option::is_none")]
758 #[serde(alias = "mcp_servers")]
759 pub mcp_servers: Option<Vec<McpServer>>,
760 #[serde(skip_serializing_if = "Option::is_none")]
761 #[serde(alias = "google_maps")]
762 pub google_maps: Option<GoogleMaps>,
763 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
764 pub rest: Rest,
765}
766#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
767#[serde(rename_all = "camelCase")]
768#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
769#[derive(gproxy_protocol_macros::DeclaredFields)]
770pub struct FunctionCallingConfig {
771 #[serde(skip_serializing_if = "Option::is_none")]
772 pub mode: Option<FunctionCallingMode>,
773 #[serde(skip_serializing_if = "Option::is_none")]
774 #[serde(alias = "allowed_function_names")]
775 pub allowed_function_names: Option<Vec<String>>,
776 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
777 pub rest: Rest,
778}
779#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
780#[serde(rename_all = "camelCase")]
781#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
782#[derive(gproxy_protocol_macros::DeclaredFields)]
783pub struct ToolConfig {
784 #[serde(skip_serializing_if = "Option::is_none")]
785 #[serde(alias = "function_calling_config")]
786 pub function_calling_config: Option<FunctionCallingConfig>,
787 #[serde(skip_serializing_if = "Option::is_none")]
788 #[serde(alias = "retrieval_config")]
789 pub retrieval_config: Option<RetrievalConfig>,
790 #[serde(skip_serializing_if = "Option::is_none")]
791 #[serde(alias = "include_server_side_tool_invocations")]
792 pub include_server_side_tool_invocations: Option<bool>,
793 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
794 pub rest: Rest,
795}
796#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
797#[serde(rename_all = "camelCase")]
798#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
799#[derive(gproxy_protocol_macros::DeclaredFields)]
800pub struct RetrievalConfig {
801 #[serde(skip_serializing_if = "Option::is_none")]
802 #[serde(alias = "lat_lng")]
803 pub lat_lng: Option<LatLng>,
804 #[serde(skip_serializing_if = "Option::is_none")]
805 #[serde(alias = "language_code")]
806 pub language_code: Option<String>,
807 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
808 pub rest: Rest,
809}
810#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
811#[serde(rename_all = "camelCase")]
812#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
813#[derive(gproxy_protocol_macros::DeclaredFields)]
814pub struct LatLng {
815 pub latitude: f64,
816 pub longitude: f64,
817 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
818 pub rest: Rest,
819}
820#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
821#[serde(rename_all = "camelCase")]
822#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
823#[derive(gproxy_protocol_macros::DeclaredFields)]
824pub struct SafetySetting {
825 pub category: HarmCategory,
826 pub threshold: HarmBlockThreshold,
827 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
828 pub rest: Rest,
829}
830
831#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
832#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
833#[derive(gproxy_protocol_macros::DeclaredFields)]
834pub enum MediaProcessing {
835 #[serde(rename = "MEDIA_PROCESSING_UNSPECIFIED")]
836 Unspecified,
837 #[serde(rename = "STATIC")]
838 Static,
839 #[serde(rename = "AGENTIC")]
840 Agentic,
841}
842
843#[derive(
844 Debug,
845 Clone,
846 Copy,
847 PartialEq,
848 Eq,
849 Serialize,
850 Deserialize,
851 gproxy_protocol_macros::DeclaredFields,
852)]
853#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
854pub enum ComputerUseSafetyPolicy {
855 #[serde(rename = "SAFETY_POLICY_UNSPECIFIED")]
856 Unspecified,
857 #[serde(rename = "FINANCIAL_TRANSACTIONS")]
858 FinancialTransactions,
859 #[serde(rename = "SENSITIVE_DATA_MODIFICATION")]
860 SensitiveDataModification,
861 #[serde(rename = "COMMUNICATION_TOOL")]
862 CommunicationTool,
863 #[serde(rename = "ACCOUNT_CREATION")]
864 AccountCreation,
865 #[serde(rename = "DATA_MODIFICATION")]
866 DataModification,
867 #[serde(rename = "USER_CONSENT_MANAGEMENT")]
868 UserConsentManagement,
869 #[serde(rename = "LEGAL_TERMS_AND_AGREEMENTS")]
870 LegalTermsAndAgreements,
871}