Skip to main content

gproxy_protocol/wire/gemini/live/
setup.rs

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)]
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}