rig/client/
transcription.rs1use crate::client::{AsTranscription, ProviderClient};
2use crate::transcription::{
3 TranscriptionError, TranscriptionModel, TranscriptionModelDyn, TranscriptionRequest,
4 TranscriptionResponse,
5};
6use std::sync::Arc;
7
8pub trait TranscriptionClient: ProviderClient + Clone {
11 type TranscriptionModel: TranscriptionModel;
13
14 fn transcription_model(&self, model: &str) -> Self::TranscriptionModel;
27}
28
29pub trait TranscriptionClientDyn: ProviderClient {
30 fn transcription_model<'a>(&self, model: &str) -> Box<dyn TranscriptionModelDyn + 'a>;
32}
33
34impl<T: TranscriptionClient<TranscriptionModel = M>, M: TranscriptionModel + 'static>
35 TranscriptionClientDyn for T
36{
37 fn transcription_model<'a>(&self, model: &str) -> Box<dyn TranscriptionModelDyn + 'a> {
38 Box::new(self.transcription_model(model))
39 }
40}
41
42impl<T: TranscriptionClientDyn + Clone + 'static> AsTranscription for T {
43 fn as_transcription(&self) -> Option<Box<dyn TranscriptionClientDyn>> {
44 Some(Box::new(self.clone()))
45 }
46}
47
48#[derive(Clone)]
50pub struct TranscriptionModelHandle<'a> {
51 pub inner: Arc<dyn TranscriptionModelDyn + 'a>,
52}
53
54impl TranscriptionModel for TranscriptionModelHandle<'_> {
55 type Response = ();
56
57 async fn transcription(
58 &self,
59 request: TranscriptionRequest,
60 ) -> Result<TranscriptionResponse<Self::Response>, TranscriptionError> {
61 self.inner.transcription(request).await
62 }
63}