1use super::RealtimeAudioFormats;
6use super::wire::present_nullable;
7use crate::Rest;
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
12#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
13#[derive(gproxy_protocol_macros::DeclaredFields)]
14pub struct TranscriptionLanguage {
15 pub code: String,
16 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
17 pub rest: Rest,
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
22#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
23#[derive(gproxy_protocol_macros::DeclaredFields)]
24pub struct LogProbProperties {
25 pub token: String,
26 pub bytes: Vec<i64>,
27 pub logprob: serde_json::Number,
28 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
29 pub rest: Rest,
30}
31
32#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
34#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
35#[derive(gproxy_protocol_macros::DeclaredFields)]
36pub struct RealtimeTranscriptionSessionCreateRequest {
37 #[serde(rename = "type")]
38 pub type_: RealtimeTranscriptionSessionCreateRequestType,
39 #[serde(
40 default,
41 deserialize_with = "present_nullable",
42 skip_serializing_if = "Option::is_none"
43 )]
44 pub audio: Option<Option<RealtimeTranscriptionSessionAudio>>,
45 #[serde(
46 default,
47 deserialize_with = "present_nullable",
48 skip_serializing_if = "Option::is_none"
49 )]
50 pub include: Option<Option<Vec<RealtimeTranscriptionSessionCreateRequestIncludeItem>>>,
51 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
52 pub rest: Rest,
53}
54
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
57#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
58#[derive(gproxy_protocol_macros::DeclaredFields)]
59pub struct AudioTranscription {
60 #[serde(
61 default,
62 deserialize_with = "present_nullable",
63 skip_serializing_if = "Option::is_none"
64 )]
65 pub delay: Option<Option<AudioTranscriptionDelay>>,
66 #[serde(
67 default,
68 deserialize_with = "present_nullable",
69 skip_serializing_if = "Option::is_none"
70 )]
71 pub keywords: Option<Option<Vec<String>>>,
72 #[serde(
73 default,
74 deserialize_with = "present_nullable",
75 skip_serializing_if = "Option::is_none"
76 )]
77 pub language: Option<Option<String>>,
78 #[serde(
79 default,
80 deserialize_with = "present_nullable",
81 skip_serializing_if = "Option::is_none"
82 )]
83 pub languages: Option<Option<Vec<String>>>,
84 #[serde(
85 default,
86 deserialize_with = "present_nullable",
87 skip_serializing_if = "Option::is_none"
88 )]
89 pub model: Option<Option<String>>,
90 #[serde(
91 default,
92 deserialize_with = "present_nullable",
93 skip_serializing_if = "Option::is_none"
94 )]
95 pub prompt: Option<Option<String>>,
96 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
97 pub rest: Rest,
98}
99
100#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
102#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
103#[derive(gproxy_protocol_macros::DeclaredFields)]
104pub struct RealtimeTranscriptionSessionAudio {
105 #[serde(
106 default,
107 deserialize_with = "present_nullable",
108 skip_serializing_if = "Option::is_none"
109 )]
110 pub input: Option<Option<RealtimeTranscriptionSessionAudioInput>>,
111 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
112 pub rest: Rest,
113}
114
115#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
117#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
118#[derive(gproxy_protocol_macros::DeclaredFields)]
119pub enum NoiseReductionType {
120 #[serde(rename = "near_field")]
121 NearField,
122 #[serde(rename = "far_field")]
123 FarField,
124}
125
126#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
128#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
129#[derive(gproxy_protocol_macros::DeclaredFields)]
130pub struct RealtimeTranscriptionSessionAudioInput {
131 #[serde(
132 default,
133 deserialize_with = "present_nullable",
134 skip_serializing_if = "Option::is_none"
135 )]
136 pub format: Option<Option<RealtimeAudioFormats>>,
137 #[serde(
138 default,
139 deserialize_with = "present_nullable",
140 skip_serializing_if = "Option::is_none"
141 )]
142 pub noise_reduction: Option<Option<RealtimeTranscriptionSessionAudioInputNoiseReduction>>,
143 #[serde(
144 default,
145 deserialize_with = "present_nullable",
146 skip_serializing_if = "Option::is_none"
147 )]
148 pub transcription: Option<Option<AudioTranscription>>,
149 #[serde(
150 default,
151 deserialize_with = "present_nullable",
152 skip_serializing_if = "Option::is_none"
153 )]
154 pub turn_detection: Option<Option<RealtimeTranscriptionSessionAudioInputTurnDetection>>,
155 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
156 pub rest: Rest,
157}
158
159#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
161#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
162#[derive(gproxy_protocol_macros::DeclaredFields)]
163pub struct RealtimeTranscriptionSessionAudioInputNoiseReduction {
164 #[serde(rename = "type")]
165 #[serde(
166 default,
167 deserialize_with = "present_nullable",
168 skip_serializing_if = "Option::is_none"
169 )]
170 pub type_: Option<Option<NoiseReductionType>>,
171 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
172 pub rest: Rest,
173}
174
175#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
177#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
178#[serde(untagged)]
179#[derive(gproxy_protocol_macros::DeclaredFields)]
180pub enum RealtimeTranscriptionSessionAudioInputTurnDetection {
181 RealtimeTranscriptionSessionAudioInputTurnDetectionServerVad(
182 RealtimeTranscriptionSessionAudioInputTurnDetectionServerVad,
183 ),
184 RealtimeTranscriptionSessionAudioInputTurnDetectionSemanticVad(
185 RealtimeTranscriptionSessionAudioInputTurnDetectionSemanticVad,
186 ),
187 Variant3(()),
188}
189
190#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
192#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
193#[derive(gproxy_protocol_macros::DeclaredFields)]
194pub struct RealtimeTranscriptionSessionAudioInputTurnDetectionServerVad {
195 #[serde(rename = "type")]
196 pub type_: RealtimeTranscriptionSessionAudioInputTurnDetectionServerVadType,
197 #[serde(
198 default,
199 deserialize_with = "present_nullable",
200 skip_serializing_if = "Option::is_none"
201 )]
202 pub create_response: Option<Option<bool>>,
203 #[serde(
204 default,
205 deserialize_with = "present_nullable",
206 skip_serializing_if = "Option::is_none"
207 )]
208 pub idle_timeout_ms: Option<Option<i64>>,
209 #[serde(
210 default,
211 deserialize_with = "present_nullable",
212 skip_serializing_if = "Option::is_none"
213 )]
214 pub interrupt_response: Option<Option<bool>>,
215 #[serde(
216 default,
217 deserialize_with = "present_nullable",
218 skip_serializing_if = "Option::is_none"
219 )]
220 pub prefix_padding_ms: Option<Option<i64>>,
221 #[serde(
222 default,
223 deserialize_with = "present_nullable",
224 skip_serializing_if = "Option::is_none"
225 )]
226 pub silence_duration_ms: Option<Option<i64>>,
227 #[serde(
228 default,
229 deserialize_with = "present_nullable",
230 skip_serializing_if = "Option::is_none"
231 )]
232 pub threshold: Option<Option<serde_json::Number>>,
233 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
234 pub rest: Rest,
235}
236
237#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
239#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
240#[derive(gproxy_protocol_macros::DeclaredFields)]
241pub struct RealtimeTranscriptionSessionAudioInputTurnDetectionSemanticVad {
242 #[serde(rename = "type")]
243 pub type_: RealtimeTranscriptionSessionAudioInputTurnDetectionSemanticVadType,
244 #[serde(
245 default,
246 deserialize_with = "present_nullable",
247 skip_serializing_if = "Option::is_none"
248 )]
249 pub create_response: Option<Option<bool>>,
250 #[serde(
251 default,
252 deserialize_with = "present_nullable",
253 skip_serializing_if = "Option::is_none"
254 )]
255 pub eagerness:
256 Option<Option<RealtimeTranscriptionSessionAudioInputTurnDetectionSemanticVadEagerness>>,
257 #[serde(
258 default,
259 deserialize_with = "present_nullable",
260 skip_serializing_if = "Option::is_none"
261 )]
262 pub interrupt_response: Option<Option<bool>>,
263 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
264 pub rest: Rest,
265}
266
267#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
268#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
269#[derive(gproxy_protocol_macros::DeclaredFields)]
270pub enum RealtimeTranscriptionSessionCreateRequestType {
271 #[serde(rename = "transcription")]
272 Transcription,
273}
274
275#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
276#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
277#[derive(gproxy_protocol_macros::DeclaredFields)]
278pub enum RealtimeTranscriptionSessionCreateRequestIncludeItem {
279 #[serde(rename = "item.input_audio_transcription.logprobs")]
280 ItemInputAudioTranscriptionLogprobs,
281}
282
283#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
284#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
285#[derive(gproxy_protocol_macros::DeclaredFields)]
286pub enum AudioTranscriptionDelay {
287 #[serde(rename = "minimal")]
288 Minimal,
289 #[serde(rename = "low")]
290 Low,
291 #[serde(rename = "medium")]
292 Medium,
293 #[serde(rename = "high")]
294 High,
295 #[serde(rename = "xhigh")]
296 Xhigh,
297}
298
299#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
300#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
301#[derive(gproxy_protocol_macros::DeclaredFields)]
302pub enum RealtimeTranscriptionSessionAudioInputTurnDetectionServerVadType {
303 #[serde(rename = "server_vad")]
304 ServerVad,
305}
306
307#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
308#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
309#[derive(gproxy_protocol_macros::DeclaredFields)]
310pub enum RealtimeTranscriptionSessionAudioInputTurnDetectionSemanticVadType {
311 #[serde(rename = "semantic_vad")]
312 SemanticVad,
313}
314
315#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
316#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
317#[derive(gproxy_protocol_macros::DeclaredFields)]
318pub enum RealtimeTranscriptionSessionAudioInputTurnDetectionSemanticVadEagerness {
319 #[serde(rename = "low")]
320 Low,
321 #[serde(rename = "medium")]
322 Medium,
323 #[serde(rename = "high")]
324 High,
325 #[serde(rename = "auto")]
326 Auto,
327}