Skip to main content

sz_orm_ai/
error.rs

1use thiserror::Error;
2
3/// AI 模块统一错误类型
4///
5/// 保留原有变体(Embedding / Vector / RAG / Config / ModelNotFound / NotSupported)
6/// 以维持向后兼容,并新增用于真实 HTTP API 调用的变体:
7/// - `ApiError`:HTTP 非 2xx 响应(状态码 + 错误消息)
8/// - `NetworkError`:网络层错误(连接失败 / DNS / 超时等)
9/// - `ConfigError`:配置错误(例如 API key 缺失)
10#[derive(Debug, Error)]
11pub enum AiError {
12    #[error("Embedding error: {0}")]
13    Embedding(String),
14
15    #[error("Vector store error: {0}")]
16    Vector(String),
17
18    #[error("RAG error: {0}")]
19    RAG(String),
20
21    #[error("Config error: {0}")]
22    Config(String),
23
24    #[error("Model not found: {0}")]
25    ModelNotFound(String),
26
27    #[error("Not supported: {0}")]
28    NotSupported(String),
29
30    /// HTTP 非 2xx 响应(状态码 + 错误消息)
31    #[error("API error (status {0}): {1}")]
32    ApiError(u16, String),
33
34    /// 网络层错误(连接失败 / DNS / 超时等)
35    #[error("Network error: {0}")]
36    NetworkError(String),
37
38    /// 配置错误(例如 API key 缺失、参数非法)
39    #[error("Config error: {0}")]
40    ConfigError(String),
41}
42
43impl From<std::io::Error> for AiError {
44    fn from(err: std::io::Error) -> Self {
45        AiError::Config(err.to_string())
46    }
47}
48
49impl From<serde_json::Error> for AiError {
50    fn from(err: serde_json::Error) -> Self {
51        AiError::Config(err.to_string())
52    }
53}