use crate::utils::error::gateway_error::{GatewayError, Result};
use tracing::info;
use super::types::{TranscriptionRequest, TranscriptionResponse};
pub struct TranscriptionService;
impl TranscriptionService {
pub fn new() -> Self {
Self
}
pub async fn transcribe(&self, request: TranscriptionRequest) -> Result<TranscriptionResponse> {
info!(
"Transcribing audio: model={}, file_size={}",
request.model,
request.file.len()
);
if request.file.len() > 25 * 1024 * 1024 {
return Err(GatewayError::validation("Audio file too large (max 25MB)"));
}
Err(GatewayError::not_implemented(format!(
"Audio transcription is not implemented for model {}",
request.model
)))
}
}
#[cfg_attr(not(test), allow(dead_code))]
pub(crate) fn parse_model_string(model: &str) -> (&str, &str) {
if let Some(idx) = model.find('/') {
let provider = &model[..idx];
let model_name = &model[idx + 1..];
(provider, model_name)
} else {
if model.starts_with("whisper") {
("groq", model) } else {
("openai", model)
}
}
}