1#![allow(unused_imports)]
5
6use serde::{Deserialize, Serialize};
7use super::*;
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
10#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
11#[non_exhaustive]
12pub enum SpeechCreateParamsResponseFormat {
13 #[serde(rename = "mp3")]
14 Mp3,
15 #[serde(rename = "opus")]
16 Opus,
17 #[serde(rename = "aac")]
18 Aac,
19 #[serde(rename = "flac")]
20 Flac,
21 #[serde(rename = "wav")]
22 Wav,
23 #[serde(rename = "pcm")]
24 Pcm,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
28#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
29#[non_exhaustive]
30pub enum SpeechCreateParamsStreamFormat {
31 #[serde(rename = "sse")]
32 Sse,
33 #[serde(rename = "audio")]
34 Audio,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
39pub struct SpeechCreateParams {
40 pub input: String,
42 pub model: String,
44 pub voice: Voice,
46 #[serde(skip_serializing_if = "Option::is_none", default)]
48 pub instructions: Option<String>,
49 #[serde(skip_serializing_if = "Option::is_none", default)]
51 pub response_format: Option<SpeechCreateParamsResponseFormat>,
52 #[serde(skip_serializing_if = "Option::is_none", default)]
54 pub speed: Option<f64>,
55 #[serde(skip_serializing_if = "Option::is_none", default)]
57 pub stream_format: Option<SpeechCreateParamsStreamFormat>,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
63pub struct VoiceID {
64 pub id: String,
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
69#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
70#[non_exhaustive]
71pub enum Voice {
72 Alloy,
73 Ash,
74 Ballad,
75 Coral,
76 Echo,
77 Sage,
78 Shimmer,
79 Verse,
80 Marin,
81 Cedar,
82}
83
84#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
85#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
86#[non_exhaustive]
87pub enum SpeechModel {
88 #[serde(rename = "tts-1")]
89 Tts1,
90 #[serde(rename = "tts-1-hd")]
91 Tts1Hd,
92 #[serde(rename = "gpt-4o-mini-tts")]
93 Gpt4oMiniTts,
94 #[serde(rename = "gpt-4o-mini-tts-2025-12-15")]
95 Gpt4oMiniTts20251215,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
99#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
100pub struct Logprob {
101 #[serde(skip_serializing_if = "Option::is_none", default)]
103 pub token: Option<String>,
104 #[serde(skip_serializing_if = "Option::is_none", default)]
106 pub bytes: Option<Vec<f64>>,
107 #[serde(skip_serializing_if = "Option::is_none", default)]
109 pub logprob: Option<f64>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
115pub struct UsageTokensInputTokenDetails {
116 #[serde(skip_serializing_if = "Option::is_none", default)]
118 pub audio_tokens: Option<i64>,
119 #[serde(skip_serializing_if = "Option::is_none", default)]
121 pub text_tokens: Option<i64>,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
126#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
127pub struct UsageTokens {
128 pub input_tokens: i64,
130 pub output_tokens: i64,
132 pub total_tokens: i64,
134 #[serde(rename = "type")]
136 pub type_: String,
137 #[serde(skip_serializing_if = "Option::is_none", default)]
139 pub input_token_details: Option<UsageTokensInputTokenDetails>,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
144#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
145pub struct UsageDuration {
146 pub seconds: f64,
148 #[serde(rename = "type")]
150 pub type_: String,
151}
152
153pub type Usage = serde_json::Value;
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
156#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
157pub struct TranscriptionCreateParamsBase {
158 pub file: serde_json::Value,
160 pub model: String,
162 #[serde(skip_serializing_if = "Option::is_none", default)]
164 pub chunking_strategy: Option<ChunkingStrategy>,
165 #[serde(skip_serializing_if = "Option::is_none", default)]
167 pub include: Option<Vec<TranscriptionInclude>>,
168 #[serde(skip_serializing_if = "Option::is_none", default)]
170 pub known_speaker_names: Option<serde_json::Value>,
171 #[serde(skip_serializing_if = "Option::is_none", default)]
173 pub known_speaker_references: Option<serde_json::Value>,
174 #[serde(skip_serializing_if = "Option::is_none", default)]
176 pub language: Option<String>,
177 #[serde(skip_serializing_if = "Option::is_none", default)]
179 pub prompt: Option<String>,
180 #[serde(skip_serializing_if = "Option::is_none", default)]
182 pub response_format: Option<AudioResponseFormat>,
183 #[serde(skip_serializing_if = "Option::is_none", default)]
185 pub temperature: Option<f64>,
186 #[serde(skip_serializing_if = "Option::is_none", default)]
188 pub timestamp_granularities: Option<Vec<serde_json::Value>>,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
192#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
193pub struct ChunkingStrategyVadConfig {
194 #[serde(rename = "type")]
196 pub type_: String,
197 #[serde(skip_serializing_if = "Option::is_none", default)]
199 pub prefix_padding_ms: Option<i64>,
200 #[serde(skip_serializing_if = "Option::is_none", default)]
202 pub silence_duration_ms: Option<i64>,
203 #[serde(skip_serializing_if = "Option::is_none", default)]
205 pub threshold: Option<f64>,
206}
207
208#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
209#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
210#[non_exhaustive]
211pub enum ChunkingStrategy {
212 Auto,
213}
214
215pub type TranscriptionCreateParams = serde_json::Value;
216
217pub type TranscriptionCreateResponse = serde_json::Value;
218
219#[derive(Debug, Clone, Serialize, Deserialize)]
221#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
222pub struct TranscriptionDiarized {
223 pub duration: f64,
225 pub segments: Vec<TranscriptionDiarizedSegment>,
227 pub task: String,
229 pub text: String,
231 #[serde(skip_serializing_if = "Option::is_none", default)]
233 pub usage: Option<Usage>,
234}
235
236#[derive(Debug, Clone, Serialize, Deserialize)]
238#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
239pub struct TranscriptionDiarizedSegment {
240 pub id: String,
242 pub end: f64,
244 pub speaker: String,
246 pub start: f64,
248 pub text: String,
250 #[serde(rename = "type")]
252 pub type_: String,
253}
254
255#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
256#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
257#[non_exhaustive]
258pub enum TranscriptionInclude {
259 #[serde(rename = "logprobs")]
260 Logprobs,
261}
262
263#[derive(Debug, Clone, Serialize, Deserialize)]
264#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
265pub struct TranscriptionSegment {
266 pub id: i64,
268 pub avg_logprob: f64,
270 pub compression_ratio: f64,
272 pub end: f64,
274 pub no_speech_prob: f64,
276 pub seek: i64,
278 pub start: f64,
280 pub temperature: f64,
282 pub text: String,
284 pub tokens: Vec<i64>,
286}
287
288pub type TranscriptionStreamEvent = serde_json::Value;
289
290#[derive(Debug, Clone, Serialize, Deserialize)]
292#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
293pub struct TranscriptionTextDeltaEvent {
294 pub delta: String,
296 #[serde(rename = "type")]
298 pub type_: String,
299 #[serde(skip_serializing_if = "Option::is_none", default)]
301 pub logprobs: Option<Vec<Logprob>>,
302 #[serde(skip_serializing_if = "Option::is_none", default)]
304 pub segment_id: Option<String>,
305}
306
307#[derive(Debug, Clone, Serialize, Deserialize)]
309#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
310pub struct UsageInputTokenDetails {
311 #[serde(skip_serializing_if = "Option::is_none", default)]
313 pub audio_tokens: Option<i64>,
314 #[serde(skip_serializing_if = "Option::is_none", default)]
316 pub text_tokens: Option<i64>,
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize)]
321#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
322pub struct TranscriptionTextDoneEvent {
323 pub text: String,
325 #[serde(rename = "type")]
327 pub type_: String,
328 #[serde(skip_serializing_if = "Option::is_none", default)]
330 pub logprobs: Option<Vec<Logprob>>,
331 #[serde(skip_serializing_if = "Option::is_none", default)]
333 pub usage: Option<Usage>,
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
338#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
339pub struct TranscriptionTextSegmentEvent {
340 pub id: String,
342 pub end: f64,
344 pub speaker: String,
346 pub start: f64,
348 pub text: String,
350 #[serde(rename = "type")]
352 pub type_: String,
353}
354
355#[derive(Debug, Clone, Serialize, Deserialize)]
357#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
358pub struct TranscriptionVerbose {
359 pub duration: f64,
361 pub language: String,
363 pub text: String,
365 #[serde(skip_serializing_if = "Option::is_none", default)]
367 pub segments: Option<Vec<TranscriptionSegment>>,
368 #[serde(skip_serializing_if = "Option::is_none", default)]
370 pub usage: Option<Usage>,
371 #[serde(skip_serializing_if = "Option::is_none", default)]
373 pub words: Option<Vec<TranscriptionWord>>,
374}
375
376#[derive(Debug, Clone, Serialize, Deserialize)]
377#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
378pub struct TranscriptionWord {
379 pub end: f64,
381 pub start: f64,
383 pub word: String,
385}
386
387#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
388#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
389#[non_exhaustive]
390pub enum TranslationCreateParamsResponseFormat {
391 #[serde(rename = "json")]
392 Json,
393 #[serde(rename = "text")]
394 Text,
395 #[serde(rename = "srt")]
396 Srt,
397 #[serde(rename = "verbose_json")]
398 VerboseJson,
399 #[serde(rename = "vtt")]
400 Vtt,
401}
402
403#[derive(Debug, Clone, Serialize, Deserialize)]
404#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
405pub struct TranslationCreateParams {
406 pub file: serde_json::Value,
408 pub model: String,
410 #[serde(skip_serializing_if = "Option::is_none", default)]
412 pub prompt: Option<String>,
413 #[serde(skip_serializing_if = "Option::is_none", default)]
415 pub response_format: Option<TranslationCreateParamsResponseFormat>,
416 #[serde(skip_serializing_if = "Option::is_none", default)]
418 pub temperature: Option<f64>,
419}
420
421pub type TranslationCreateResponse = serde_json::Value;
422
423#[derive(Debug, Clone, Serialize, Deserialize)]
424#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
425pub struct TranslationVerbose {
426 pub duration: f64,
428 pub language: String,
430 pub text: String,
432 #[serde(skip_serializing_if = "Option::is_none", default)]
434 pub segments: Option<Vec<TranscriptionSegment>>,
435}
436
437#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
438#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
439#[non_exhaustive]
440pub enum AudioModel {
441 #[serde(rename = "whisper-1")]
442 Whisper1,
443 #[serde(rename = "gpt-4o-transcribe")]
444 Gpt4oTranscribe,
445 #[serde(rename = "gpt-4o-mini-transcribe")]
446 Gpt4oMiniTranscribe,
447 #[serde(rename = "gpt-4o-mini-transcribe-2025-12-15")]
448 Gpt4oMiniTranscribe20251215,
449 #[serde(rename = "gpt-4o-transcribe-diarize")]
450 Gpt4oTranscribeDiarize,
451}