#![allow(dead_code)]
use async_trait::async_trait;
use euhadra::prelude::*;
use std::time::Duration;
use tokio::sync::mpsc;
pub fn silence_chunk() -> AudioChunk {
AudioChunk {
samples: vec![0.0; 160],
sample_rate: 16000,
channels: 1,
}
}
pub async fn send_one(audio: &mpsc::Sender<AudioChunk>) {
audio.send(silence_chunk()).await.unwrap();
}
pub struct SilentAsr;
#[async_trait]
impl AsrAdapter for SilentAsr {
async fn transcribe(&self, _audio: &[AudioChunk]) -> Result<Transcript, AsrError> {
Ok(Transcript::default())
}
}
pub struct SlowRefiner {
pub delay: Duration,
}
#[async_trait]
impl LlmRefiner for SlowRefiner {
async fn refine(&self, input: RefinementInput) -> Result<RefinementOutput, RefineError> {
tokio::time::sleep(self.delay).await;
Ok(RefinementOutput::TextInsertion {
text: input.raw_text,
formatting: None,
})
}
}
pub struct SlowContextProvider {
pub delay: Duration,
}
#[async_trait]
impl ContextProvider for SlowContextProvider {
async fn get_context(&self) -> ContextSnapshot {
tokio::time::sleep(self.delay).await;
ContextSnapshot::default()
}
}