1use super::content::{Content, HarmCategory, SafetySetting, Tool, ToolConfig};
8use super::count_tokens::ModalityTokenCount;
9use super::generation::{GenerationConfig, ServiceTier};
10use crate::{Rest, WireRequest, WireResponse};
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
14#[serde(rename_all = "camelCase")]
15#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
16#[derive(gproxy_protocol_macros::DeclaredFields)]
17pub struct GenerateContentRequestBody {
18 pub contents: Vec<Content>,
19 #[serde(alias = "continuation_token", skip_serializing_if = "Option::is_none")]
21 pub continuation_token: Option<String>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub tools: Option<Vec<Tool>>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 #[serde(alias = "tool_config")]
26 pub tool_config: Option<ToolConfig>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 #[serde(alias = "safety_settings")]
29 pub safety_settings: Option<Vec<SafetySetting>>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub labels: Option<std::collections::BTreeMap<String, String>>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 #[serde(alias = "system_instruction")]
34 pub system_instruction: Option<Content>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 #[serde(alias = "generation_config")]
37 pub generation_config: Option<GenerationConfig>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 #[serde(alias = "cached_content")]
40 pub cached_content: Option<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 #[serde(alias = "service_tier")]
43 pub service_tier: Option<ServiceTier>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub store: Option<bool>,
46 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
47 pub rest: Rest,
48}
49
50pub type GenerateContentRequest = WireRequest<GenerateContentRequestBody>;
51pub type GenerateContentResponse = WireResponse<GenerateContentResponseBody>;
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
54#[serde(rename_all = "camelCase")]
55#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
56#[derive(gproxy_protocol_macros::DeclaredFields)]
57pub struct GenerateContentResponseBody {
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub candidates: Option<Vec<Candidate>>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 #[serde(alias = "prompt_feedback")]
62 pub prompt_feedback: Option<PromptFeedback>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 #[serde(alias = "usage_metadata")]
65 pub usage_metadata: Option<UsageMetadata>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 #[serde(alias = "model_version")]
68 pub model_version: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 #[serde(alias = "response_id")]
71 pub response_id: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 #[serde(alias = "model_status")]
74 pub model_status: Option<ModelStatus>,
75 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
76 pub rest: Rest,
77}
78
79#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
80#[serde(rename_all = "camelCase")]
81#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
82#[derive(gproxy_protocol_macros::DeclaredFields)]
83pub struct PromptFeedback {
84 #[serde(skip_serializing_if = "Option::is_none")]
85 #[serde(alias = "block_reason")]
86 pub block_reason: Option<BlockReason>,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 #[serde(alias = "safety_ratings")]
89 pub safety_ratings: Option<Vec<SafetyRating>>,
90 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
91 pub rest: Rest,
92}
93
94#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
95#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
96#[derive(gproxy_protocol_macros::DeclaredFields)]
97pub enum BlockReason {
98 #[serde(rename = "BLOCK_REASON_UNSPECIFIED")]
99 Unspecified,
100 #[serde(rename = "SAFETY")]
101 Safety,
102 #[serde(rename = "OTHER")]
103 Other,
104 #[serde(rename = "BLOCKLIST")]
105 Blocklist,
106 #[serde(rename = "PROHIBITED_CONTENT")]
107 ProhibitedContent,
108 #[serde(rename = "IMAGE_SAFETY")]
109 ImageSafety,
110}
111
112#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
113#[serde(rename_all = "camelCase")]
114#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
115#[derive(gproxy_protocol_macros::DeclaredFields)]
116pub struct UsageMetadata {
117 #[serde(skip_serializing_if = "Option::is_none")]
118 #[serde(alias = "prompt_token_count")]
119 pub prompt_token_count: Option<i64>,
120 #[serde(skip_serializing_if = "Option::is_none")]
121 #[serde(alias = "cached_content_token_count")]
122 pub cached_content_token_count: Option<i64>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 #[serde(alias = "candidates_token_count")]
125 pub candidates_token_count: Option<i64>,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 #[serde(alias = "tool_use_prompt_token_count")]
128 pub tool_use_prompt_token_count: Option<i64>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 #[serde(alias = "thoughts_token_count")]
131 pub thoughts_token_count: Option<i64>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 #[serde(alias = "total_token_count")]
134 pub total_token_count: Option<i64>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 #[serde(alias = "prompt_tokens_details")]
137 pub prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
138 #[serde(skip_serializing_if = "Option::is_none")]
139 #[serde(alias = "cache_tokens_details")]
140 pub cache_tokens_details: Option<Vec<ModalityTokenCount>>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 #[serde(alias = "candidates_tokens_details")]
143 pub candidates_tokens_details: Option<Vec<ModalityTokenCount>>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 #[serde(alias = "tool_use_prompt_tokens_details")]
146 pub tool_use_prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
147 #[serde(skip_serializing_if = "Option::is_none")]
148 #[serde(alias = "service_tier")]
149 pub service_tier: Option<ServiceTier>,
150 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
151 pub rest: Rest,
152}
153
154#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
155#[serde(rename_all = "camelCase")]
156#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
157#[derive(gproxy_protocol_macros::DeclaredFields)]
158pub struct ModelStatus {
159 #[serde(skip_serializing_if = "Option::is_none")]
160 #[serde(alias = "model_stage")]
161 pub model_stage: Option<ModelStage>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 #[serde(alias = "retirement_time")]
164 pub retirement_time: Option<String>,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub message: Option<String>,
167 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
168 pub rest: Rest,
169}
170
171#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
172#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
173#[derive(gproxy_protocol_macros::DeclaredFields)]
174pub enum ModelStage {
175 #[serde(rename = "MODEL_STAGE_UNSPECIFIED")]
176 Unspecified,
177 #[serde(rename = "UNSTABLE_EXPERIMENTAL")]
178 UnstableExperimental,
179 #[serde(rename = "EXPERIMENTAL")]
180 Experimental,
181 #[serde(rename = "PREVIEW")]
182 Preview,
183 #[serde(rename = "STABLE")]
184 Stable,
185 #[serde(rename = "LEGACY")]
186 Legacy,
187 #[serde(rename = "DEPRECATED")]
188 Deprecated,
189 #[serde(rename = "RETIRED")]
190 Retired,
191}
192
193#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
194#[serde(rename_all = "camelCase")]
195#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
196#[derive(gproxy_protocol_macros::DeclaredFields)]
197pub struct Candidate {
198 #[serde(skip_serializing_if = "Option::is_none")]
199 pub content: Option<Content>,
200 #[serde(skip_serializing_if = "Option::is_none")]
201 #[serde(alias = "finish_reason")]
202 pub finish_reason: Option<FinishReason>,
203 #[serde(alias = "continuation_token", skip_serializing_if = "Option::is_none")]
204 pub continuation_token: Option<String>,
205 #[serde(skip_serializing_if = "Option::is_none")]
206 #[serde(alias = "safety_ratings")]
207 pub safety_ratings: Option<Vec<SafetyRating>>,
208 #[serde(skip_serializing_if = "Option::is_none")]
209 #[serde(alias = "citation_metadata")]
210 pub citation_metadata: Option<CitationMetadata>,
211 #[serde(skip_serializing_if = "Option::is_none")]
212 #[serde(alias = "token_count")]
213 pub token_count: Option<i64>,
214 #[serde(skip_serializing_if = "Option::is_none")]
215 #[serde(alias = "grounding_attributions")]
216 pub grounding_attributions: Option<Vec<GroundingAttribution>>,
217 #[serde(skip_serializing_if = "Option::is_none")]
218 #[serde(alias = "grounding_metadata")]
219 pub grounding_metadata: Option<GroundingMetadata>,
220 #[serde(skip_serializing_if = "Option::is_none")]
221 #[serde(alias = "avg_logprobs")]
222 pub avg_logprobs: Option<f64>,
223 #[serde(skip_serializing_if = "Option::is_none")]
224 #[serde(alias = "logprobs_result")]
225 pub logprobs_result: Option<LogprobsResult>,
226 #[serde(skip_serializing_if = "Option::is_none")]
227 #[serde(alias = "url_context_metadata")]
228 pub url_context_metadata: Option<UrlContextMetadata>,
229 #[serde(skip_serializing_if = "Option::is_none")]
230 pub index: Option<i64>,
231 #[serde(skip_serializing_if = "Option::is_none")]
232 #[serde(alias = "finish_message")]
233 pub finish_message: Option<String>,
234 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
235 pub rest: Rest,
236}
237
238#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
239#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
240#[derive(gproxy_protocol_macros::DeclaredFields)]
241pub enum FinishReason {
242 #[serde(rename = "FINISH_REASON_UNSPECIFIED")]
243 Unspecified,
244 #[serde(rename = "STOP")]
245 Stop,
246 #[serde(rename = "MAX_TOKENS")]
247 MaxTokens,
248 #[serde(rename = "CONTINUATION")]
250 Continuation,
251 #[serde(rename = "SAFETY")]
252 Safety,
253 #[serde(rename = "RECITATION")]
254 Recitation,
255 #[serde(rename = "LANGUAGE")]
256 Language,
257 #[serde(rename = "OTHER")]
258 Other,
259 #[serde(rename = "BLOCKLIST")]
260 Blocklist,
261 #[serde(rename = "PROHIBITED_CONTENT")]
262 ProhibitedContent,
263 #[serde(rename = "SPII")]
264 Spii,
265 #[serde(rename = "MALFORMED_FUNCTION_CALL")]
266 MalformedFunctionCall,
267 #[serde(rename = "IMAGE_SAFETY")]
268 ImageSafety,
269 #[serde(rename = "IMAGE_PROHIBITED_CONTENT")]
270 ImageProhibitedContent,
271 #[serde(rename = "IMAGE_OTHER")]
272 ImageOther,
273 #[serde(rename = "NO_IMAGE")]
274 NoImage,
275 #[serde(rename = "IMAGE_RECITATION")]
276 ImageRecitation,
277 #[serde(rename = "UNEXPECTED_TOOL_CALL")]
278 UnexpectedToolCall,
279 #[serde(rename = "TOO_MANY_TOOL_CALLS")]
280 TooManyToolCalls,
281 #[serde(rename = "MISSING_THOUGHT_SIGNATURE")]
282 MissingThoughtSignature,
283 #[serde(rename = "MALFORMED_RESPONSE")]
284 MalformedResponse,
285 #[serde(rename = "ESCALATION")]
286 Escalation,
287 #[serde(rename = "PUP_LIMITED_DISABLED")]
288 PupLimitedDisabled,
289}
290
291#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
292#[serde(rename_all = "camelCase")]
293#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
294#[derive(gproxy_protocol_macros::DeclaredFields)]
295pub struct SafetyRating {
296 pub category: HarmCategory,
297 pub probability: HarmProbability,
298 #[serde(skip_serializing_if = "Option::is_none")]
299 pub blocked: Option<bool>,
300 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
301 pub rest: Rest,
302}
303
304#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
305#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
306#[derive(gproxy_protocol_macros::DeclaredFields)]
307pub enum HarmProbability {
308 #[serde(rename = "HARM_PROBABILITY_UNSPECIFIED")]
309 Unspecified,
310 #[serde(rename = "NEGLIGIBLE")]
311 Negligible,
312 #[serde(rename = "LOW")]
313 Low,
314 #[serde(rename = "MEDIUM")]
315 Medium,
316 #[serde(rename = "HIGH")]
317 High,
318}
319
320#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
321#[serde(rename_all = "camelCase")]
322#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
323#[derive(gproxy_protocol_macros::DeclaredFields)]
324pub struct GroundingAttribution {
325 #[serde(skip_serializing_if = "Option::is_none")]
326 #[serde(alias = "source_id")]
327 pub source_id: Option<AttributionSourceId>,
328 #[serde(skip_serializing_if = "Option::is_none")]
329 pub content: Option<Content>,
330 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
331 pub rest: Rest,
332}
333#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
334#[serde(rename_all = "camelCase")]
335#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
336#[derive(gproxy_protocol_macros::DeclaredFields)]
337pub struct AttributionSourceId {
338 #[serde(skip_serializing_if = "Option::is_none")]
339 #[serde(alias = "grounding_passage")]
340 pub grounding_passage: Option<GroundingPassageId>,
341 #[serde(skip_serializing_if = "Option::is_none")]
342 #[serde(alias = "semantic_retriever_chunk")]
343 pub semantic_retriever_chunk: Option<SemanticRetrieverChunk>,
344 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
345 pub rest: Rest,
346}
347#[derive(
348 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
349)]
350#[serde(rename_all = "camelCase")]
351#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
352#[derive(gproxy_protocol_macros::DeclaredFields)]
353pub struct GroundingPassageId {
354 #[serde(skip_serializing_if = "Option::is_none")]
355 #[serde(alias = "passage_id")]
356 pub passage_id: Option<String>,
357 #[serde(skip_serializing_if = "Option::is_none")]
358 #[serde(alias = "part_index")]
359 pub part_index: Option<i64>,
360 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
361 pub rest: Rest,
362}
363#[derive(
364 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
365)]
366#[serde(rename_all = "camelCase")]
367#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
368#[derive(gproxy_protocol_macros::DeclaredFields)]
369pub struct SemanticRetrieverChunk {
370 #[serde(skip_serializing_if = "Option::is_none")]
371 pub source: Option<String>,
372 #[serde(skip_serializing_if = "Option::is_none")]
373 pub chunk: Option<String>,
374 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
375 pub rest: Rest,
376}
377
378#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
379#[serde(rename_all = "camelCase")]
380#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
381#[derive(gproxy_protocol_macros::DeclaredFields)]
382pub struct GroundingMetadata {
383 #[serde(skip_serializing_if = "Option::is_none")]
384 #[serde(alias = "grounding_chunks")]
385 pub grounding_chunks: Option<Vec<GroundingChunk>>,
386 #[serde(skip_serializing_if = "Option::is_none")]
387 #[serde(alias = "grounding_supports")]
388 pub grounding_supports: Option<Vec<GroundingSupport>>,
389 #[serde(skip_serializing_if = "Option::is_none")]
390 #[serde(alias = "web_search_queries")]
391 pub web_search_queries: Option<Vec<String>>,
392 #[serde(skip_serializing_if = "Option::is_none")]
393 #[serde(alias = "image_search_queries")]
394 pub image_search_queries: Option<Vec<String>>,
395 #[serde(skip_serializing_if = "Option::is_none")]
396 #[serde(alias = "search_entry_point")]
397 pub search_entry_point: Option<SearchEntryPoint>,
398 #[serde(skip_serializing_if = "Option::is_none")]
399 #[serde(alias = "retrieval_metadata")]
400 pub retrieval_metadata: Option<RetrievalMetadata>,
401 #[serde(skip_serializing_if = "Option::is_none")]
402 #[serde(alias = "google_maps_widget_context_token")]
403 pub google_maps_widget_context_token: Option<String>,
404 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
405 pub rest: Rest,
406}
407#[derive(
408 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
409)]
410#[serde(rename_all = "camelCase")]
411#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
412#[derive(gproxy_protocol_macros::DeclaredFields)]
413pub struct SearchEntryPoint {
414 #[serde(skip_serializing_if = "Option::is_none")]
415 #[serde(alias = "rendered_content")]
416 pub rendered_content: Option<String>,
417 #[serde(skip_serializing_if = "Option::is_none")]
418 #[serde(alias = "sdk_blob")]
419 pub sdk_blob: Option<String>,
420 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
421 pub rest: Rest,
422}
423#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
424#[serde(rename_all = "camelCase")]
425#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
426#[derive(gproxy_protocol_macros::DeclaredFields)]
427pub struct GroundingChunk {
428 #[serde(skip_serializing_if = "Option::is_none")]
429 pub web: Option<Web>,
430 #[serde(skip_serializing_if = "Option::is_none")]
431 pub image: Option<Image>,
432 #[serde(skip_serializing_if = "Option::is_none")]
433 #[serde(alias = "retrieved_context")]
434 pub retrieved_context: Option<RetrievedContext>,
435 #[serde(skip_serializing_if = "Option::is_none")]
436 pub maps: Option<Maps>,
437 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
438 pub rest: Rest,
439}
440#[derive(
441 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
442)]
443#[serde(rename_all = "camelCase")]
444#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
445#[derive(gproxy_protocol_macros::DeclaredFields)]
446pub struct Web {
447 #[serde(skip_serializing_if = "Option::is_none")]
448 pub uri: Option<String>,
449 #[serde(skip_serializing_if = "Option::is_none")]
450 pub title: Option<String>,
451 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
452 pub rest: Rest,
453}
454#[derive(
455 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
456)]
457#[serde(rename_all = "camelCase")]
458#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
459#[derive(gproxy_protocol_macros::DeclaredFields)]
460pub struct Image {
461 #[serde(skip_serializing_if = "Option::is_none")]
462 #[serde(alias = "source_uri")]
463 pub source_uri: Option<String>,
464 #[serde(skip_serializing_if = "Option::is_none")]
465 #[serde(alias = "image_uri")]
466 pub image_uri: Option<String>,
467 #[serde(skip_serializing_if = "Option::is_none")]
468 pub title: Option<String>,
469 #[serde(skip_serializing_if = "Option::is_none")]
470 pub domain: Option<String>,
471 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
472 pub rest: Rest,
473}
474#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
475#[serde(rename_all = "camelCase")]
476#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
477#[derive(gproxy_protocol_macros::DeclaredFields)]
478pub struct RetrievedContext {
479 #[serde(skip_serializing_if = "Option::is_none")]
480 #[serde(alias = "custom_metadata")]
481 pub custom_metadata: Option<Vec<CustomMetadata>>,
482 #[serde(skip_serializing_if = "Option::is_none")]
483 pub uri: Option<String>,
484 #[serde(skip_serializing_if = "Option::is_none")]
485 pub title: Option<String>,
486 #[serde(skip_serializing_if = "Option::is_none")]
487 pub text: Option<String>,
488 #[serde(skip_serializing_if = "Option::is_none")]
489 #[serde(alias = "file_search_store")]
490 pub file_search_store: Option<String>,
491 #[serde(skip_serializing_if = "Option::is_none")]
492 #[serde(alias = "page_number")]
493 pub page_number: Option<i64>,
494 #[serde(skip_serializing_if = "Option::is_none")]
495 #[serde(alias = "media_id")]
496 pub media_id: Option<String>,
497 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
498 pub rest: Rest,
499}
500#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
501#[serde(rename_all = "camelCase")]
502#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
503#[derive(gproxy_protocol_macros::DeclaredFields)]
504pub struct CustomMetadata {
505 #[serde(skip_serializing_if = "Option::is_none")]
506 pub key: Option<String>,
507 #[serde(skip_serializing_if = "Option::is_none")]
508 #[serde(alias = "string_value")]
509 pub string_value: Option<String>,
510 #[serde(skip_serializing_if = "Option::is_none")]
511 #[serde(alias = "string_list_value")]
512 pub string_list_value: Option<StringList>,
513 #[serde(skip_serializing_if = "Option::is_none")]
514 #[serde(alias = "numeric_value")]
515 pub numeric_value: Option<f64>,
516 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
517 pub rest: Rest,
518}
519#[derive(
520 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
521)]
522#[serde(rename_all = "camelCase")]
523#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
524#[derive(gproxy_protocol_macros::DeclaredFields)]
525pub struct StringList {
526 #[serde(skip_serializing_if = "Option::is_none")]
527 pub values: Option<Vec<String>>,
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 Maps {
536 #[serde(skip_serializing_if = "Option::is_none")]
537 pub uri: Option<String>,
538 #[serde(skip_serializing_if = "Option::is_none")]
539 pub title: Option<String>,
540 #[serde(skip_serializing_if = "Option::is_none")]
541 pub text: Option<String>,
542 #[serde(skip_serializing_if = "Option::is_none")]
543 #[serde(alias = "place_id")]
544 pub place_id: Option<String>,
545 #[serde(skip_serializing_if = "Option::is_none")]
546 #[serde(alias = "place_answer_sources")]
547 pub place_answer_sources: Option<PlaceAnswerSources>,
548 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
549 pub rest: Rest,
550}
551#[derive(
552 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
553)]
554#[serde(rename_all = "camelCase")]
555#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
556#[derive(gproxy_protocol_macros::DeclaredFields)]
557pub struct PlaceAnswerSources {
558 #[serde(skip_serializing_if = "Option::is_none")]
559 #[serde(alias = "review_snippets")]
560 pub review_snippets: Option<Vec<ReviewSnippet>>,
561 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
562 pub rest: Rest,
563}
564#[derive(
565 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
566)]
567#[serde(rename_all = "camelCase")]
568#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
569#[derive(gproxy_protocol_macros::DeclaredFields)]
570pub struct ReviewSnippet {
571 #[serde(skip_serializing_if = "Option::is_none")]
572 #[serde(alias = "review_id")]
573 pub review_id: Option<String>,
574 #[serde(skip_serializing_if = "Option::is_none")]
575 #[serde(alias = "google_maps_uri")]
576 pub google_maps_uri: Option<String>,
577 #[serde(skip_serializing_if = "Option::is_none")]
578 pub title: Option<String>,
579 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
580 pub rest: Rest,
581}
582
583#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
584#[serde(rename_all = "camelCase")]
585#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
586#[derive(gproxy_protocol_macros::DeclaredFields)]
587pub struct GroundingSupport {
588 #[serde(skip_serializing_if = "Option::is_none")]
589 #[serde(alias = "grounding_chunk_indices")]
590 pub grounding_chunk_indices: Option<Vec<i64>>,
591 #[serde(skip_serializing_if = "Option::is_none")]
592 #[serde(alias = "confidence_scores")]
593 pub confidence_scores: Option<Vec<f64>>,
594 #[serde(skip_serializing_if = "Option::is_none")]
595 #[serde(alias = "rendered_parts")]
596 pub rendered_parts: Option<Vec<i64>>,
597 #[serde(skip_serializing_if = "Option::is_none")]
598 pub segment: Option<Segment>,
599 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
600 pub rest: Rest,
601}
602#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
603#[serde(rename_all = "camelCase")]
604#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
605#[derive(gproxy_protocol_macros::DeclaredFields)]
606pub struct Segment {
607 #[serde(skip_serializing_if = "Option::is_none")]
608 #[serde(alias = "part_index")]
609 pub part_index: Option<i64>,
610 #[serde(skip_serializing_if = "Option::is_none")]
611 #[serde(alias = "start_index")]
612 pub start_index: Option<i64>,
613 #[serde(skip_serializing_if = "Option::is_none")]
614 #[serde(alias = "end_index")]
615 pub end_index: Option<i64>,
616 #[serde(skip_serializing_if = "Option::is_none")]
617 pub text: Option<String>,
618 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
619 pub rest: Rest,
620}
621#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
622#[serde(rename_all = "camelCase")]
623#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
624#[derive(gproxy_protocol_macros::DeclaredFields)]
625pub struct RetrievalMetadata {
626 #[serde(skip_serializing_if = "Option::is_none")]
627 #[serde(alias = "google_search_dynamic_retrieval_score")]
628 pub google_search_dynamic_retrieval_score: Option<f64>,
629 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
630 pub rest: Rest,
631}
632
633#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
634#[serde(rename_all = "camelCase")]
635#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
636#[derive(gproxy_protocol_macros::DeclaredFields)]
637pub struct LogprobsResult {
638 #[serde(skip_serializing_if = "Option::is_none")]
639 #[serde(alias = "top_candidates")]
640 pub top_candidates: Option<Vec<TopCandidates>>,
641 #[serde(skip_serializing_if = "Option::is_none")]
642 #[serde(alias = "chosen_candidates")]
643 pub chosen_candidates: Option<Vec<LogprobCandidate>>,
644 #[serde(skip_serializing_if = "Option::is_none")]
645 #[serde(alias = "log_probability_sum")]
646 pub log_probability_sum: Option<f64>,
647 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
648 pub rest: Rest,
649}
650#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
651#[serde(rename_all = "camelCase")]
652#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
653#[derive(gproxy_protocol_macros::DeclaredFields)]
654pub struct TopCandidates {
655 #[serde(skip_serializing_if = "Option::is_none")]
656 pub candidates: Option<Vec<LogprobCandidate>>,
657 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
658 pub rest: Rest,
659}
660#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
661#[serde(rename_all = "camelCase")]
662#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
663#[derive(gproxy_protocol_macros::DeclaredFields)]
664pub struct LogprobCandidate {
665 #[serde(skip_serializing_if = "Option::is_none")]
666 pub token: Option<String>,
667 #[serde(skip_serializing_if = "Option::is_none")]
668 #[serde(alias = "token_id")]
669 pub token_id: Option<i64>,
670 #[serde(skip_serializing_if = "Option::is_none")]
671 #[serde(alias = "log_probability")]
672 pub log_probability: Option<f64>,
673 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
674 pub rest: Rest,
675}
676#[derive(
677 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
678)]
679#[serde(rename_all = "camelCase")]
680#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
681#[derive(gproxy_protocol_macros::DeclaredFields)]
682pub struct UrlContextMetadata {
683 #[serde(skip_serializing_if = "Option::is_none")]
684 #[serde(alias = "url_metadata")]
685 pub url_metadata: Option<Vec<UrlMetadata>>,
686 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
687 pub rest: Rest,
688}
689#[derive(
690 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
691)]
692#[serde(rename_all = "camelCase")]
693#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
694#[derive(gproxy_protocol_macros::DeclaredFields)]
695pub struct UrlMetadata {
696 #[serde(skip_serializing_if = "Option::is_none")]
697 #[serde(alias = "retrieved_url")]
698 pub retrieved_url: Option<String>,
699 #[serde(skip_serializing_if = "Option::is_none")]
700 #[serde(alias = "url_retrieval_status")]
701 pub url_retrieval_status: Option<UrlRetrievalStatus>,
702 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
703 pub rest: Rest,
704}
705#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
706#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
707#[derive(gproxy_protocol_macros::DeclaredFields)]
708pub enum UrlRetrievalStatus {
709 #[serde(rename = "URL_RETRIEVAL_STATUS_UNSPECIFIED")]
710 Unspecified,
711 #[serde(rename = "URL_RETRIEVAL_STATUS_SUCCESS")]
712 Success,
713 #[serde(rename = "URL_RETRIEVAL_STATUS_ERROR")]
714 Error,
715 #[serde(rename = "URL_RETRIEVAL_STATUS_PAYWALL")]
716 Paywall,
717 #[serde(rename = "URL_RETRIEVAL_STATUS_UNSAFE")]
718 Unsafe,
719}
720
721#[derive(
722 Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
723)]
724#[serde(rename_all = "camelCase")]
725#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
726#[derive(gproxy_protocol_macros::DeclaredFields)]
727pub struct CitationMetadata {
728 #[serde(skip_serializing_if = "Option::is_none")]
729 #[serde(alias = "citation_sources")]
730 pub citation_sources: Option<Vec<CitationSource>>,
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)]
740pub struct CitationSource {
741 #[serde(skip_serializing_if = "Option::is_none")]
742 #[serde(alias = "start_index")]
743 pub start_index: Option<i64>,
744 #[serde(skip_serializing_if = "Option::is_none")]
745 #[serde(alias = "end_index")]
746 pub end_index: Option<i64>,
747 #[serde(skip_serializing_if = "Option::is_none")]
748 pub uri: Option<String>,
749 #[serde(skip_serializing_if = "Option::is_none")]
750 pub license: Option<String>,
751 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
752 pub rest: Rest,
753}