gproxy_protocol/wire/gemini/live/
realtime.rs1use crate::Rest;
2use crate::gemini::generation::GenerationMediaResolution;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
6#[serde(rename_all = "camelCase")]
7#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
8#[derive(gproxy_protocol_macros::DeclaredFields)]
9pub struct BidiGenerateContentRealtimeInput {
10 #[serde(alias = "media_chunks")]
11 #[serde(default, skip_serializing_if = "Option::is_none")]
12 pub media_chunks: Option<Vec<LiveBlob>>,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub audio: Option<LiveBlob>,
15 #[serde(alias = "audio_stream_end")]
16 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub audio_stream_end: Option<bool>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub video: Option<LiveBlob>,
20 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub text: Option<String>,
22 #[serde(alias = "activity_start")]
23 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub activity_start: Option<LiveActivityStart>,
25 #[serde(alias = "activity_end")]
26 #[serde(default, skip_serializing_if = "Option::is_none")]
27 pub activity_end: Option<LiveActivityEnd>,
28 #[serde(alias = "media_resolution")]
29 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub media_resolution: Option<GenerationMediaResolution>,
31 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
32 pub rest: Rest,
33}
34
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
36#[serde(rename_all = "camelCase")]
37#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
38#[derive(gproxy_protocol_macros::DeclaredFields)]
39pub struct LiveBlob {
40 #[serde(alias = "display_name", skip_serializing_if = "Option::is_none")]
41 pub display_name: Option<String>,
42 #[serde(alias = "mime_type")]
43 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub mime_type: Option<String>,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub data: Option<String>,
47 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
48 pub rest: Rest,
49}
50
51#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
52#[serde(rename_all = "camelCase")]
53#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
54#[derive(gproxy_protocol_macros::DeclaredFields)]
55pub struct LiveActivityStart {
56 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
57 pub rest: Rest,
58}
59
60#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
61#[serde(rename_all = "camelCase")]
62#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
63#[derive(gproxy_protocol_macros::DeclaredFields)]
64pub struct LiveActivityEnd {
65 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
66 pub rest: Rest,
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
70#[serde(rename_all = "camelCase")]
71#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
72#[derive(gproxy_protocol_macros::DeclaredFields)]
73pub struct RealtimeInputConfig {
74 #[serde(alias = "automatic_activity_detection")]
75 #[serde(default, skip_serializing_if = "Option::is_none")]
76 pub automatic_activity_detection: Option<AutomaticActivityDetection>,
77 #[serde(alias = "activity_handling")]
78 #[serde(default, skip_serializing_if = "Option::is_none")]
79 pub activity_handling: Option<ActivityHandling>,
80 #[serde(alias = "turn_coverage")]
81 #[serde(default, skip_serializing_if = "Option::is_none")]
82 pub turn_coverage: Option<TurnCoverage>,
83 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
84 pub rest: Rest,
85}
86
87#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
88#[serde(rename_all = "camelCase")]
89#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
90#[derive(gproxy_protocol_macros::DeclaredFields)]
91pub struct AutomaticActivityDetection {
92 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub disabled: Option<bool>,
94 #[serde(alias = "start_of_speech_sensitivity")]
95 #[serde(default, skip_serializing_if = "Option::is_none")]
96 pub start_of_speech_sensitivity: Option<StartSensitivity>,
97 #[serde(alias = "prefix_padding_ms")]
98 #[serde(default, skip_serializing_if = "Option::is_none")]
99 pub prefix_padding_ms: Option<i64>,
100 #[serde(alias = "end_of_speech_sensitivity")]
101 #[serde(default, skip_serializing_if = "Option::is_none")]
102 pub end_of_speech_sensitivity: Option<EndSensitivity>,
103 #[serde(alias = "silence_duration_ms")]
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub silence_duration_ms: Option<i64>,
106 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
107 pub rest: Rest,
108}
109
110#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
111#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
112#[derive(gproxy_protocol_macros::DeclaredFields)]
113pub enum ActivityHandling {
114 #[serde(rename = "ACTIVITY_HANDLING_UNSPECIFIED")]
115 ActivityHandlingUnspecified,
116 #[serde(rename = "START_OF_ACTIVITY_INTERRUPTS")]
117 StartOfActivityInterrupts,
118 #[serde(rename = "NO_INTERRUPTION")]
119 NoInterruption,
120}
121
122#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
123#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
124#[derive(gproxy_protocol_macros::DeclaredFields)]
125pub enum TurnCoverage {
126 #[serde(rename = "TURN_COVERAGE_UNSPECIFIED")]
127 TurnCoverageUnspecified,
128 #[serde(rename = "TURN_INCLUDES_ONLY_ACTIVITY")]
129 TurnIncludesOnlyActivity,
130 #[serde(rename = "TURN_INCLUDES_ALL_INPUT")]
131 TurnIncludesAllInput,
132 #[serde(rename = "TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO")]
133 TurnIncludesAudioActivityAndAllVideo,
134}
135
136#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
137#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
138#[derive(gproxy_protocol_macros::DeclaredFields)]
139pub enum StartSensitivity {
140 #[serde(rename = "START_SENSITIVITY_UNSPECIFIED")]
141 StartSensitivityUnspecified,
142 #[serde(rename = "START_SENSITIVITY_HIGH")]
143 StartSensitivityHigh,
144 #[serde(rename = "START_SENSITIVITY_LOW")]
145 StartSensitivityLow,
146}
147
148#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
149#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
150#[derive(gproxy_protocol_macros::DeclaredFields)]
151pub enum EndSensitivity {
152 #[serde(rename = "END_SENSITIVITY_UNSPECIFIED")]
153 EndSensitivityUnspecified,
154 #[serde(rename = "END_SENSITIVITY_HIGH")]
155 EndSensitivityHigh,
156 #[serde(rename = "END_SENSITIVITY_LOW")]
157 EndSensitivityLow,
158}