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)]
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(alias = "interim_transcript_timestamp_enabled")]
84    #[serde(default, skip_serializing_if = "Option::is_none")]
85    pub interim_transcript_timestamp_enabled: Option<bool>,
86    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
87    pub rest: Rest,
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
91#[serde(rename_all = "camelCase")]
92#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
93#[derive(gproxy_protocol_macros::DeclaredFields)]
94pub struct AutomaticActivityDetection {
95    #[serde(default, skip_serializing_if = "Option::is_none")]
96    pub disabled: Option<bool>,
97    #[serde(alias = "start_of_speech_sensitivity")]
98    #[serde(default, skip_serializing_if = "Option::is_none")]
99    pub start_of_speech_sensitivity: Option<StartSensitivity>,
100    #[serde(alias = "prefix_padding_ms")]
101    #[serde(default, skip_serializing_if = "Option::is_none")]
102    pub prefix_padding_ms: Option<i64>,
103    #[serde(alias = "end_of_speech_sensitivity")]
104    #[serde(default, skip_serializing_if = "Option::is_none")]
105    pub end_of_speech_sensitivity: Option<EndSensitivity>,
106    #[serde(alias = "silence_duration_ms")]
107    #[serde(default, skip_serializing_if = "Option::is_none")]
108    pub silence_duration_ms: Option<i64>,
109    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
110    pub rest: Rest,
111}
112
113#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
114#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
115#[derive(gproxy_protocol_macros::DeclaredFields)]
116pub enum ActivityHandling {
117    #[serde(rename = "ACTIVITY_HANDLING_UNSPECIFIED")]
118    ActivityHandlingUnspecified,
119    #[serde(rename = "START_OF_ACTIVITY_INTERRUPTS")]
120    StartOfActivityInterrupts,
121    #[serde(rename = "NO_INTERRUPTION")]
122    NoInterruption,
123}
124
125#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
126#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
127#[derive(gproxy_protocol_macros::DeclaredFields)]
128pub enum TurnCoverage {
129    #[serde(rename = "TURN_COVERAGE_UNSPECIFIED")]
130    TurnCoverageUnspecified,
131    #[serde(rename = "TURN_INCLUDES_ONLY_ACTIVITY")]
132    TurnIncludesOnlyActivity,
133    #[serde(rename = "TURN_INCLUDES_ALL_INPUT")]
134    TurnIncludesAllInput,
135    #[serde(rename = "TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO")]
136    TurnIncludesAudioActivityAndAllVideo,
137}
138
139#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
140#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
141#[derive(gproxy_protocol_macros::DeclaredFields)]
142pub enum StartSensitivity {
143    #[serde(rename = "START_SENSITIVITY_UNSPECIFIED")]
144    StartSensitivityUnspecified,
145    #[serde(rename = "START_SENSITIVITY_HIGH")]
146    StartSensitivityHigh,
147    #[serde(rename = "START_SENSITIVITY_LOW")]
148    StartSensitivityLow,
149}
150
151#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
152#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
153#[derive(gproxy_protocol_macros::DeclaredFields)]
154pub enum EndSensitivity {
155    #[serde(rename = "END_SENSITIVITY_UNSPECIFIED")]
156    EndSensitivityUnspecified,
157    #[serde(rename = "END_SENSITIVITY_HIGH")]
158    EndSensitivityHigh,
159    #[serde(rename = "END_SENSITIVITY_LOW")]
160    EndSensitivityLow,
161}