Skip to main content

ferrin_spec/dynamic/
speech_translation_model.rs

1//! Object-safe speech translation model.
2
3use super::BoxFuture;
4use super::ModelRef;
5use super::model_ref::ref_conversions;
6use crate::error::ProviderError;
7use crate::shared::ModelId;
8use crate::shared::ProviderId;
9use crate::speech_translation_model::SpeechTranslationModel;
10use crate::speech_translation_model::SpeechTranslationStreamOptions;
11use crate::speech_translation_model::SpeechTranslationStreamResult;
12
13/// Object-safe counterpart of [`SpeechTranslationModel`].
14pub trait DynSpeechTranslationModel: Send + Sync + 'static {
15    /// See [`SpeechTranslationModel::provider`].
16    fn provider(&self) -> &ProviderId;
17    /// See [`SpeechTranslationModel::model_id`].
18    fn model_id(&self) -> &ModelId;
19    /// See [`SpeechTranslationModel::do_stream`].
20    fn do_stream(
21        &self,
22        options: SpeechTranslationStreamOptions,
23    ) -> BoxFuture<'_, Result<SpeechTranslationStreamResult, ProviderError>>;
24}
25
26impl<T: SpeechTranslationModel> DynSpeechTranslationModel for T {
27    fn provider(&self) -> &ProviderId {
28        SpeechTranslationModel::provider(self)
29    }
30
31    fn model_id(&self) -> &ModelId {
32        SpeechTranslationModel::model_id(self)
33    }
34
35    fn do_stream(
36        &self,
37        options: SpeechTranslationStreamOptions,
38    ) -> BoxFuture<'_, Result<SpeechTranslationStreamResult, ProviderError>> {
39        Box::pin(SpeechTranslationModel::do_stream(self, options))
40    }
41}
42
43/// Shared reference to a speech translation model (or an unresolved model id).
44pub type SpeechTranslationModelRef = ModelRef<dyn DynSpeechTranslationModel>;
45
46ref_conversions!(
47    SpeechTranslationModelRef,
48    SpeechTranslationModel,
49    DynSpeechTranslationModel
50);