gproxy_protocol/gemini/generate_content/
config.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use super::super::common::{
5 AudioResponseDelivery, AudioResponseFormatMimeType, GenerationMediaResolution,
6 ImageAspectRatio, ImageResponseAspectRatio, ImageResponseDelivery, ImageResponseFormatMimeType,
7 ImageResponseSize, ImageSize, ResponseMimeType, ResponseModality, Schema, SpeechConfig,
8 TextResponseFormatMimeType, ThinkingLevel,
9};
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
12#[serde(rename_all = "camelCase")]
13#[derive(gproxy_protocol_macros::WireBuilder)]
14#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
15pub struct GenerationConfig {
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub stop_sequences: Option<Vec<String>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub response_mime_type: Option<ResponseMimeType>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub response_schema: Option<Schema>,
22 #[serde(
25 rename = "_responseJsonSchema",
26 skip_serializing_if = "Option::is_none"
27 )]
28 pub private_response_json_schema: Option<Value>,
29 #[serde(skip_serializing_if = "Option::is_none")]
32 pub response_json_schema: Option<Value>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub response_format: Option<ResponseFormatConfig>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub response_modalities: Option<Vec<ResponseModality>>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub candidate_count: Option<i32>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub max_output_tokens: Option<i32>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub temperature: Option<f64>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub top_p: Option<f64>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub top_k: Option<i32>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub seed: Option<i64>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub presence_penalty: Option<f64>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub frequency_penalty: Option<f64>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub response_logprobs: Option<bool>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub logprobs: Option<i32>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub enable_enhanced_civic_answers: Option<bool>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub speech_config: Option<SpeechConfig>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub thinking_config: Option<ThinkingConfig>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub image_config: Option<ImageConfig>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub media_resolution: Option<GenerationMediaResolution>,
67 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
68 pub rest: serde_json::Map<String, serde_json::Value>,
69}
70
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
72#[serde(rename_all = "camelCase")]
73#[derive(gproxy_protocol_macros::WireBuilder)]
74#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
75pub struct ResponseFormatConfig {
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub text: Option<TextResponseFormat>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub audio: Option<AudioResponseFormat>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub image: Option<ImageResponseFormat>,
82 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
83 pub rest: serde_json::Map<String, serde_json::Value>,
84}
85
86#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
87#[serde(rename_all = "camelCase")]
88#[derive(gproxy_protocol_macros::WireBuilder)]
89#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
90pub struct TextResponseFormat {
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub mime_type: Option<TextResponseFormatMimeType>,
93 #[serde(skip_serializing_if = "Option::is_none")]
96 pub schema: Option<Value>,
97 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
98 pub rest: serde_json::Map<String, serde_json::Value>,
99}
100
101#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
102#[serde(rename_all = "camelCase")]
103#[derive(gproxy_protocol_macros::WireBuilder)]
104#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
105pub struct AudioResponseFormat {
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub mime_type: Option<AudioResponseFormatMimeType>,
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub delivery: Option<AudioResponseDelivery>,
110 #[serde(skip_serializing_if = "Option::is_none")]
111 pub sample_rate: Option<i32>,
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub bit_rate: Option<i32>,
114 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
115 pub rest: serde_json::Map<String, serde_json::Value>,
116}
117
118#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
119#[serde(rename_all = "camelCase")]
120#[derive(gproxy_protocol_macros::WireBuilder)]
121#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
122pub struct ImageResponseFormat {
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub mime_type: Option<ImageResponseFormatMimeType>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub delivery: Option<ImageResponseDelivery>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub aspect_ratio: Option<ImageResponseAspectRatio>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub image_size: Option<ImageResponseSize>,
131 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
132 pub rest: serde_json::Map<String, serde_json::Value>,
133}
134
135#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
136#[serde(rename_all = "camelCase")]
137#[derive(gproxy_protocol_macros::WireBuilder)]
138#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
139pub struct ThinkingConfig {
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub include_thoughts: Option<bool>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub thinking_budget: Option<i32>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub thinking_level: Option<ThinkingLevel>,
146 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
147 pub rest: serde_json::Map<String, serde_json::Value>,
148}
149
150#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
151#[serde(rename_all = "camelCase")]
152#[derive(gproxy_protocol_macros::WireBuilder)]
153#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
154pub struct ImageConfig {
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub aspect_ratio: Option<ImageAspectRatio>,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub image_size: Option<ImageSize>,
159 #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
160 pub rest: serde_json::Map<String, serde_json::Value>,
161}