1use crate::{Rest, WireRequest, WireResponse};
6use serde::{Deserialize, Serialize};
7
8pub type CreateVoiceRequest = WireRequest<CreateVoiceRequestBody>;
9pub type CreateVoiceResponse = WireResponse<Voice>;
10pub type ListVoicesRequest = WireRequest<()>;
11pub type ListVoicesResponse = WireResponse<ListVoicesResponseBody>;
12pub type GetVoiceRequest = WireRequest<()>;
13pub type GetVoiceResponse = WireResponse<Voice>;
14pub type DeleteVoiceRequest = WireRequest<()>;
15pub type DeleteVoiceResponse = WireResponse<DeleteVoiceResponseBody>;
16
17#[derive(
18 Debug,
19 Clone,
20 PartialEq,
21 Serialize,
22 Deserialize,
23 gproxy_protocol_macros::WireBuilder,
24 gproxy_protocol_macros::DeclaredFields,
25)]
26#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
27pub struct CreateVoiceRequestBody {
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub store: Option<bool>,
30 pub voice: Voice,
31 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
32 pub rest: Rest,
33}
34
35#[derive(
36 Debug,
37 Clone,
38 PartialEq,
39 Serialize,
40 Deserialize,
41 gproxy_protocol_macros::WireBuilder,
42 gproxy_protocol_macros::DeclaredFields,
43)]
44#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
45pub struct ListVoicesResponseBody {
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub next_page_token: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub voices: Option<Vec<Voice>>,
50 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
51 pub rest: Rest,
52}
53
54#[derive(
55 Debug,
56 Clone,
57 PartialEq,
58 Serialize,
59 Deserialize,
60 gproxy_protocol_macros::WireBuilder,
61 gproxy_protocol_macros::DeclaredFields,
62)]
63#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
64pub struct DeleteVoiceResponseBody {
65 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
66 pub rest: Rest,
67}
68
69#[derive(
70 Debug,
71 Clone,
72 PartialEq,
73 Serialize,
74 Deserialize,
75 gproxy_protocol_macros::WireBuilder,
76 gproxy_protocol_macros::DeclaredFields,
77)]
78#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
79pub struct Voice {
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub accent: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub context: Option<String>,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub description: Option<String>,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub display_name: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub expire_time: Option<String>,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub gender: Option<String>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub id: Option<String>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub key: Option<String>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub language_code: Option<String>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub model: Option<String>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub persona: Option<String>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub pitch: Option<Pitch>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub prompted: Option<PromptedVoice>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub region_code: Option<String>,
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub replicated: Option<ReplicatedVoice>,
114 #[serde(skip_serializing_if = "Option::is_none")]
116 pub sample_audio: Option<AudioData>,
117 #[serde(rename = "type")]
118 pub type_: VoiceType,
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub usage: Option<Usage>,
122 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
123 pub rest: Rest,
124}
125
126#[derive(
127 Debug,
128 Clone,
129 Copy,
130 PartialEq,
131 Eq,
132 Serialize,
133 Deserialize,
134 gproxy_protocol_macros::DeclaredFields,
135)]
136#[serde(rename_all = "snake_case")]
137#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
138pub enum Pitch {
139 Low,
140 Medium,
141 High,
142}
143
144#[derive(
145 Debug,
146 Clone,
147 PartialEq,
148 Serialize,
149 Deserialize,
150 gproxy_protocol_macros::WireBuilder,
151 gproxy_protocol_macros::DeclaredFields,
152)]
153#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
154pub struct PromptedVoice {
155 pub input: String,
156 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
157 pub rest: Rest,
158}
159
160#[derive(
161 Debug,
162 Clone,
163 PartialEq,
164 Serialize,
165 Deserialize,
166 gproxy_protocol_macros::WireBuilder,
167 gproxy_protocol_macros::DeclaredFields,
168)]
169#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
170pub struct ReplicatedVoice {
171 pub consent_audio: AudioData,
172 pub source_audio: AudioData,
173 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
174 pub rest: Rest,
175}
176
177#[derive(
178 Debug,
179 Clone,
180 PartialEq,
181 Serialize,
182 Deserialize,
183 gproxy_protocol_macros::WireBuilder,
184 gproxy_protocol_macros::DeclaredFields,
185)]
186#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
187pub struct AudioData {
188 pub data: String,
189 pub mime_type: String,
190 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
191 pub rest: Rest,
192}
193
194#[derive(
195 Debug,
196 Clone,
197 Copy,
198 PartialEq,
199 Eq,
200 Serialize,
201 Deserialize,
202 gproxy_protocol_macros::DeclaredFields,
203)]
204#[serde(rename_all = "snake_case")]
205#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
206pub enum VoiceType {
207 Replicated,
208 Prompted,
209 Prebuilt,
210}
211
212#[derive(
213 Debug,
214 Clone,
215 PartialEq,
216 Serialize,
217 Deserialize,
218 gproxy_protocol_macros::WireBuilder,
219 gproxy_protocol_macros::DeclaredFields,
220)]
221#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
222pub struct Usage {
223 #[serde(skip_serializing_if = "Option::is_none")]
224 pub cached_tokens_by_modality: Option<Vec<ModalityTokens>>,
225 #[serde(skip_serializing_if = "Option::is_none")]
226 pub grounding_tool_count: Option<Vec<GroundingToolCount>>,
227 #[serde(skip_serializing_if = "Option::is_none")]
228 pub input_tokens_by_modality: Option<Vec<ModalityTokens>>,
229 #[serde(skip_serializing_if = "Option::is_none")]
230 pub output_tokens_by_modality: Option<Vec<ModalityTokens>>,
231 #[serde(skip_serializing_if = "Option::is_none")]
232 pub tool_use_tokens_by_modality: Option<Vec<ModalityTokens>>,
233 #[serde(skip_serializing_if = "Option::is_none")]
234 pub total_cached_tokens: Option<i64>,
235 #[serde(skip_serializing_if = "Option::is_none")]
236 pub total_input_tokens: Option<i64>,
237 #[serde(skip_serializing_if = "Option::is_none")]
238 pub total_output_tokens: Option<i64>,
239 #[serde(skip_serializing_if = "Option::is_none")]
240 pub total_thought_tokens: Option<i64>,
241 #[serde(skip_serializing_if = "Option::is_none")]
242 pub total_tokens: Option<i64>,
243 #[serde(skip_serializing_if = "Option::is_none")]
244 pub total_tool_use_tokens: Option<i64>,
245 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
246 pub rest: Rest,
247}
248
249#[derive(
250 Debug,
251 Clone,
252 PartialEq,
253 Serialize,
254 Deserialize,
255 gproxy_protocol_macros::WireBuilder,
256 gproxy_protocol_macros::DeclaredFields,
257)]
258#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
259pub struct ModalityTokens {
260 #[serde(skip_serializing_if = "Option::is_none")]
261 pub modality: Option<ResponseModality>,
262 #[serde(skip_serializing_if = "Option::is_none")]
263 pub tokens: Option<i64>,
264 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
265 pub rest: Rest,
266}
267
268#[derive(
269 Debug,
270 Clone,
271 PartialEq,
272 Serialize,
273 Deserialize,
274 gproxy_protocol_macros::WireBuilder,
275 gproxy_protocol_macros::DeclaredFields,
276)]
277#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
278pub struct GroundingToolCount {
279 #[serde(skip_serializing_if = "Option::is_none")]
280 pub count: Option<i64>,
281 #[serde(skip_serializing_if = "Option::is_none")]
282 #[serde(rename = "type")]
283 pub type_: Option<GroundingToolType>,
284 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
285 pub rest: Rest,
286}
287
288#[derive(
289 Debug,
290 Clone,
291 Copy,
292 PartialEq,
293 Eq,
294 Serialize,
295 Deserialize,
296 gproxy_protocol_macros::DeclaredFields,
297)]
298#[serde(rename_all = "snake_case")]
299#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
300pub enum ResponseModality {
301 Text,
302 Image,
303 Audio,
304 Video,
305 Document,
306}
307
308#[derive(
309 Debug,
310 Clone,
311 Copy,
312 PartialEq,
313 Eq,
314 Serialize,
315 Deserialize,
316 gproxy_protocol_macros::DeclaredFields,
317)]
318#[serde(rename_all = "snake_case")]
319#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
320pub enum GroundingToolType {
321 GoogleSearch,
322 GoogleMaps,
323 Retrieval,
324}
325
326#[derive(
327 Debug,
328 Clone,
329 PartialEq,
330 Serialize,
331 Deserialize,
332 gproxy_protocol_macros::WireBuilder,
333 gproxy_protocol_macros::DeclaredFields,
334)]
335#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
336pub struct ListVoicesQuery {
337 #[serde(skip_serializing_if = "Option::is_none")]
338 pub accent: Option<Vec<String>>,
339 #[serde(skip_serializing_if = "Option::is_none")]
340 pub context: Option<Vec<String>>,
341 #[serde(skip_serializing_if = "Option::is_none")]
342 pub gender: Option<Vec<String>>,
343 #[serde(skip_serializing_if = "Option::is_none")]
344 pub language_code: Option<Vec<String>>,
345 #[serde(skip_serializing_if = "Option::is_none")]
346 pub page_size: Option<i64>,
347 #[serde(skip_serializing_if = "Option::is_none")]
348 pub page_token: Option<String>,
349 #[serde(skip_serializing_if = "Option::is_none")]
350 pub persona: Option<Vec<String>>,
351 #[serde(skip_serializing_if = "Option::is_none")]
352 pub pitch: Option<Vec<String>>,
353 #[serde(skip_serializing_if = "Option::is_none")]
354 pub region_code: Option<Vec<String>>,
355 #[serde(skip_serializing_if = "Option::is_none")]
356 pub search: Option<String>,
357 #[serde(skip_serializing_if = "Option::is_none")]
358 #[serde(rename = "type")]
359 pub type_: Option<Vec<String>>,
360 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
361 pub rest: Rest,
362}