ferrin_spec/dynamic/
reranking_model.rs1use super::BoxFuture;
4use super::ModelRef;
5use super::model_ref::ref_conversions;
6use crate::error::ProviderError;
7use crate::reranking_model::RerankOptions;
8use crate::reranking_model::RerankResult;
9use crate::reranking_model::RerankingModel;
10use crate::shared::ModelId;
11use crate::shared::ProviderId;
12
13pub trait DynRerankingModel: Send + Sync + 'static {
15 fn provider(&self) -> &ProviderId;
17 fn model_id(&self) -> &ModelId;
19 fn do_rerank(
21 &self,
22 options: RerankOptions,
23 ) -> BoxFuture<'_, Result<RerankResult, ProviderError>>;
24}
25
26impl<T: RerankingModel> DynRerankingModel for T {
27 fn provider(&self) -> &ProviderId {
28 RerankingModel::provider(self)
29 }
30
31 fn model_id(&self) -> &ModelId {
32 RerankingModel::model_id(self)
33 }
34
35 fn do_rerank(
36 &self,
37 options: RerankOptions,
38 ) -> BoxFuture<'_, Result<RerankResult, ProviderError>> {
39 Box::pin(RerankingModel::do_rerank(self, options))
40 }
41}
42
43pub type RerankingModelRef = ModelRef<dyn DynRerankingModel>;
45
46ref_conversions!(RerankingModelRef, RerankingModel, DynRerankingModel);