Skip to main content

xz_rerank/
error.rs

1use std::fmt::Debug;
2
3/// 重排序错误
4#[derive(Debug, thiserror::Error)]
5pub enum RerankError {
6    /// 候选项列表为空,无法执行重排序
7    #[error("候选项为空")]
8    EmptyCandidates,
9
10    /// 候选项数量超过限制
11    #[error("候选项超限: {actual} > {limit}")]
12    TooManyCandidates {
13        /// 实际候选项数量
14        actual: usize,
15        /// 允许的最大候选项数量
16        limit: usize,
17    },
18
19    /// 重排序引擎内部错误
20    #[error("重排序引擎错误: {0}")]
21    Engine(String),
22
23    /// 信号计算过程中发生错误
24    #[error("信号 '{0}' 错误: {1}")]
25    SignalError(String, String),
26
27    /// 配置参数无效
28    #[error("配置错误: {0}")]
29    Config(String),
30
31    /// 远程 API 调用失败
32    #[error("API 错误: {0}")]
33    Api(String),
34
35    /// 信号权重之和不为 1.0
36    #[error("权重和不为 1.0: sum = {0}")]
37    WeightSumInvalid(f32),
38
39    /// 需要 query embedding 但未提供(vector_similarity 信号需要外部传入)
40    #[error("缺少 query embedding(vector_similarity 信号需要外部传入)")]
41    MissingQueryEmbedding,
42}
43
44impl RerankError {
45    /// 判断错误是否可重试
46    ///
47    /// 返回 `true` 表示该错误为临时性错误(如 API 调用失败、引擎内部错误),
48    /// 调用方可以安全地重试操作。返回 `false` 表示该错误不可恢复。
49    pub fn is_retryable(&self) -> bool {
50        matches!(self, RerankError::Api(_) | RerankError::Engine(_))
51    }
52}