Skip to main content

gproxy_protocol/wire/gemini/live/
generation.rs

1use super::setup::{AudioTranscriptionConfig, VoiceConsentSignature};
2use crate::Rest;
3pub use crate::gemini::audio::TranslationConfig;
4use crate::gemini::{content::*, generation::*};
5use serde::{Deserialize, Serialize};
6
7// GenerationConfig fields retain their native shape; endpoint support constraints
8// (e.g. responseSchema is unsupported by Live) are not runtime validators here.
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
10#[serde(rename_all = "camelCase")]
11#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
12#[derive(gproxy_protocol_macros::DeclaredFields)]
13pub struct LiveGenerationConfig {
14    #[serde(skip_serializing_if = "Option::is_none")]
15    #[serde(alias = "stop_sequences")]
16    pub stop_sequences: Option<Vec<String>>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    #[serde(alias = "response_mime_type")]
19    pub response_mime_type: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    #[serde(alias = "response_schema")]
22    pub response_schema: Option<Schema>,
23    #[serde(
24        rename = "_responseJsonSchema",
25        skip_serializing_if = "Option::is_none"
26    )]
27    pub response_json_schema_internal: Option<serde_json::Value>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    #[serde(alias = "response_json_schema")]
30    pub response_json_schema: Option<serde_json::Value>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    #[serde(alias = "response_modalities")]
33    pub response_modalities: Option<Vec<Modality>>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    #[serde(alias = "candidate_count")]
36    pub candidate_count: Option<i64>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    #[serde(alias = "max_output_tokens")]
39    pub max_output_tokens: Option<i64>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub temperature: Option<f64>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    #[serde(alias = "top_p")]
44    pub top_p: Option<f64>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    #[serde(alias = "top_k")]
47    pub top_k: Option<serde_json::Number>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub seed: Option<i64>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    #[serde(alias = "presence_penalty")]
52    pub presence_penalty: Option<f64>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    #[serde(alias = "frequency_penalty")]
55    pub frequency_penalty: Option<f64>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    #[serde(alias = "response_logprobs")]
58    pub response_logprobs: Option<bool>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub logprobs: Option<i64>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    #[serde(alias = "enable_enhanced_civic_answers")]
63    pub enable_enhanced_civic_answers: Option<bool>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    #[serde(alias = "speech_config")]
66    pub speech_config: Option<LiveSpeechConfig>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    #[serde(alias = "thinking_config")]
69    pub thinking_config: Option<ThinkingConfig>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    #[serde(alias = "image_config")]
72    pub image_config: Option<ImageConfig>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    #[serde(alias = "media_resolution")]
75    pub media_resolution: Option<GenerationMediaResolution>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    #[serde(alias = "response_format")]
78    pub response_format: Option<ResponseFormatConfig>,
79    #[serde(
80        alias = "enable_affective_dialog",
81        default,
82        skip_serializing_if = "Option::is_none"
83    )]
84    pub enable_affective_dialog: Option<bool>,
85    #[serde(
86        alias = "translation_config",
87        default,
88        skip_serializing_if = "Option::is_none"
89    )]
90    pub translation_config: Option<TranslationConfig>,
91    #[serde(
92        alias = "audio_transcription_config",
93        default,
94        skip_serializing_if = "Option::is_none"
95    )]
96    pub audio_transcription_config: Option<AudioTranscriptionConfig>,
97    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
98    pub rest: Rest,
99}
100
101#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
102#[serde(rename_all = "camelCase")]
103#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
104#[derive(gproxy_protocol_macros::DeclaredFields)]
105pub struct LiveSpeechConfig {
106    #[serde(alias = "voice_config")]
107    #[serde(default, skip_serializing_if = "Option::is_none")]
108    pub voice_config: Option<LiveVoiceConfig>,
109    #[serde(alias = "multi_speaker_voice_config")]
110    #[serde(default, skip_serializing_if = "Option::is_none")]
111    pub multi_speaker_voice_config: Option<LiveMultiSpeakerVoiceConfig>,
112    #[serde(alias = "language_code")]
113    #[serde(default, skip_serializing_if = "Option::is_none")]
114    pub language_code: Option<String>,
115    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
116    pub rest: Rest,
117}
118
119#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
120#[serde(rename_all = "camelCase")]
121#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
122#[derive(gproxy_protocol_macros::DeclaredFields)]
123pub struct LiveVoiceConfig {
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub voice: Option<String>,
126    #[serde(alias = "prebuilt_voice_config")]
127    #[serde(default, skip_serializing_if = "Option::is_none")]
128    pub prebuilt_voice_config: Option<LivePrebuiltVoiceConfig>,
129    #[serde(alias = "replicated_voice_config")]
130    #[serde(default, skip_serializing_if = "Option::is_none")]
131    pub replicated_voice_config: Option<ReplicatedVoiceConfig>,
132    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
133    pub rest: Rest,
134}
135
136#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
137#[serde(rename_all = "camelCase")]
138#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
139#[derive(gproxy_protocol_macros::DeclaredFields)]
140pub struct LivePrebuiltVoiceConfig {
141    #[serde(alias = "voice_name")]
142    #[serde(default, skip_serializing_if = "Option::is_none")]
143    pub voice_name: Option<String>,
144    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
145    pub rest: Rest,
146}
147
148#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
149#[serde(rename_all = "camelCase")]
150#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
151#[derive(gproxy_protocol_macros::DeclaredFields)]
152pub struct LiveMultiSpeakerVoiceConfig {
153    #[serde(alias = "speaker_voice_configs")]
154    #[serde(default, skip_serializing_if = "Option::is_none")]
155    pub speaker_voice_configs: Option<Vec<LiveSpeakerVoiceConfig>>,
156    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
157    pub rest: Rest,
158}
159
160#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
161#[serde(rename_all = "camelCase")]
162#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
163#[derive(gproxy_protocol_macros::DeclaredFields)]
164pub struct LiveSpeakerVoiceConfig {
165    #[serde(default, skip_serializing_if = "Option::is_none")]
166    pub speaker: Option<String>,
167    #[serde(alias = "voice_config")]
168    #[serde(default, skip_serializing_if = "Option::is_none")]
169    pub voice_config: Option<LiveVoiceConfig>,
170    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
171    pub rest: Rest,
172}
173
174#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
175#[serde(rename_all = "camelCase")]
176#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
177#[derive(gproxy_protocol_macros::DeclaredFields)]
178pub struct ReplicatedVoiceConfig {
179    #[serde(alias = "mime_type")]
180    #[serde(default, skip_serializing_if = "Option::is_none")]
181    pub mime_type: Option<String>,
182    #[serde(alias = "voice_sample_audio")]
183    #[serde(default, skip_serializing_if = "Option::is_none")]
184    pub voice_sample_audio: Option<String>,
185    #[serde(alias = "consent_audio")]
186    #[serde(default, skip_serializing_if = "Option::is_none")]
187    pub consent_audio: Option<String>,
188    #[serde(alias = "voice_consent_signature")]
189    #[serde(default, skip_serializing_if = "Option::is_none")]
190    pub voice_consent_signature: Option<VoiceConsentSignature>,
191    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
192    pub rest: Rest,
193}