use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum AudioFormat {
#[default]
Pcm16,
G711Ulaw,
G711Alaw,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum Voice {
#[default]
Alloy,
Ash,
Ballad,
Coral,
Echo,
Sage,
Shimmer,
Verse,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum TranscriptionModel {
#[serde(rename = "whisper-1")]
#[default]
Whisper1,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct InputAudioTranscription {
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<TranscriptionModel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt: Option<String>,
}
impl InputAudioTranscription {
pub fn new(model: TranscriptionModel) -> Self {
Self { model: Some(model), language: None, prompt: None }
}
pub fn with_language(mut self, language: impl Into<String>) -> Self {
self.language = Some(language.into());
self
}
pub fn with_prompt(mut self, prompt: impl Into<String>) -> Self {
self.prompt = Some(prompt.into());
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputAudioNoiseReduction {
#[serde(rename = "type")]
pub noise_type: NoiseReductionType,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum NoiseReductionType {
NearField,
FarField,
}