1use super::LiveContent;
2use super::{LiveInt64, generation::LiveGenerationConfig, realtime::RealtimeInputConfig};
3use crate::Rest;
4use crate::gemini::Tool;
5pub use crate::gemini::audio::{
6 AudioTranscriptionConfig, AudioTranscriptionMode, LanguageAuto, LanguageHints,
7};
8use crate::gemini::content::SafetySetting;
9use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
12#[serde(rename_all = "camelCase")]
13#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
14#[derive(gproxy_protocol_macros::DeclaredFields)]
15#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
16pub struct BidiGenerateContentSetup {
17 pub model: String,
18 #[serde(alias = "generation_config")]
19 #[serde(default, skip_serializing_if = "Option::is_none")]
20 pub generation_config: Option<LiveGenerationConfig>,
21 #[serde(alias = "system_instruction")]
22 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub system_instruction: Option<LiveContent>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub tools: Option<Vec<Tool>>,
26 #[serde(alias = "realtime_input_config")]
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub realtime_input_config: Option<RealtimeInputConfig>,
29 #[serde(alias = "session_resumption")]
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub session_resumption: Option<SessionResumptionConfig>,
32 #[serde(alias = "context_window_compression")]
33 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub context_window_compression: Option<ContextWindowCompressionConfig>,
35 #[serde(alias = "input_audio_transcription")]
36 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub input_audio_transcription: Option<AudioTranscriptionConfig>,
38 #[serde(alias = "output_audio_transcription")]
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub output_audio_transcription: Option<AudioTranscriptionConfig>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub proactivity: Option<ProactivityConfig>,
43 #[serde(alias = "history_config")]
44 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub history_config: Option<HistoryConfig>,
46 #[serde(alias = "avatar_config")]
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub avatar_config: Option<AvatarConfig>,
49 #[serde(alias = "safety_settings")]
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub safety_settings: Option<Vec<SafetySetting>>,
52 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
53 pub rest: Rest,
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
57#[serde(rename_all = "camelCase")]
58#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
59#[derive(gproxy_protocol_macros::DeclaredFields)]
60#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
61pub struct SessionResumptionConfig {
62 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub handle: Option<String>,
64 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
65 pub rest: Rest,
66}
67
68#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
69#[serde(rename_all = "camelCase")]
70#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
71#[derive(gproxy_protocol_macros::DeclaredFields)]
72#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
73pub struct ContextWindowCompressionConfig {
74 #[serde(alias = "sliding_window")]
75 #[serde(default, skip_serializing_if = "Option::is_none")]
76 pub sliding_window: Option<SlidingWindow>,
77 #[serde(alias = "trigger_tokens")]
78 #[serde(default, skip_serializing_if = "Option::is_none")]
79 pub trigger_tokens: Option<LiveInt64>,
80 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
81 pub rest: Rest,
82}
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
85#[serde(rename_all = "camelCase")]
86#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
87#[derive(gproxy_protocol_macros::DeclaredFields)]
88#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
89pub struct SlidingWindow {
90 #[serde(alias = "target_tokens")]
91 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub target_tokens: Option<LiveInt64>,
93 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
94 pub rest: Rest,
95}
96
97#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
98#[serde(rename_all = "camelCase")]
99#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
100#[derive(gproxy_protocol_macros::DeclaredFields)]
101#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
102pub struct ProactivityConfig {
103 #[serde(alias = "proactive_audio")]
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub proactive_audio: Option<bool>,
106 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
107 pub rest: Rest,
108}
109
110#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
111#[serde(rename_all = "camelCase")]
112#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
113#[derive(gproxy_protocol_macros::DeclaredFields)]
114#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
115pub struct HistoryConfig {
116 #[serde(alias = "initial_history_in_client_content")]
117 #[serde(default, skip_serializing_if = "Option::is_none")]
118 pub initial_history_in_client_content: Option<bool>,
119 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
120 pub rest: Rest,
121}
122
123#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
124#[serde(rename_all = "camelCase")]
125#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
126#[derive(gproxy_protocol_macros::DeclaredFields)]
127#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
128pub struct AvatarConfig {
129 #[serde(alias = "avatar_name")]
130 #[serde(default, skip_serializing_if = "Option::is_none")]
131 pub avatar_name: Option<String>,
132 #[serde(alias = "customized_avatar")]
133 #[serde(default, skip_serializing_if = "Option::is_none")]
134 pub customized_avatar: Option<CustomizedAvatar>,
135 #[serde(alias = "audio_bitrate_bps")]
136 #[serde(default, skip_serializing_if = "Option::is_none")]
137 pub audio_bitrate_bps: Option<i64>,
138 #[serde(alias = "video_bitrate_bps")]
139 #[serde(default, skip_serializing_if = "Option::is_none")]
140 pub video_bitrate_bps: Option<i64>,
141 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
142 pub rest: Rest,
143}
144
145#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
146#[serde(rename_all = "camelCase")]
147#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
148#[derive(gproxy_protocol_macros::DeclaredFields)]
149#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
150pub struct CustomizedAvatar {
151 #[serde(alias = "image_mime_type")]
152 #[serde(default, skip_serializing_if = "Option::is_none")]
153 pub image_mime_type: Option<String>,
154 #[serde(alias = "image_data")]
155 #[serde(default, skip_serializing_if = "Option::is_none")]
156 pub image_data: Option<String>,
157 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
158 pub rest: Rest,
159}
160
161#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
162#[serde(rename_all = "camelCase")]
163#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
164#[derive(gproxy_protocol_macros::DeclaredFields)]
165#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
166pub struct BidiGenerateContentSetupComplete {
167 #[serde(alias = "session_id")]
168 #[serde(default, skip_serializing_if = "Option::is_none")]
169 pub session_id: Option<String>,
170 #[serde(alias = "voice_consent_signature")]
171 #[serde(default, skip_serializing_if = "Option::is_none")]
172 pub voice_consent_signature: Option<VoiceConsentSignature>,
173 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
174 pub rest: Rest,
175}
176
177#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
178#[serde(rename_all = "camelCase")]
179#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
180#[derive(gproxy_protocol_macros::DeclaredFields)]
181#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
182pub struct VoiceConsentSignature {
183 #[serde(default, skip_serializing_if = "Option::is_none")]
184 pub signature: Option<String>,
185 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
186 pub rest: Rest,
187}