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