Skip to main content

gproxy_protocol/gemini/generate_content/
config.rs

1use 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    /// `upstream_docs/gemini/docs/Generating content.md`,
23    /// `GenerationConfig._responseJsonSchema`: JSON Schema as `google.protobuf.Value`.
24    #[serde(
25        rename = "_responseJsonSchema",
26        skip_serializing_if = "Option::is_none"
27    )]
28    pub private_response_json_schema: Option<Value>,
29    /// `upstream_docs/gemini/docs/Generating content.md`,
30    /// `GenerationConfig.responseJsonSchema`: an internal schema slot as `google.protobuf.Value`.
31    #[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    /// `upstream_docs/gemini/docs/Generating content.md`, `TextResponseFormat.schema`:
94    /// output JSON Schema encoded as `google.protobuf.Value`.
95    #[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}