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)]
69pub struct Transcription {
70 #[serde(default)]
71 pub text: Option<String>,
72 #[serde(default)]
73 pub finished: Option<bool>,
74}
75
76#[derive(Debug, Clone, Deserialize)]
79#[serde(rename_all = "camelCase")]
80pub struct ToolCallMessage {
81 pub function_calls: Vec<FunctionCallRequest>,
82}
83
84#[derive(Debug, Clone, Deserialize)]
86#[serde(rename_all = "camelCase")]
87pub struct FunctionCallRequest {
88 pub id: String,
90 pub name: String,
91 pub args: serde_json::Value,
93}
94
95#[derive(Debug, Clone, Deserialize)]
96pub struct ToolCallCancellation {
97 pub ids: Vec<String>,
98}
99
100#[derive(Debug, Clone, Deserialize)]
105#[serde(rename_all = "camelCase")]
106pub struct GoAway {
107 pub time_left: Option<String>,
109}
110
111#[derive(Debug, Clone, Deserialize)]
113#[serde(rename_all = "camelCase")]
114pub struct SessionResumptionUpdate {
115 pub new_handle: Option<String>,
116 #[serde(default)]
117 pub resumable: Option<bool>,
118}
119
120#[derive(Debug, Clone, PartialEq, Deserialize)]
124#[serde(rename_all = "camelCase")]
125pub struct UsageMetadata {
126 #[serde(default)]
127 pub prompt_token_count: u32,
128 #[serde(default)]
129 pub cached_content_token_count: u32,
130 #[serde(default)]
131 pub response_token_count: u32,
132 #[serde(default)]
133 pub tool_use_prompt_token_count: u32,
134 #[serde(default)]
135 pub thoughts_token_count: u32,
136 #[serde(default)]
137 pub total_token_count: u32,
138 #[serde(default)]
139 pub prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
140 #[serde(default)]
141 pub response_tokens_details: Option<Vec<ModalityTokenCount>>,
142}
143
144#[derive(Debug, Clone, PartialEq, Deserialize)]
145#[serde(rename_all = "camelCase")]
146pub struct ModalityTokenCount {
147 pub modality: String,
148 pub token_count: u32,
149}
150
151#[derive(Debug, Clone, PartialEq, Deserialize)]
153pub struct ApiError {
154 pub message: String,
155}
156
157#[derive(Debug, Clone)]
166pub enum ServerEvent {
167 SetupComplete,
169
170 ModelText(String),
172 ModelAudio(Vec<u8>),
174
175 GenerationComplete,
177 TurnComplete,
179 Interrupted,
181
182 InputTranscription(String),
184 OutputTranscription(String),
186
187 ToolCall(Vec<FunctionCallRequest>),
189 ToolCallCancellation(Vec<String>),
191
192 SessionResumption {
194 new_handle: Option<String>,
195 resumable: bool,
196 },
197
198 GoAway { time_left: Option<Duration> },
200
201 Usage(UsageMetadata),
203
204 Closed { reason: String },
206
207 Error(ApiError),
209}