1use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct GenerationConfig {
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub response_modalities: Option<Vec<Modality>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub speech_config: Option<SpeechConfig>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub thinking_config: Option<ThinkingConfig>,
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub media_resolution: Option<MediaResolution>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub temperature: Option<f32>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub top_p: Option<f32>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub top_k: Option<u32>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub max_output_tokens: Option<u32>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub candidate_count: Option<u32>,
35}
36
37#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
39#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
40pub enum Modality {
41 Audio,
42 Text,
43}
44
45#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48#[serde(rename_all = "camelCase")]
49pub struct SpeechConfig {
50 pub voice_config: VoiceConfig,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct VoiceConfig {
56 pub prebuilt_voice_config: PrebuiltVoiceConfig,
57}
58
59#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct PrebuiltVoiceConfig {
62 pub voice_name: String,
64}
65
66#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
74#[serde(rename_all = "camelCase")]
75pub struct ThinkingConfig {
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub thinking_level: Option<ThinkingLevel>,
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub thinking_budget: Option<u32>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub include_thoughts: Option<bool>,
84}
85
86#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
87#[serde(rename_all = "lowercase")]
88pub enum ThinkingLevel {
89 Minimal,
90 Low,
91 Medium,
92 High,
93}
94
95#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
98#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
99pub enum MediaResolution {
100 MediaResolutionLow,
101 MediaResolutionHigh,
102}
103
104#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
108#[serde(rename_all = "camelCase")]
109pub struct RealtimeInputConfig {
110 #[serde(skip_serializing_if = "Option::is_none")]
111 pub automatic_activity_detection: Option<AutomaticActivityDetection>,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub activity_handling: Option<ActivityHandling>,
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub turn_coverage: Option<TurnCoverage>,
118}
119
120#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
125#[serde(rename_all = "camelCase")]
126pub struct AutomaticActivityDetection {
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub disabled: Option<bool>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub start_of_speech_sensitivity: Option<StartSensitivity>,
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub prefix_padding_ms: Option<u32>,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub end_of_speech_sensitivity: Option<EndSensitivity>,
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub silence_duration_ms: Option<u32>,
139}
140
141#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
142#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
143pub enum StartSensitivity {
144 StartSensitivityHigh,
145 StartSensitivityLow,
146}
147
148#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
149#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
150pub enum EndSensitivity {
151 EndSensitivityHigh,
152 EndSensitivityLow,
153}
154
155#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
158#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
159pub enum ActivityHandling {
160 StartOfActivityInterrupts,
162 NoInterruption,
164}
165
166#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
168#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
169pub enum TurnCoverage {
170 TurnIncludesOnlyActivity,
172 TurnIncludesAllInput,
174 TurnIncludesAudioActivityAndAllVideo,
176}
177
178#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
186#[serde(rename_all = "camelCase")]
187pub struct SessionResumptionConfig {
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub handle: Option<String>,
190}
191
192#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
198#[serde(rename_all = "camelCase")]
199pub struct ContextWindowCompressionConfig {
200 #[serde(skip_serializing_if = "Option::is_none")]
201 pub sliding_window: Option<SlidingWindow>,
202 #[serde(skip_serializing_if = "Option::is_none")]
204 pub trigger_tokens: Option<u64>,
205}
206
207#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
208#[serde(rename_all = "camelCase")]
209pub struct SlidingWindow {
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub target_tokens: Option<u64>,
212}
213
214#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
219pub struct AudioTranscriptionConfig {}
220
221#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
224#[serde(rename_all = "camelCase")]
225pub struct ProactivityConfig {
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub proactive_audio: Option<bool>,
228}
229
230#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
238#[serde(rename_all = "camelCase")]
239pub struct HistoryConfig {
240 #[serde(skip_serializing_if = "Option::is_none")]
241 pub initial_history_in_client_content: Option<bool>,
242}
243
244#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
247#[serde(rename_all = "camelCase")]
248pub struct Tool {
249 pub function_declarations: Vec<FunctionDeclaration>,
250}
251
252#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
253#[serde(rename_all = "camelCase")]
254pub struct FunctionDeclaration {
255 pub name: String,
256 pub description: String,
257 pub parameters: serde_json::Value,
259 #[serde(skip_serializing_if = "Option::is_none")]
261 pub scheduling: Option<FunctionScheduling>,
262 #[serde(skip_serializing_if = "Option::is_none")]
264 pub behavior: Option<FunctionBehavior>,
265}
266
267#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
269#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
270pub enum FunctionScheduling {
271 Interrupt,
273 WhenIdle,
275 Silent,
277}
278
279#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
281#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
282pub enum FunctionBehavior {
283 NonBlocking,
285}