1use crate::{
8 completion::Usage,
9 http_client,
10 wasm_compat::{WasmCompatSend, WasmCompatSync},
11};
12use serde::{Deserialize, Serialize};
13
14#[derive(Debug, thiserror::Error)]
15pub enum RerankError {
16 #[error("HttpError: {0}")]
17 HttpError(#[from] http_client::Error),
18
19 #[error("JsonError: {0}")]
20 JsonError(#[from] serde_json::Error),
21
22 #[error("UrlError: {0}")]
23 UrlError(#[from] url::ParseError),
24
25 #[error("ResponseError: {0}")]
26 ResponseError(String),
27
28 #[error("ProviderError: {0}")]
29 ProviderError(String),
30}
31
32pub trait RerankModel: WasmCompatSend + WasmCompatSync {
34 const MAX_DOCUMENTS: usize;
36
37 type Client;
39
40 fn make(client: &Self::Client, model: impl Into<String>) -> Self;
42
43 fn rerank(
45 &self,
46 query: &str,
47 documents: Vec<String>,
48 ) -> impl std::future::Future<Output = Result<RerankResponse, RerankError>> + WasmCompatSend;
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct RerankResult {
54 pub index: usize,
56 pub document: Option<String>,
58 pub relevance_score: f64,
60}
61
62#[derive(Debug, Clone)]
64pub struct RerankResponse {
65 pub results: Vec<RerankResult>,
67 pub model: String,
69 pub usage: Usage,
71}