google_genai/
datatypes.rs

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)]
258/// Schema that defines the format of input and output data.
259/// Represents a select subset of an OpenAPI 3.0 schema object.
260pub struct Schema {
261    /// Optional. Minimum number of elements for Type.ARRAY.
262    pub min_items: Option<String>,
263    /// Optional. Example of the object.
264    pub example: Option<serde_json::Value>,
265    /// Optional. The order of the properties.
266    pub property_ordering: Option<Vec<String>>,
267    /// Optional. Pattern of the Type.STRING to restrict a string to a regular expression.
268    pub pattern: Option<String>,
269    /// Optional. Minimum value of the Type.INTEGER and Type.NUMBER.
270    pub minimum: Option<f64>,
271    /// Optional. Default value of the data.
272    pub default: Option<serde_json::Value>,
273    /// Optional. The value should be validated against any of the subschemas.
274    pub any_of: Option<Vec<Schema>>,
275    /// Optional. Maximum length of the Type.STRING.
276    pub max_length: Option<String>,
277    /// Optional. The title of the Schema.
278    pub title: Option<String>,
279    /// Optional. Minimum length of the Type.STRING.
280    pub min_length: Option<String>,
281    /// Optional. Minimum number of properties for Type.OBJECT.
282    pub min_properties: Option<String>,
283    /// Optional. Maximum number of elements for Type.ARRAY.
284    pub max_items: Option<String>,
285    /// Optional. Maximum value of the Type.INTEGER and Type.NUMBER.
286    pub maximum: Option<f64>,
287    /// Optional. Indicates if the value may be null.
288    pub nullable: Option<bool>,
289    /// Optional. Maximum number of properties for Type.OBJECT.
290    pub max_properties: Option<String>,
291    /// Optional. The type of the data.
292    #[setters(skip)]
293    pub r#type: Option<Type>,
294    /// Optional. The description of the data.
295    pub description: Option<String>,
296    /// Optional. Possible values of the element of primitive type with enum format.
297    #[setters(skip)]
298    pub r#enum: Option<Vec<String>>,
299    /// Optional. The format of the data.
300    pub format: Option<String>,
301    /// Optional. Schema of the elements of Type.ARRAY.
302    pub items: Option<Box<Schema>>,
303    /// Optional. Properties of Type.OBJECT.
304    pub properties: Option<std::collections::HashMap<String, Schema>>,
305    /// Optional. Required properties of Type.OBJECT.
306    pub required: Option<Vec<String>>,
307}
308
309#[skip_serializing_none]
310#[derive(Debug, Serialize, Deserialize, Clone, Setters)]
311#[setters(strip_option, into)]
312/// Safety settings.
313pub struct SafetySetting {
314    /// Determines if the harm block method uses probability or severity scores.
315    pub method: Option<HarmBlockMethod>,
316    /// Required. Harm category.
317    pub category: HarmCategory,
318    /// Required. The harm block threshold.
319    pub threshold: HarmBlockThreshold,
320}
321
322#[skip_serializing_none]
323#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
324#[setters(strip_option, into)]
325/// Defines a function that the model can generate JSON inputs for.
326pub struct FunctionDeclaration {
327    /// Describes the output from the function in the OpenAPI JSON Schema Object format.
328    pub response: Option<Schema>,
329    /// Optional. Description and purpose of the function.
330    pub description: Option<String>,
331    /// Required. The name of the function to call.
332    pub name: String,
333    /// Optional. Describes the parameters to this function in JSON Schema Object format.
334    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)]
343/// Describes the options to customize dynamic retrieval.
344pub struct DynamicRetrievalConfig {
345    /// The mode of the predictor to be used in dynamic retrieval.
346    pub mode: Option<DynamicRetrievalConfigMode>,
347    /// Optional. The threshold to be used in dynamic retrieval.
348    pub dynamic_threshold: Option<f64>,
349}
350
351#[skip_serializing_none]
352#[derive(Debug, Serialize, Deserialize, Clone, Default)]
353/// Tool to retrieve public web data for grounding, powered by Google.
354pub struct GoogleSearchRetrieval {
355    /// Specifies the dynamic retrieval configuration for the given source.
356    pub dynamic_retrieval_config: Option<DynamicRetrievalConfig>,
357}
358
359#[derive(Debug, Serialize, Deserialize, Clone)]
360/// Retrieve from Vertex AI Search datastore for grounding.
361pub struct VertexAISearch {
362    /// Required. Fully-qualified Vertex AI Search data store resource ID.
363    pub datastore: String,
364}
365
366#[skip_serializing_none]
367#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
368#[setters(strip_option, into)]
369/// The definition of the RAG resource.
370pub struct VertexRAGStoreRAGResource {
371    /// Optional. RAGCorpora resource name.
372    pub rag_corpus: Option<String>,
373    /// Optional. rag_file_id. The files should be in the same rag_corpus.
374    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)]
401/// Tool details of a tool that the model may use to generate a response.
402pub struct Tool {
403    /// List of function declarations that the tool supports.
404    pub function_declarations: Option<Vec<FunctionDeclaration>>,
405    /// Optional. Retrieval tool type.
406    pub retrieval: Option<Retrieval>,
407    /// Optional. Google Search tool type.
408    pub google_search: Option<GoogleSearch>,
409    /// Optional. GoogleSearchRetrieval tool type.
410    pub google_search_retrieval: Option<GoogleSearchRetrieval>,
411    /// Optional. CodeExecution tool type.
412    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/// The configuration for the prebuilt speaker to use.
431#[derive(Debug, Serialize, Deserialize, Clone, Default)]
432pub struct PrebuiltVoiceConfig {
433    /// The name of the prebuilt voice to use.
434    pub voice_name: Option<String>,
435}
436
437#[skip_serializing_none]
438/// The configuration for the voice to use.
439#[derive(Debug, Serialize, Deserialize, Clone, Default)]
440pub struct VoiceConfig {
441    /// The configuration for the speaker to use.
442    pub prebuilt_voice_config: Option<PrebuiltVoiceConfig>,
443}
444
445#[skip_serializing_none]
446/// The speech generation configuration.
447#[derive(Debug, Serialize, Deserialize, Clone, Default)]
448pub struct SpeechConfig {
449    /// The configuration for the speaker to use.
450    pub voice_config: Option<VoiceConfig>,
451}
452
453#[skip_serializing_none]
454/// When automated routing is specified, the routing will be determined by the pretrained routing model.
455#[derive(Debug, Serialize, Deserialize, Clone, Default)]
456pub struct GenerationConfigRoutingConfigAutoRoutingMode {
457    /// The model routing preference.
458    pub model_routing_preference: Option<String>,
459}
460
461#[skip_serializing_none]
462/// When manual routing is set, the specified model will be used directly.
463#[derive(Debug, Serialize, Deserialize, Clone)]
464pub struct GenerationConfigRoutingConfigManualRoutingMode {
465    /// The model name to use. Only the public LLM models are accepted.
466    pub model_name: Option<String>,
467}
468
469#[skip_serializing_none]
470/// The configuration for routing the request to a specific model.
471#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
472#[setters(strip_option, into)]
473pub struct GenerationConfigRoutingConfig {
474    /// Automated routing.
475    pub auto_mode: Option<GenerationConfigRoutingConfigAutoRoutingMode>,
476    /// Manual routing.
477    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/// Configuration for generation settings.
686#[skip_serializing_none]
687#[derive(Debug, Serialize, Deserialize, Clone, Setters, Default)]
688#[setters(strip_option, into)]
689pub struct GenerationConfig {
690    /// Optional. If enabled, audio timestamp will be included.
691    pub audio_timestamp: Option<bool>,
692    /// Optional. Number of candidates to generate.
693    pub candidate_count: Option<i64>,
694    /// Optional. Frequency penalties.
695    pub frequency_penalty: Option<f64>,
696    /// Optional. Logit probabilities.
697    pub logprobs: Option<i64>,
698    /// Optional. The maximum number of output tokens to generate per message.
699    pub max_output_tokens: Option<i64>,
700    /// Optional. Positive penalties.
701    pub presence_penalty: Option<f64>,
702    /// Optional. If true, export the logprobs results in response.
703    pub response_logprobs: Option<bool>,
704    /// Optional. Output response MIME type of the generated candidate text.
705    pub response_mime_type: Option<String>,
706    /// Optional. Schema object allows the definition of input and output data types.
707    pub response_schema: Option<Schema>,
708    /// Optional. Routing configuration.
709    pub routing_config: Option<GenerationConfigRoutingConfig>,
710    /// Optional. Seed.
711    pub seed: Option<i64>,
712    /// Optional. Stop sequences.
713    pub stop_sequences: Option<Vec<String>>,
714    /// Optional. Controls the randomness of predictions.
715    pub temperature: Option<f64>,
716    /// Optional. If specified, top-k sampling will be used.
717    pub top_k: Option<f64>,
718    /// Optional. If specified, nucleus sampling will be used.
719    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}