1use super::LiveContent;
2use super::LiveInt64;
3use crate::Rest;
4use crate::gemini::FunctionCall;
5use crate::gemini::count_tokens::ModalityTokenCount;
6use crate::gemini::generation::ServiceTier;
7use serde::{Deserialize, Serialize};
8
9pub type LiveGroundingMetadata = crate::gemini::generate_content::GroundingMetadata;
12pub type LiveUrlContextMetadata = crate::gemini::generate_content::UrlContextMetadata;
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
15#[serde(rename_all = "camelCase")]
16#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
17#[derive(gproxy_protocol_macros::DeclaredFields)]
18#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
19pub struct BidiGenerateContentServerContent {
20 #[serde(alias = "model_turn")]
21 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub model_turn: Option<LiveContent>,
23 #[serde(alias = "generation_complete")]
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub generation_complete: Option<bool>,
26 #[serde(alias = "turn_complete")]
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub turn_complete: Option<bool>,
29 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub interrupted: Option<bool>,
31 #[serde(alias = "grounding_metadata")]
32 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub grounding_metadata: Option<LiveGroundingMetadata>,
34 #[serde(alias = "input_transcription")]
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub input_transcription: Option<BidiGenerateContentTranscription>,
37 #[serde(alias = "output_transcription")]
38 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub output_transcription: Option<BidiGenerateContentTranscription>,
40 #[serde(alias = "interim_input_transcription")]
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub interim_input_transcription: Option<BidiGenerateContentTranscription>,
43 #[serde(alias = "url_context_metadata")]
44 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub url_context_metadata: Option<LiveUrlContextMetadata>,
46 #[serde(alias = "waiting_for_input")]
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub waiting_for_input: Option<bool>,
49 #[serde(alias = "turn_complete_reason")]
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub turn_complete_reason: Option<TurnCompleteReason>,
52 #[serde(alias = "interaction_status")]
53 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub interaction_status: Option<InteractionStatus>,
55 #[serde(alias = "speech_state")]
56 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub speech_state: Option<SpeechState>,
58 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
59 pub rest: Rest,
60}
61
62#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
63#[serde(rename_all = "camelCase")]
64#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
65#[derive(gproxy_protocol_macros::DeclaredFields)]
66#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
67pub struct BidiGenerateContentToolCall {
68 #[serde(alias = "function_calls")]
69 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub function_calls: Option<Vec<FunctionCall>>,
71 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
72 pub rest: Rest,
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
76#[serde(rename_all = "camelCase")]
77#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
78#[derive(gproxy_protocol_macros::DeclaredFields)]
79#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
80pub struct BidiGenerateContentToolCallCancellation {
81 #[serde(default, skip_serializing_if = "Option::is_none")]
82 pub ids: Option<Vec<String>>,
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)]
91#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
92pub struct GoAway {
93 #[serde(alias = "time_left")]
94 #[serde(default, skip_serializing_if = "Option::is_none")]
95 pub time_left: Option<String>,
96 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
97 pub rest: Rest,
98}
99
100#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
101#[serde(rename_all = "camelCase")]
102#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
103#[derive(gproxy_protocol_macros::DeclaredFields)]
104#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
105pub struct SessionResumptionUpdate {
106 #[serde(alias = "new_handle")]
107 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub new_handle: Option<String>,
109 #[serde(default, skip_serializing_if = "Option::is_none")]
110 pub resumable: Option<bool>,
111 #[serde(alias = "last_consumed_client_message_index")]
112 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub last_consumed_client_message_index: Option<LiveInt64>,
114 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
115 pub rest: Rest,
116}
117
118#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
119#[serde(rename_all = "camelCase")]
120#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
121#[derive(gproxy_protocol_macros::DeclaredFields)]
122#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
123pub struct BidiGenerateContentTranscription {
124 #[serde(default, skip_serializing_if = "Option::is_none")]
125 pub text: Option<String>,
126 #[serde(default, skip_serializing_if = "Option::is_none")]
127 pub finished: Option<bool>,
128 #[serde(alias = "language_code")]
129 #[serde(default, skip_serializing_if = "Option::is_none")]
130 pub language_code: Option<String>,
131 #[serde(alias = "speaker_label")]
132 #[serde(default, skip_serializing_if = "Option::is_none")]
133 pub speaker_label: Option<String>,
134 #[serde(default, skip_serializing_if = "Option::is_none")]
135 pub words: Option<Vec<WordInfo>>,
136 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
137 pub rest: Rest,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
141#[serde(rename_all = "camelCase")]
142#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
143#[derive(gproxy_protocol_macros::DeclaredFields)]
144#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
145pub struct WordInfo {
146 #[serde(default, skip_serializing_if = "Option::is_none")]
147 pub word: Option<String>,
148 #[serde(alias = "start_offset")]
149 #[serde(default, skip_serializing_if = "Option::is_none")]
150 pub start_offset: Option<String>,
151 #[serde(alias = "end_offset")]
152 #[serde(default, skip_serializing_if = "Option::is_none")]
153 pub end_offset: Option<String>,
154 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
155 pub rest: Rest,
156}
157
158#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
159#[serde(rename_all = "camelCase")]
160#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
161#[derive(gproxy_protocol_macros::DeclaredFields)]
162#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
163pub struct LiveUsageMetadata {
164 #[serde(alias = "prompt_token_count")]
165 #[serde(default, skip_serializing_if = "Option::is_none")]
166 pub prompt_token_count: Option<i64>,
167 #[serde(alias = "cached_content_token_count")]
168 #[serde(default, skip_serializing_if = "Option::is_none")]
169 pub cached_content_token_count: Option<i64>,
170 #[serde(alias = "response_token_count")]
171 #[serde(default, skip_serializing_if = "Option::is_none")]
172 pub response_token_count: Option<i64>,
173 #[serde(alias = "tool_use_prompt_token_count")]
174 #[serde(default, skip_serializing_if = "Option::is_none")]
175 pub tool_use_prompt_token_count: Option<i64>,
176 #[serde(alias = "thoughts_token_count")]
177 #[serde(default, skip_serializing_if = "Option::is_none")]
178 pub thoughts_token_count: Option<i64>,
179 #[serde(alias = "total_token_count")]
180 #[serde(default, skip_serializing_if = "Option::is_none")]
181 pub total_token_count: Option<i64>,
182 #[serde(alias = "prompt_tokens_details")]
183 #[serde(default, skip_serializing_if = "Option::is_none")]
184 pub prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
185 #[serde(alias = "cache_tokens_details")]
186 #[serde(default, skip_serializing_if = "Option::is_none")]
187 pub cache_tokens_details: Option<Vec<ModalityTokenCount>>,
188 #[serde(alias = "response_tokens_details")]
189 #[serde(default, skip_serializing_if = "Option::is_none")]
190 pub response_tokens_details: Option<Vec<ModalityTokenCount>>,
191 #[serde(alias = "tool_use_prompt_tokens_details")]
192 #[serde(default, skip_serializing_if = "Option::is_none")]
193 pub tool_use_prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
194 #[serde(alias = "service_tier")]
195 #[serde(default, skip_serializing_if = "Option::is_none")]
196 pub service_tier: Option<ServiceTier>,
197 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
198 pub rest: Rest,
199}
200
201#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
202#[serde(rename_all = "camelCase")]
203#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
204#[derive(gproxy_protocol_macros::DeclaredFields)]
205#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
206pub struct VoiceActivityDetectionSignal {
207 #[serde(alias = "vad_signal_type")]
208 #[serde(default, skip_serializing_if = "Option::is_none")]
209 pub vad_signal_type: Option<VadSignalType>,
210 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
211 pub rest: Rest,
212}
213
214#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
215#[serde(rename_all = "camelCase")]
216#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
217#[derive(gproxy_protocol_macros::DeclaredFields)]
218#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
219pub struct VoiceActivity {
220 #[serde(rename = "type")]
221 #[serde(default, skip_serializing_if = "Option::is_none")]
222 pub type_: Option<VoiceActivityType>,
223 #[serde(alias = "audio_offset")]
224 #[serde(default, skip_serializing_if = "Option::is_none")]
225 pub audio_offset: Option<String>,
226 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
227 pub rest: Rest,
228}
229
230#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
231#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
232#[derive(gproxy_protocol_macros::DeclaredFields)]
233#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
234pub enum TurnCompleteReason {
235 #[serde(rename = "TURN_COMPLETE_REASON_UNSPECIFIED")]
236 TurnCompleteReasonUnspecified,
237 #[serde(rename = "MALFORMED_FUNCTION_CALL")]
238 MalformedFunctionCall,
239 #[serde(rename = "RESPONSE_REJECTED")]
240 ResponseRejected,
241 #[serde(rename = "NEED_MORE_INPUT")]
242 NeedMoreInput,
243 #[serde(rename = "PROHIBITED_INPUT_CONTENT")]
244 ProhibitedInputContent,
245 #[serde(rename = "IMAGE_PROHIBITED_INPUT_CONTENT")]
246 ImageProhibitedInputContent,
247 #[serde(rename = "INPUT_TEXT_CONTAIN_PROMINENT_PERSON_PROHIBITED")]
248 InputTextContainProminentPersonProhibited,
249 #[serde(rename = "INPUT_IMAGE_CELEBRITY")]
250 InputImageCelebrity,
251 #[serde(rename = "INPUT_IMAGE_PHOTO_REALISTIC_CHILD_PROHIBITED")]
252 InputImagePhotoRealisticChildProhibited,
253 #[serde(rename = "INPUT_TEXT_NCII_PROHIBITED")]
254 InputTextNciiProhibited,
255 #[serde(rename = "INPUT_OTHER")]
256 InputOther,
257 #[serde(rename = "INPUT_IP_PROHIBITED")]
258 InputIpProhibited,
259 #[serde(rename = "BLOCKLIST")]
260 Blocklist,
261 #[serde(rename = "UNSAFE_PROMPT_FOR_IMAGE_GENERATION")]
262 UnsafePromptForImageGeneration,
263 #[serde(rename = "GENERATED_IMAGE_SAFETY")]
264 GeneratedImageSafety,
265 #[serde(rename = "GENERATED_CONTENT_SAFETY")]
266 GeneratedContentSafety,
267 #[serde(rename = "GENERATED_AUDIO_SAFETY")]
268 GeneratedAudioSafety,
269 #[serde(rename = "GENERATED_VIDEO_SAFETY")]
270 GeneratedVideoSafety,
271 #[serde(rename = "GENERATED_CONTENT_PROHIBITED")]
272 GeneratedContentProhibited,
273 #[serde(rename = "GENERATED_CONTENT_BLOCKLIST")]
274 GeneratedContentBlocklist,
275 #[serde(rename = "GENERATED_IMAGE_PROHIBITED")]
276 GeneratedImageProhibited,
277 #[serde(rename = "GENERATED_IMAGE_CELEBRITY")]
278 GeneratedImageCelebrity,
279 #[serde(rename = "GENERATED_IMAGE_PROMINENT_PEOPLE_DETECTED_BY_REWRITER")]
280 GeneratedImageProminentPeopleDetectedByRewriter,
281 #[serde(rename = "GENERATED_IMAGE_IDENTIFIABLE_PEOPLE")]
282 GeneratedImageIdentifiablePeople,
283 #[serde(rename = "GENERATED_IMAGE_MINORS")]
284 GeneratedImageMinors,
285 #[serde(rename = "OUTPUT_IMAGE_IP_PROHIBITED")]
286 OutputImageIpProhibited,
287 #[serde(rename = "GENERATED_OTHER")]
288 GeneratedOther,
289 #[serde(rename = "MAX_REGENERATION_REACHED")]
290 MaxRegenerationReached,
291}
292
293#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
294#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
295#[derive(gproxy_protocol_macros::DeclaredFields)]
296#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
297pub enum InteractionStatus {
298 #[serde(rename = "INTERACTION_STATUS_UNSPECIFIED")]
299 InteractionStatusUnspecified,
300 #[serde(rename = "IN_PROGRESS")]
301 InProgress,
302 #[serde(rename = "REQUIRES_ACTION")]
303 RequiresAction,
304 #[serde(rename = "IDLE")]
305 Idle,
306}
307
308#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
309#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
310#[derive(gproxy_protocol_macros::DeclaredFields)]
311#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
312pub enum VadSignalType {
313 #[serde(rename = "VAD_SIGNAL_TYPE_UNSPECIFIED")]
314 VadSignalTypeUnspecified,
315 #[serde(rename = "VAD_SIGNAL_TYPE_SOS")]
316 VadSignalTypeSos,
317 #[serde(rename = "VAD_SIGNAL_TYPE_EOS")]
318 VadSignalTypeEos,
319}
320
321#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
322#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
323#[derive(gproxy_protocol_macros::DeclaredFields)]
324#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
325pub enum VoiceActivityType {
326 #[serde(rename = "TYPE_UNSPECIFIED")]
327 TypeUnspecified,
328 #[serde(rename = "ACTIVITY_START")]
329 ActivityStart,
330 #[serde(rename = "ACTIVITY_END")]
331 ActivityEnd,
332}
333
334#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
338#[serde(untagged)]
339#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
340#[derive(gproxy_protocol_macros::DeclaredFields)]
341#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
342pub enum SpeechState {
343 Name(String),
344 Number(i32),
345}