gemini_live/types/
server_message.rs1use std::time::Duration;
10
11use serde::Deserialize;
12
13use super::common::{Content, EmptyObject};
14
15#[derive(Debug, Clone, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct ServerMessage {
25 #[serde(default)]
26 pub setup_complete: Option<EmptyObject>,
27 #[serde(default)]
28 pub server_content: Option<ServerContent>,
29 #[serde(default)]
30 pub tool_call: Option<ToolCallMessage>,
31 #[serde(default)]
32 pub tool_call_cancellation: Option<ToolCallCancellation>,
33 #[serde(default)]
34 pub go_away: Option<GoAway>,
35 #[serde(default)]
36 pub session_resumption_update: Option<SessionResumptionUpdate>,
37 #[serde(default)]
38 pub usage_metadata: Option<UsageMetadata>,
39 #[serde(default)]
40 pub error: Option<ApiError>,
41}
42
43#[derive(Debug, Clone, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct ServerContent {
47 pub model_turn: Option<Content>,
48 #[serde(default)]
49 pub turn_complete: Option<bool>,
50 #[serde(default)]
53 pub generation_complete: Option<bool>,
54 #[serde(default)]
55 pub interrupted: Option<bool>,
56 pub input_transcription: Option<Transcription>,
57 pub output_transcription: Option<Transcription>,
58 pub grounding_metadata: Option<serde_json::Value>,
60 pub url_context_metadata: Option<serde_json::Value>,
61}
62
63#[derive(Debug, Clone, PartialEq, Deserialize)]
64pub struct Transcription {
65 pub text: String,
66}
67
68#[derive(Debug, Clone, Deserialize)]
71#[serde(rename_all = "camelCase")]
72pub struct ToolCallMessage {
73 pub function_calls: Vec<FunctionCallRequest>,
74}
75
76#[derive(Debug, Clone, Deserialize)]
78#[serde(rename_all = "camelCase")]
79pub struct FunctionCallRequest {
80 pub id: String,
82 pub name: String,
83 pub args: serde_json::Value,
85}
86
87#[derive(Debug, Clone, Deserialize)]
88pub struct ToolCallCancellation {
89 pub ids: Vec<String>,
90}
91
92#[derive(Debug, Clone, Deserialize)]
97#[serde(rename_all = "camelCase")]
98pub struct GoAway {
99 pub time_left: Option<String>,
101}
102
103#[derive(Debug, Clone, Deserialize)]
105#[serde(rename_all = "camelCase")]
106pub struct SessionResumptionUpdate {
107 pub new_handle: Option<String>,
108 #[serde(default)]
109 pub resumable: Option<bool>,
110}
111
112#[derive(Debug, Clone, PartialEq, Deserialize)]
116#[serde(rename_all = "camelCase")]
117pub struct UsageMetadata {
118 #[serde(default)]
119 pub prompt_token_count: u32,
120 #[serde(default)]
121 pub cached_content_token_count: u32,
122 #[serde(default)]
123 pub response_token_count: u32,
124 #[serde(default)]
125 pub tool_use_prompt_token_count: u32,
126 #[serde(default)]
127 pub thoughts_token_count: u32,
128 #[serde(default)]
129 pub total_token_count: u32,
130 #[serde(default)]
131 pub prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
132 #[serde(default)]
133 pub response_tokens_details: Option<Vec<ModalityTokenCount>>,
134}
135
136#[derive(Debug, Clone, PartialEq, Deserialize)]
137#[serde(rename_all = "camelCase")]
138pub struct ModalityTokenCount {
139 pub modality: String,
140 pub token_count: u32,
141}
142
143#[derive(Debug, Clone, PartialEq, Deserialize)]
145pub struct ApiError {
146 pub message: String,
147}
148
149#[derive(Debug, Clone)]
158pub enum ServerEvent {
159 SetupComplete,
161
162 ModelText(String),
164 ModelAudio(Vec<u8>),
166
167 GenerationComplete,
169 TurnComplete,
171 Interrupted,
173
174 InputTranscription(String),
176 OutputTranscription(String),
178
179 ToolCall(Vec<FunctionCallRequest>),
181 ToolCallCancellation(Vec<String>),
183
184 SessionResumption {
186 new_handle: Option<String>,
187 resumable: bool,
188 },
189
190 GoAway { time_left: Option<Duration> },
192
193 Usage(UsageMetadata),
195
196 Closed { reason: String },
198
199 Error(ApiError),
201}