use crate::audio::AudioFormat;
use crate::config::RealtimeConfig;
use crate::error::Result;
use crate::session::BoxedSession;
use async_trait::async_trait;
#[async_trait]
pub trait RealtimeModel: Send + Sync {
fn provider(&self) -> &str;
fn model_id(&self) -> &str;
fn supports_realtime(&self) -> bool {
true
}
fn supported_input_formats(&self) -> Vec<AudioFormat>;
fn supported_output_formats(&self) -> Vec<AudioFormat>;
fn available_voices(&self) -> Vec<&str>;
async fn connect(&self, config: RealtimeConfig) -> Result<BoxedSession>;
}
pub type BoxedModel = std::sync::Arc<dyn RealtimeModel>;