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