gproxy_protocol/protocol/gemini/generate_content/
config.rs1use 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}