Skip to main content

smos_application/errors/
provider_error.rs

1//! Provider-layer errors.
2//!
3//! Returned by ML model adapters (embedding, rerank, NLI). These errors model
4//! flaky external services: `Unavailable` is a connection issue, `Timeout` is
5//! a slow response, `InvalidResponse` is a malformed payload.
6
7use std::time::Duration;
8use thiserror::Error;
9
10/// Errors returned by ML-provider adapters.
11#[derive(Debug, Error)]
12pub enum ProviderError {
13    #[error("provider unavailable: {0}")]
14    Unavailable(String),
15
16    #[error("provider timeout after {0:?}")]
17    Timeout(Duration),
18
19    #[error("provider request failed: {0}")]
20    RequestFailed(String),
21
22    #[error("provider response invalid: {0}")]
23    InvalidResponse(String),
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[test]
31    fn timeout_display_includes_duration() {
32        let e = ProviderError::Timeout(Duration::from_millis(750));
33        assert!(e.to_string().contains("750ms"));
34    }
35
36    #[test]
37    fn unavailable_display_includes_message() {
38        let e = ProviderError::Unavailable("connection refused".into());
39        assert!(e.to_string().contains("connection refused"));
40    }
41}