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