1use std::fmt::Debug;
2
3#[derive(Debug, thiserror::Error)]
5pub enum RerankError {
6 #[error("候选项为空")]
8 EmptyCandidates,
9
10 #[error("候选项超限: {actual} > {limit}")]
12 TooManyCandidates {
13 actual: usize,
15 limit: usize,
17 },
18
19 #[error("重排序引擎错误: {0}")]
21 Engine(String),
22
23 #[error("信号 '{0}' 错误: {1}")]
25 SignalError(String, String),
26
27 #[error("配置错误: {0}")]
29 Config(String),
30
31 #[error("API 错误: {0}")]
33 Api(String),
34
35 #[error("权重和不为 1.0: sum = {0}")]
37 WeightSumInvalid(f32),
38
39 #[error("缺少 query embedding(vector_similarity 信号需要外部传入)")]
41 MissingQueryEmbedding,
42}
43
44impl RerankError {
45 pub fn is_retryable(&self) -> bool {
50 matches!(self, RerankError::Api(_) | RerankError::Engine(_))
51 }
52}