use super::BoxFuture;
use super::ModelRef;
use super::model_ref::ref_conversions;
use crate::error::ProviderError;
use crate::reranking_model::RerankOptions;
use crate::reranking_model::RerankResult;
use crate::reranking_model::RerankingModel;
use crate::shared::ModelId;
use crate::shared::ProviderId;
pub trait DynRerankingModel: Send + Sync + 'static {
fn provider(&self) -> &ProviderId;
fn model_id(&self) -> &ModelId;
fn do_rerank(
&self,
options: RerankOptions,
) -> BoxFuture<'_, Result<RerankResult, ProviderError>>;
}
impl<T: RerankingModel> DynRerankingModel for T {
fn provider(&self) -> &ProviderId {
RerankingModel::provider(self)
}
fn model_id(&self) -> &ModelId {
RerankingModel::model_id(self)
}
fn do_rerank(
&self,
options: RerankOptions,
) -> BoxFuture<'_, Result<RerankResult, ProviderError>> {
Box::pin(RerankingModel::do_rerank(self, options))
}
}
pub type RerankingModelRef = ModelRef<dyn DynRerankingModel>;
ref_conversions!(RerankingModelRef, RerankingModel, DynRerankingModel);