Skip to main content

gproxy_protocol/protocol/gemini/generate_content/
config.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use super::super::common::{
7    AudioResponseDelivery, AudioResponseFormatMimeType, ExtraFields, GenerationMediaResolution,
8    ImageAspectRatio, ImageResponseAspectRatio, ImageResponseDelivery, ImageResponseFormatMimeType,
9    ImageResponseSize, ImageSize, ResponseMimeType, ResponseModality, Schema, SpeechConfig,
10    TextResponseFormatMimeType, ThinkingLevel,
11};
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
14#[serde(rename_all = "camelCase")]
15pub struct GenerationConfig {
16    #[serde(default, skip_serializing_if = "Vec::is_empty")]
17    pub stop_sequences: 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(
23        rename = "_responseJsonSchema",
24        skip_serializing_if = "Option::is_none"
25    )]
26    pub private_response_json_schema: Option<Value>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub response_json_schema: Option<Value>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub response_format: Option<ResponseFormatConfig>,
31    #[serde(default, skip_serializing_if = "Vec::is_empty")]
32    pub response_modalities: Vec<ResponseModality>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub candidate_count: Option<i32>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub max_output_tokens: Option<i32>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub temperature: Option<f64>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub top_p: Option<f64>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub top_k: Option<i32>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub seed: Option<i64>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub presence_penalty: Option<f64>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub frequency_penalty: Option<f64>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub response_logprobs: Option<bool>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub logprobs: Option<i32>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub enable_enhanced_civic_answers: Option<bool>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub speech_config: Option<SpeechConfig>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub thinking_config: Option<ThinkingConfig>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub image_config: Option<ImageConfig>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub media_resolution: Option<GenerationMediaResolution>,
63    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
64    pub extra: ExtraFields,
65}
66
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
68#[serde(rename_all = "camelCase")]
69pub struct ResponseFormatConfig {
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub text: Option<TextResponseFormat>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub audio: Option<AudioResponseFormat>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub image: Option<ImageResponseFormat>,
76    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
77    pub extra: ExtraFields,
78}
79
80#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
81#[serde(rename_all = "camelCase")]
82pub struct TextResponseFormat {
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub mime_type: Option<TextResponseFormatMimeType>,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub schema: Option<Value>,
87    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
88    pub extra: ExtraFields,
89}
90
91#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
92#[serde(rename_all = "camelCase")]
93pub struct AudioResponseFormat {
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub mime_type: Option<AudioResponseFormatMimeType>,
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub delivery: Option<AudioResponseDelivery>,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub sample_rate: Option<i32>,
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub bit_rate: Option<i32>,
102    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
103    pub extra: ExtraFields,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
107#[serde(rename_all = "camelCase")]
108pub struct ImageResponseFormat {
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub mime_type: Option<ImageResponseFormatMimeType>,
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub delivery: Option<ImageResponseDelivery>,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub aspect_ratio: Option<ImageResponseAspectRatio>,
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub image_size: Option<ImageResponseSize>,
117    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
118    pub extra: ExtraFields,
119}
120
121#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
122#[serde(rename_all = "camelCase")]
123pub struct ThinkingConfig {
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub include_thoughts: Option<bool>,
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub thinking_budget: Option<i32>,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub thinking_level: Option<ThinkingLevel>,
130    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
131    pub extra: ExtraFields,
132}
133
134#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
135#[serde(rename_all = "camelCase")]
136pub struct ImageConfig {
137    #[serde(skip_serializing_if = "Option::is_none")]
138    pub aspect_ratio: Option<ImageAspectRatio>,
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub image_size: Option<ImageSize>,
141    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
142    pub extra: ExtraFields,
143}