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<M, T> TranscriptionClientDyn for T
35where
36 T: TranscriptionClient<TranscriptionModel = M>,
37 M: TranscriptionModel + 'static,
38{
39 fn transcription_model<'a>(&self, model: &str) -> Box<dyn TranscriptionModelDyn + 'a> {
40 Box::new(self.transcription_model(model))
41 }
42}
43
44impl<T> AsTranscription for T
45where
46 T: TranscriptionClientDyn + Clone + 'static,
47{
48 fn as_transcription(&self) -> Option<Box<dyn TranscriptionClientDyn>> {
49 Some(Box::new(self.clone()))
50 }
51}
52
53#[derive(Clone)]
55pub struct TranscriptionModelHandle<'a> {
56 pub inner: Arc<dyn TranscriptionModelDyn + 'a>,
57}
58
59impl TranscriptionModel for TranscriptionModelHandle<'_> {
60 type Response = ();
61
62 async fn transcription(
63 &self,
64 request: TranscriptionRequest,
65 ) -> Result<TranscriptionResponse<Self::Response>, TranscriptionError> {
66 self.inner.transcription(request).await
67 }
68}