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