use serde::{Deserialize, Serialize};
use crate::audio::{AudioOutput, AudioResponse, TextToSpeechRequest, TranscriptionResponse};
use crate::value_objects::Meta;
const DEFAULT_VOICE: &str = "alloy";
const DEFAULT_AUDIO_MIME_TYPE: &str = "audio/mpeg";
#[derive(Debug, Serialize)]
pub struct SpeechApiRequest {
pub model: String,
pub input: String,
pub voice: String,
}
pub fn build_speech_request(request: &TextToSpeechRequest) -> SpeechApiRequest {
SpeechApiRequest {
model: request.model.clone(),
input: request.input.clone(),
voice: request
.voice
.clone()
.unwrap_or_else(|| DEFAULT_VOICE.to_string()),
}
}
pub fn parse_speech_response(data: Vec<u8>, mime_type: Option<String>) -> AudioResponse {
AudioResponse {
audio: AudioOutput {
data,
mime_type: mime_type.unwrap_or_else(|| DEFAULT_AUDIO_MIME_TYPE.to_string()),
},
meta: Meta::default(),
}
}
#[derive(Debug, Deserialize)]
pub struct TranscriptionApiResponse {
pub text: String,
}
pub fn parse_transcription_response(response: TranscriptionApiResponse) -> TranscriptionResponse {
TranscriptionResponse {
text: response.text,
meta: Meta::default(),
}
}