use std::sync::Arc;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use crate::audio::AudioInput;
use crate::capabilities::Capabilities;
use crate::error::Result;
use crate::kinds::{BackendKind, TransportKind};
use crate::stream::{StreamOptions, StreamingSession};
use crate::transcript::Transcript;
#[derive(Debug, Clone, Default)]
pub struct TranscribeOptions {
pub language: Option<String>,
pub model: Option<String>,
pub diarize: bool,
pub punctuation: bool,
pub profanity_filter: bool,
pub keywords: Vec<String>,
pub initial_prompt: Option<String>,
pub extra: Option<serde_json::Value>,
}
#[async_trait]
pub trait SpeechToText: Send + Sync + 'static {
fn capabilities(&self) -> &'static Capabilities;
fn backend_kind(&self) -> BackendKind;
fn transport_kind(&self) -> TransportKind;
async fn transcribe(&self, input: AudioInput, opts: TranscribeOptions) -> Result<Transcript>;
async fn open_stream(&self, opts: StreamOptions) -> Result<Box<dyn StreamingSession>>;
}
pub type DynSpeechToText = Arc<dyn SpeechToText>;
#[allow(dead_code)]
#[derive(Serialize, Deserialize)]
struct _SerdeAnchor;