use crate::client::Client;
use crate::error::Result;
use crate::types::{RerankDocument, RerankResponse};
use serde::Serialize;
pub struct Models<'a> {
client: &'a Client,
}
impl<'a> Models<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub async fn rerank(
&self,
query: impl Into<String>,
documents: Vec<RerankDocument>,
model_id: Option<String>,
top_k: Option<u32>,
) -> Result<RerankResponse> {
#[derive(Serialize)]
struct Request {
query: String,
documents: Vec<RerankDocument>,
#[serde(skip_serializing_if = "Option::is_none")]
model_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
top_k: Option<u32>,
}
let body = Request {
query: query.into(),
documents,
model_id,
top_k,
};
self.client.post("/models/rerank", &body).await
}
}