//! Speech-to-text provider trait.
//!
//! Mirrors [`crate::tts::Speaker`] — each provider implements
//! [`SttProvider::transcribe`] and the listeners consume the trait object
//! rather than calling a concrete module.
use crate::Result;
use async_trait::async_trait;
/// A speech-to-text provider.
///
/// Implementations are stateless from the caller's perspective — each call is
/// independent. Concrete impls hold provider credentials and configuration in
/// the constructor.
#[async_trait]
pub trait SttProvider: Send + Sync {
/// Transcribe a buffer of f32 PCM samples (mono, in `[-1.0, 1.0]`).
///
/// Returns the trimmed transcript text, or an empty string if no speech
/// was detected.
async fn transcribe(&self, samples: &[f32], sample_rate: u32) -> Result<String>;
}