xz-rerank 0.1.1

检索结果重排序 — 本地多信号融合 + 远程 Rerank API 适配
Documentation
use std::fmt::Debug;

/// 重排序错误
#[derive(Debug, thiserror::Error)]
pub enum RerankError {
    /// 候选项列表为空,无法执行重排序
    #[error("候选项为空")]
    EmptyCandidates,

    /// 候选项数量超过限制
    #[error("候选项超限: {actual} > {limit}")]
    TooManyCandidates {
        /// 实际候选项数量
        actual: usize,
        /// 允许的最大候选项数量
        limit: usize,
    },

    /// 重排序引擎内部错误
    #[error("重排序引擎错误: {0}")]
    Engine(String),

    /// 信号计算过程中发生错误
    #[error("信号 '{0}' 错误: {1}")]
    SignalError(String, String),

    /// 配置参数无效
    #[error("配置错误: {0}")]
    Config(String),

    /// 远程 API 调用失败
    #[error("API 错误: {0}")]
    Api(String),

    /// 信号权重之和不为 1.0
    #[error("权重和不为 1.0: sum = {0}")]
    WeightSumInvalid(f32),

    /// 需要 query embedding 但未提供(vector_similarity 信号需要外部传入)
    #[error("缺少 query embedding(vector_similarity 信号需要外部传入)")]
    MissingQueryEmbedding,
}

impl RerankError {
    /// 判断错误是否可重试
    ///
    /// 返回 `true` 表示该错误为临时性错误(如 API 调用失败、引擎内部错误),
    /// 调用方可以安全地重试操作。返回 `false` 表示该错误不可恢复。
    pub fn is_retryable(&self) -> bool {
        matches!(self, RerankError::Api(_) | RerankError::Engine(_))
    }
}