Skip to main content

openrouter/types/
rerank.rs

1//! Types for the rerank endpoint (`POST /rerank`).
2//!
3//! Shapes mirror the Go SDK (`rerank_models.go`).
4
5use serde::{Deserialize, Serialize};
6
7use super::common::Provider;
8
9/// Request body for [`crate::Client::rerank`].
10#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
11pub struct RerankRequest {
12    /// Rerank model identifier (e.g. `cohere/rerank-v3.5`).
13    pub model: String,
14    /// Search query used to rank `documents`.
15    pub query: String,
16    /// Candidate documents to rerank.
17    pub documents: Vec<String>,
18    /// Return only the top `top_n` documents.
19    #[serde(skip_serializing_if = "Option::is_none", default)]
20    pub top_n: Option<u32>,
21    /// Provider routing parameters (shared with chat/completions).
22    #[serde(skip_serializing_if = "Option::is_none", default)]
23    pub provider: Option<Provider>,
24}
25
26/// Response body from `/rerank`.
27#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
28pub struct RerankResponse {
29    /// Unique identifier for the response (ORID format).
30    #[serde(default)]
31    pub id: String,
32    /// Model that served the request.
33    #[serde(default)]
34    pub model: String,
35    /// Provider that served the request.
36    #[serde(default)]
37    pub provider: String,
38    /// Ranked results, ordered by descending relevance.
39    #[serde(default)]
40    pub results: Vec<RerankResult>,
41    /// Usage statistics (when reported by the provider).
42    #[serde(default)]
43    pub usage: Option<RerankUsage>,
44}
45
46/// A single ranked result.
47#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
48pub struct RerankResult {
49    /// Index of the document in the original `documents` array.
50    #[serde(default)]
51    pub index: u32,
52    /// Relevance score (provider-defined scale).
53    #[serde(default)]
54    pub relevance_score: f64,
55    /// Echoed document text.
56    #[serde(default)]
57    pub document: RerankDocument,
58}
59
60/// The echoed document text inside a [`RerankResult`].
61#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
62pub struct RerankDocument {
63    /// Echoed document text.
64    #[serde(default)]
65    pub text: String,
66}
67
68/// Usage statistics for a rerank request.
69#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
70pub struct RerankUsage {
71    /// Total tokens consumed across query + documents.
72    #[serde(default)]
73    pub total_tokens: u64,
74    /// Cohere-style billing unit (per-document cost).
75    #[serde(default)]
76    pub search_units: u64,
77    /// Cost in credits.
78    #[serde(default)]
79    pub cost: Option<f64>,
80}