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