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