1use derive_setters::*;
2use serde_derive::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4use time::Date;
5
6#[derive(Debug, Serialize, Deserialize, Clone, Default)]
7#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
8pub enum Outcome {
9 #[default]
10 Unspecified,
11 Ok,
12 Failed,
13 DeadlineExceeded,
14}
15
16#[derive(Debug, Serialize, Deserialize, Clone)]
17#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
18pub enum Language {
19 Unspecified,
20 Python,
21}
22
23#[derive(Debug, Serialize, Deserialize, Clone)]
24#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
25pub enum Type {
26 Unspecified,
27 String,
28 Number,
29 Integer,
30 Boolean,
31 Array,
32 Object,
33}
34
35#[derive(Debug, Serialize, Deserialize, Clone, Default)]
36#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
37pub enum HarmCategory {
38 #[default]
39 Unspecified,
40 HateSpeech,
41 DangerousContent,
42 Harassment,
43 SexuallyExplicit,
44 CivicIntegrity,
45}
46
47#[derive(Debug, Serialize, Deserialize, Clone)]
48pub enum HarmBlockMethod {
49 #[serde(rename = "HARM_BLOCK_METHOD_UNSPECIFIED")]
50 Unspecified,
51 #[serde(rename = "SEVERITY")]
52 Severity,
53 #[serde(rename = "PROBABILITY")]
54 Probability,
55}
56
57#[derive(Debug, Serialize, Deserialize, Clone, Default)]
58#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
59pub enum HarmBlockThreshold {
60 #[default]
61 Unspecified,
62 BlockLowAndAbove,
63 BlockMediumAndAbove,
64 BlockOnlyHigh,
65 BlockNone,
66 Off,
67}
68
69#[derive(Debug, Serialize, Deserialize, Clone)]
70#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
71pub enum Mode {
72 Unspecified,
73 Dynamic,
74}
75
76#[derive(Debug, Serialize, Deserialize, Clone)]
77#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
78pub enum FinishReason {
79 Unspecified,
80 Stop,
81 MaxTokens,
82 Safety,
83 Recitation,
84 Other,
85 Blocklist,
86 ProhibitedContent,
87 Spii,
88 MalformedFunctionCall,
89}
90
91#[derive(Debug, Serialize, Deserialize, Clone)]
92pub enum HarmProbability {
93 #[serde(rename = "HARM_PROBABILITY_UNSPECIFIED")]
94 Unspecified,
95 #[serde(rename = "NEGLIGIBLE")]
96 Negligible,
97 #[serde(rename = "LOW")]
98 Low,
99 #[serde(rename = "MEDIUM")]
100 Medium,
101 #[serde(rename = "HIGH")]
102 High,
103}
104
105#[derive(Debug, Serialize, Deserialize, Clone)]
106#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
107pub enum HarmSeverity {
108 Unspecified,
109 HarmSeverityNegligible,
110 HarmSeverityLow,
111 HarmSeverityMedium,
112 HarmSeverityHigh,
113}
114
115#[derive(Debug, Serialize, Deserialize, Clone)]
116#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
117pub enum BlockedReason {
118 Unspecified,
119 Safety,
120 Other,
121 Blocklist,
122 ProhibitedContent,
123}
124
125#[derive(Debug, Serialize, Deserialize, Clone)]
126#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
127pub enum DynamicRetrievalConfigMode {
128 Unspecified,
129 ModeDynamic,
130}
131
132#[derive(Debug, Serialize, Deserialize, Clone)]
133pub enum FunctionCallingConfigMode {
134 #[serde(rename = "MODE_UNSPECIFIED")]
135 Unspecified,
136 #[serde(rename = "AUTO")]
137 Auto,
138 #[serde(rename = "ANY")]
139 Any,
140 #[serde(rename = "NONE")]
141 None,
142}
143
144#[derive(Debug, Serialize, Deserialize, Clone)]
145#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
146pub enum MediaResolution {
147 Unspecified,
148 Low,
149 Medium,
150 High,
151}
152
153#[derive(Debug, Serialize, Deserialize, Clone)]
154#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
155pub enum MaskReferenceMode {
156 MaskModeDefault,
157 MaskModeUserProvided,
158 MaskModeBackground,
159 MaskModeForeground,
160 MaskModeSemantic,
161}
162
163#[derive(Debug, Serialize, Deserialize, Clone)]
164#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
165pub enum ControlReferenceType {
166 ControlTypeDefault,
167 ControlTypeCanny,
168 ControlTypeScribble,
169 ControlTypeFaceMesh,
170}
171
172#[derive(Debug, Serialize, Deserialize, Clone)]
173#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
174pub enum SubjectReferenceType {
175 SubjectTypeDefault,
176 SubjectTypePerson,
177 SubjectTypeAnimal,
178 SubjectTypeProduct,
179}
180
181#[skip_serializing_none]
182#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
183#[setters(strip_option, into)]
184pub struct VideoMetadata {
185 pub end_offset: Option<String>,
186 pub start_offset: Option<String>,
187}
188
189#[skip_serializing_none]
190#[derive(Debug, Serialize, Deserialize, Clone, Setters)]
191#[setters(strip_option, into)]
192pub struct CodeExecutionResult {
193 pub outcome: Outcome,
194 pub output: Option<String>,
195}
196
197#[derive(Debug, Serialize, Deserialize, Clone)]
198pub struct ExecutableCode {
199 pub code: String,
200 pub language: Language,
201}
202
203#[derive(Debug, Serialize, Deserialize, Clone)]
204pub struct FileData {
205 pub file_uri: String,
206 pub mime_type: String,
207}
208
209#[skip_serializing_none]
210#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
211#[setters(strip_option, into)]
212pub struct FunctionCall {
213 pub id: Option<String>,
214 pub args: Option<serde_json::Value>,
215 pub name: String,
216}
217
218#[skip_serializing_none]
219#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
220#[setters(strip_option, into)]
221pub struct FunctionResponse {
222 pub id: Option<String>,
223 pub name: String,
224 pub response: serde_json::Value,
225}
226
227#[derive(Debug, Serialize, Deserialize, Clone)]
228pub struct Blob {
229 pub data: Vec<u8>,
230 pub mime_type: String,
231}
232
233#[skip_serializing_none]
234#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
235#[setters(strip_option, into)]
236pub struct Part {
237 pub video_metadata: Option<VideoMetadata>,
238 pub code_execution_result: Option<CodeExecutionResult>,
239 pub executable_code: Option<ExecutableCode>,
240 pub file_data: Option<FileData>,
241 pub function_call: Option<FunctionCall>,
242 pub function_response: Option<FunctionResponse>,
243 pub inline_data: Option<Blob>,
244 pub text: Option<String>,
245}
246
247#[skip_serializing_none]
248#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
249#[setters(strip_option, into)]
250pub struct Content {
251 pub parts: Option<Vec<Part>>,
252 pub role: Option<String>,
253}
254
255#[skip_serializing_none]
256#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
257#[setters(strip_option, into)]
258pub struct Schema {
261 pub min_items: Option<String>,
263 pub example: Option<serde_json::Value>,
265 pub property_ordering: Option<Vec<String>>,
267 pub pattern: Option<String>,
269 pub minimum: Option<f64>,
271 pub default: Option<serde_json::Value>,
273 pub any_of: Option<Vec<Schema>>,
275 pub max_length: Option<String>,
277 pub title: Option<String>,
279 pub min_length: Option<String>,
281 pub min_properties: Option<String>,
283 pub max_items: Option<String>,
285 pub maximum: Option<f64>,
287 pub nullable: Option<bool>,
289 pub max_properties: Option<String>,
291 #[setters(skip)]
293 pub r#type: Option<Type>,
294 pub description: Option<String>,
296 #[setters(skip)]
298 pub r#enum: Option<Vec<String>>,
299 pub format: Option<String>,
301 pub items: Option<Box<Schema>>,
303 pub properties: Option<std::collections::HashMap<String, Schema>>,
305 pub required: Option<Vec<String>>,
307}
308
309#[skip_serializing_none]
310#[derive(Debug, Serialize, Deserialize, Clone, Setters)]
311#[setters(strip_option, into)]
312pub struct SafetySetting {
314 pub method: Option<HarmBlockMethod>,
316 pub category: HarmCategory,
318 pub threshold: HarmBlockThreshold,
320}
321
322#[skip_serializing_none]
323#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
324#[setters(strip_option, into)]
325pub struct FunctionDeclaration {
327 pub response: Option<Schema>,
329 pub description: Option<String>,
331 pub name: String,
333 pub parameters: Option<Schema>,
335}
336
337#[derive(Debug, Serialize, Deserialize, Clone)]
338pub struct GoogleSearch {}
339
340#[skip_serializing_none]
341#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
342#[setters(strip_option, into)]
343pub struct DynamicRetrievalConfig {
345 pub mode: Option<DynamicRetrievalConfigMode>,
347 pub dynamic_threshold: Option<f64>,
349}
350
351#[skip_serializing_none]
352#[derive(Debug, Serialize, Deserialize, Clone, Default)]
353pub struct GoogleSearchRetrieval {
355 pub dynamic_retrieval_config: Option<DynamicRetrievalConfig>,
357}
358
359#[derive(Debug, Serialize, Deserialize, Clone)]
360pub struct VertexAISearch {
362 pub datastore: String,
364}
365
366#[skip_serializing_none]
367#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
368#[setters(strip_option, into)]
369pub struct VertexRAGStoreRAGResource {
371 pub rag_corpus: Option<String>,
373 pub rag_file_ids: Option<Vec<String>>,
375}
376
377#[skip_serializing_none]
378#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
379#[setters(strip_option, into)]
380pub struct VertexRAGStore {
381 pub rag_corpora: Option<Vec<String>>,
382 pub rag_resources: Option<Vec<VertexRAGStoreRAGResource>>,
383 pub similarity_top_k: Option<i64>,
384 pub vector_distance_threshold: Option<f64>,
385}
386
387#[skip_serializing_none]
388#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
389#[setters(strip_option, into)]
390pub struct Retrieval {
391 pub vertex_ai_search: Option<VertexAISearch>,
392 pub vertex_rag_store: Option<VertexRAGStore>,
393}
394
395#[derive(Debug, Serialize, Deserialize, Clone)]
396pub struct ToolCodeExecution {}
397
398#[skip_serializing_none]
399#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
400#[setters(strip_option, into)]
401pub struct Tool {
403 pub function_declarations: Option<Vec<FunctionDeclaration>>,
405 pub retrieval: Option<Retrieval>,
407 pub google_search: Option<GoogleSearch>,
409 pub google_search_retrieval: Option<GoogleSearchRetrieval>,
411 pub code_execution: Option<ToolCodeExecution>,
413}
414
415#[skip_serializing_none]
416#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
417#[setters(strip_option, into)]
418pub struct FunctionCallingConfig {
419 pub mode: Option<FunctionCallingConfigMode>,
420 pub allowed_function_names: Option<Vec<String>>,
421}
422
423#[skip_serializing_none]
424#[derive(Debug, Serialize, Deserialize, Clone, Default)]
425pub struct ToolConfig {
426 pub function_calling_config: Option<FunctionCallingConfig>,
427}
428
429#[skip_serializing_none]
430#[derive(Debug, Serialize, Deserialize, Clone, Default)]
432pub struct PrebuiltVoiceConfig {
433 pub voice_name: Option<String>,
435}
436
437#[skip_serializing_none]
438#[derive(Debug, Serialize, Deserialize, Clone, Default)]
440pub struct VoiceConfig {
441 pub prebuilt_voice_config: Option<PrebuiltVoiceConfig>,
443}
444
445#[skip_serializing_none]
446#[derive(Debug, Serialize, Deserialize, Clone, Default)]
448pub struct SpeechConfig {
449 pub voice_config: Option<VoiceConfig>,
451}
452
453#[skip_serializing_none]
454#[derive(Debug, Serialize, Deserialize, Clone, Default)]
456pub struct GenerationConfigRoutingConfigAutoRoutingMode {
457 pub model_routing_preference: Option<String>,
459}
460
461#[skip_serializing_none]
462#[derive(Debug, Serialize, Deserialize, Clone)]
464pub struct GenerationConfigRoutingConfigManualRoutingMode {
465 pub model_name: Option<String>,
467}
468
469#[skip_serializing_none]
470#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
472#[setters(strip_option, into)]
473pub struct GenerationConfigRoutingConfig {
474 pub auto_mode: Option<GenerationConfigRoutingConfigAutoRoutingMode>,
476 pub manual_mode: Option<GenerationConfigRoutingConfigManualRoutingMode>,
478}
479
480#[skip_serializing_none]
481#[derive(Debug, Serialize, Deserialize, Clone, Default, Setters)]
482#[setters(strip_option, into)]
483pub struct GenerateContentParameters {
484 pub model: Option<String>,
485 pub contents: Option<Vec<Content>>,
486 pub config: Option<GenerateContentConfig>,
487}
488
489#[skip_serializing_none]
490#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
491#[setters(strip_option, into)]
492pub struct Citation {
493 pub end_index: Option<i64>,
494 pub license: Option<String>,
495 pub publication_date: Option<Date>,
496 pub start_index: Option<i64>,
497 pub title: Option<String>,
498 pub uri: Option<String>,
499}
500
501#[skip_serializing_none]
502#[derive(Debug, Serialize, Deserialize, Clone, Default)]
503pub struct CitationMetadata {
504 pub citations: Option<Vec<Citation>>,
505}
506
507#[skip_serializing_none]
508#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
509#[setters(strip_option, into)]
510pub struct GroundingChunkRetrievedContext {
511 pub text: Option<String>,
512 pub title: Option<String>,
513 pub uri: Option<String>,
514}
515
516#[skip_serializing_none]
517#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
518#[setters(strip_option, into)]
519pub struct GroundingChunkWeb {
520 pub title: Option<String>,
521 pub uri: Option<String>,
522}
523
524#[skip_serializing_none]
525#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
526#[setters(strip_option, into)]
527pub struct GroundingChunk {
528 pub retrieved_context: Option<GroundingChunkRetrievedContext>,
529 pub web: Option<GroundingChunkWeb>,
530}
531
532#[skip_serializing_none]
533#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
534#[setters(strip_option, into)]
535pub struct Segment {
536 pub end_index: Option<i64>,
537 pub part_index: Option<i64>,
538 pub start_index: Option<i64>,
539 pub text: Option<String>,
540}
541
542#[skip_serializing_none]
543#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
544#[setters(strip_option, into)]
545pub struct GroundingSupport {
546 pub confidence_scores: Option<Vec<f64>>,
547 pub grounding_chunk_indices: Option<Vec<i64>>,
548 pub segment: Option<Segment>,
549}
550
551#[skip_serializing_none]
552#[derive(Debug, Serialize, Deserialize, Clone, Default)]
553pub struct RetrievalMetadata {
554 pub google_search_dynamic_retrieval_score: Option<f64>,
555}
556
557#[skip_serializing_none]
558#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
559#[setters(strip_option, into)]
560pub struct SearchEntryPoint {
561 pub rendered_content: Option<String>,
562 pub sdk_blob: Option<Vec<u8>>,
563}
564
565#[skip_serializing_none]
566#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
567#[setters(strip_option, into)]
568pub struct GroundingMetadata {
569 pub grounding_chunks: Option<Vec<GroundingChunk>>,
570 pub grounding_supports: Option<Vec<GroundingSupport>>,
571 pub retrieval_metadata: Option<RetrievalMetadata>,
572 pub retrieval_queries: Option<Vec<String>>,
573 pub search_entry_point: Option<SearchEntryPoint>,
574 pub web_search_queries: Option<Vec<String>>,
575}
576
577#[skip_serializing_none]
578#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
579#[setters(strip_option, into)]
580pub struct LogprobsResultCandidate {
581 pub log_probability: Option<f64>,
582 pub token: Option<String>,
583 pub token_id: Option<i64>,
584}
585
586#[skip_serializing_none]
587#[derive(Debug, Serialize, Deserialize, Clone, Default)]
588pub struct LogprobsResultTopCandidates {
589 pub candidates: Option<Vec<LogprobsResultCandidate>>,
590}
591
592#[skip_serializing_none]
593#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
594#[setters(strip_option, into)]
595pub struct LogprobsResult {
596 pub chosen_candidates: Option<Vec<LogprobsResultCandidate>>,
597 pub top_candidates: Option<Vec<LogprobsResultTopCandidates>>,
598}
599
600#[skip_serializing_none]
601#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
602#[setters(strip_option, into)]
603pub struct SafetyRating {
604 pub blocked: Option<bool>,
605 pub category: Option<HarmCategory>,
606 pub probability: Option<HarmProbability>,
607 pub probability_score: Option<f64>,
608 pub severity: Option<HarmSeverity>,
609 pub severity_score: Option<f64>,
610}
611
612#[skip_serializing_none]
613#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
614#[setters(strip_option, into)]
615pub struct Candidate {
616 pub content: Option<Content>,
617 pub citation_metadata: Option<CitationMetadata>,
618 pub finish_message: Option<String>,
619 pub token_count: Option<i64>,
620 pub avg_logprobs: Option<f64>,
621 pub finish_reason: Option<FinishReason>,
622 pub grounding_metadata: Option<GroundingMetadata>,
623 pub index: Option<i64>,
624 pub logprobs_result: Option<LogprobsResult>,
625 pub safety_ratings: Option<Vec<SafetyRating>>,
626}
627
628#[skip_serializing_none]
629#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
630#[setters(strip_option, into)]
631pub struct GenerateContentResponsePromptFeedback {
632 pub block_reason: Option<BlockedReason>,
633 pub block_reason_message: Option<String>,
634 pub safety_ratings: Option<Vec<SafetyRating>>,
635}
636
637#[skip_serializing_none]
638#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
639#[setters(strip_option, into)]
640pub struct GenerateContentResponseUsageMetadata {
641 pub cached_content_token_count: Option<i64>,
642 pub candidates_token_count: Option<i64>,
643 pub prompt_token_count: Option<i64>,
644 pub total_token_count: Option<i64>,
645}
646
647#[skip_serializing_none]
648#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
649#[setters(strip_option, into)]
650pub struct GenerateContentResponse {
651 pub candidates: Option<Vec<Candidate>>,
652 pub model_version: Option<String>,
653 pub prompt_feedback: Option<GenerateContentResponsePromptFeedback>,
654 pub usage_metadata: Option<GenerateContentResponseUsageMetadata>,
655}
656
657#[skip_serializing_none]
658#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
659#[setters(strip_option, into)]
660pub struct GenerateContentConfig {
661 pub system_instruction: Option<Content>,
662 pub temperature: Option<f64>,
663 pub top_p: Option<f64>,
664 pub top_k: Option<f64>,
665 pub candidate_count: Option<i64>,
666 pub max_output_tokens: Option<i64>,
667 pub stop_sequences: Option<Vec<String>>,
668 pub response_logprobs: Option<bool>,
669 pub logprobs: Option<i64>,
670 pub presence_penalty: Option<f64>,
671 pub frequency_penalty: Option<f64>,
672 pub seed: Option<i64>,
673 pub response_mime_type: Option<String>,
674 pub response_schema: Option<Schema>,
675 pub routing_config: Option<GenerationConfigRoutingConfig>,
676 pub safety_settings: Option<Vec<SafetySetting>>,
677 pub tools: Option<Vec<Tool>>,
678 pub tool_config: Option<ToolConfig>,
679 pub cached_content: Option<String>,
680 pub response_modalities: Option<Vec<String>>,
681 pub media_resolution: Option<MediaResolution>,
682 pub speech_config: Option<SpeechConfig>,
683}
684
685#[skip_serializing_none]
687#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
688#[setters(strip_option, into)]
689pub struct GenerationConfig {
690 pub audio_timestamp: Option<bool>,
692 pub candidate_count: Option<i64>,
694 pub frequency_penalty: Option<f64>,
696 pub logprobs: Option<i64>,
698 pub max_output_tokens: Option<i64>,
700 pub presence_penalty: Option<f64>,
702 pub response_logprobs: Option<bool>,
704 pub response_mime_type: Option<String>,
706 pub response_schema: Option<Schema>,
708 pub routing_config: Option<GenerationConfigRoutingConfig>,
710 pub seed: Option<i64>,
712 pub stop_sequences: Option<Vec<String>>,
714 pub temperature: Option<f64>,
716 pub top_k: Option<f64>,
718 pub top_p: Option<f64>,
720}
721
722#[skip_serializing_none]
723#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
724#[setters(strip_option, into)]
725pub struct GenerateContentReq {
726 pub model: String,
727 pub contents: Vec<Content>,
728 #[serde(rename = "generationConfig")]
729 pub generation_config: Option<GenerationConfig>,
730 pub system_instruction: Option<Content>,
731}