reflex/embedding/reranker/
error.rs

1use std::path::PathBuf;
2use thiserror::Error;
3
4use crate::embedding::error::EmbeddingError;
5
6#[derive(Debug, Error)]
7/// Errors returned by reranker load/scoring.
8pub enum RerankerError {
9    /// Model files were not found.
10    #[error("reranker model not found at path: {path}")]
11    ModelNotFound {
12        /// Missing model path.
13        path: PathBuf,
14    },
15
16    /// Model load failed.
17    #[error("failed to load reranker model: {reason}")]
18    ModelLoadFailed {
19        /// Error message.
20        reason: String,
21    },
22
23    /// Requested compute device is unavailable.
24    #[error("{device} device unavailable: {reason}")]
25    DeviceUnavailable {
26        /// Device name (e.g. "cuda", "metal").
27        device: String,
28        /// Error message.
29        reason: String,
30    },
31
32    /// Inference failed.
33    #[error("reranker inference failed: {reason}")]
34    InferenceFailed {
35        /// Error message.
36        reason: String,
37    },
38
39    /// Tokenization failed.
40    #[error("tokenization failed: {reason}")]
41    TokenizationFailed {
42        /// Error message.
43        reason: String,
44    },
45
46    /// Configuration is invalid.
47    #[error("invalid reranker configuration: {reason}")]
48    InvalidConfig {
49        /// Error message.
50        reason: String,
51    },
52
53    /// Operation requires a model but none is configured/loaded.
54    #[error("reranker not available: {reason}")]
55    NotAvailable {
56        /// Error message.
57        reason: String,
58    },
59}
60
61impl From<candle_core::Error> for RerankerError {
62    fn from(err: candle_core::Error) -> Self {
63        RerankerError::InferenceFailed {
64            reason: err.to_string(),
65        }
66    }
67}
68
69impl From<std::io::Error> for RerankerError {
70    fn from(err: std::io::Error) -> Self {
71        RerankerError::ModelLoadFailed {
72            reason: err.to_string(),
73        }
74    }
75}
76
77impl From<EmbeddingError> for RerankerError {
78    fn from(err: EmbeddingError) -> Self {
79        match err {
80            EmbeddingError::DeviceUnavailable { device, reason } => {
81                RerankerError::DeviceUnavailable { device, reason }
82            }
83            _ => RerankerError::InferenceFailed {
84                reason: err.to_string(),
85            },
86        }
87    }
88}