use crate::{
completion::Usage,
http_client, provider_response,
wasm_compat::{WasmCompatSend, WasmCompatSync},
};
use serde::{Deserialize, Serialize};
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum RerankError {
#[error("HttpError: {0}")]
HttpError(#[from] http_client::Error),
#[error("JsonError: {0}")]
JsonError(#[from] serde_json::Error),
#[error("UrlError: {0}")]
UrlError(#[from] url::ParseError),
#[error("ResponseError: {0}")]
ResponseError(String),
#[error("ProviderError: {0}")]
ProviderError(String),
#[error("ProviderResponseError: {0}")]
ProviderResponse(provider_response::ProviderResponseError),
}
crate::provider_response::impl_provider_response_helpers!(RerankError);
pub trait RerankModel: WasmCompatSend + WasmCompatSync {
const MAX_DOCUMENTS: usize;
type Client;
fn make(client: &Self::Client, model: impl Into<String>) -> Self;
fn rerank(
&self,
query: &str,
documents: Vec<String>,
) -> impl std::future::Future<Output = Result<RerankResponse, RerankError>> + WasmCompatSend;
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RerankResult {
pub index: usize,
pub document: Option<String>,
pub relevance_score: f64,
}
#[derive(Debug, Clone)]
pub struct RerankResponse {
pub results: Vec<RerankResult>,
pub model: String,
pub usage: Usage,
}