Skip to main content

gproxy_protocol/wire/gemini/live/
realtime.rs

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