Skip to main content

brainwires_core/
error.rs

1//! Framework error types
2
3use thiserror::Error;
4
5/// Core framework errors
6#[derive(Error, Debug)]
7pub enum FrameworkError {
8    /// Configuration error.
9    #[error("Configuration error: {0}")]
10    Config(String),
11
12    /// Provider error.
13    #[error("Provider error: {0}")]
14    Provider(String),
15
16    /// Provider authentication failure.
17    #[error("Provider authentication failed for {provider}: {message}")]
18    ProviderAuth {
19        /// Provider name that failed authentication.
20        provider: String,
21        /// Detailed error message.
22        message: String,
23    },
24
25    /// Provider model error.
26    #[error("Provider model error ({provider}/{model}): {message}")]
27    ProviderModel {
28        /// Provider name.
29        provider: String,
30        /// Model identifier.
31        model: String,
32        /// Detailed error message.
33        message: String,
34    },
35
36    /// Embedding dimension mismatch between expected and actual vectors.
37    #[error("Embedding dimension mismatch: expected {expected}, got {got}")]
38    EmbeddingDimension {
39        /// Expected dimension count.
40        expected: usize,
41        /// Actual dimension count received.
42        got: usize,
43    },
44
45    /// Tool execution error.
46    #[error("Tool execution error: {0}")]
47    ToolExecution(String),
48
49    /// Agent error.
50    #[error("Agent error: {0}")]
51    Agent(String),
52
53    /// Storage error.
54    #[error("Storage error: {0}")]
55    Storage(String),
56
57    /// Storage schema mismatch or migration error.
58    #[error("Storage schema error in {store}: {message}")]
59    StorageSchema {
60        /// Name of the storage store.
61        store: String,
62        /// Detailed error message.
63        message: String,
64    },
65
66    /// Training configuration error.
67    #[error("Training configuration error for {parameter}: {message}")]
68    TrainingConfig {
69        /// Parameter name that is invalid.
70        parameter: String,
71        /// Detailed error message.
72        message: String,
73    },
74
75    /// Permission denied error.
76    #[error("Permission denied: {0}")]
77    PermissionDenied(String),
78
79    /// JSON serialization/deserialization error.
80    #[error("Serialization error: {0}")]
81    Serialization(#[from] serde_json::Error),
82
83    /// Catch-all for other errors.
84    #[error("{0}")]
85    Other(#[from] anyhow::Error),
86}
87
88impl FrameworkError {
89    /// Create a provider authentication error
90    pub fn provider_auth(provider: impl Into<String>, message: impl Into<String>) -> Self {
91        Self::ProviderAuth {
92            provider: provider.into(),
93            message: message.into(),
94        }
95    }
96
97    /// Create a provider model error
98    pub fn provider_model(
99        provider: impl Into<String>,
100        model: impl Into<String>,
101        message: impl Into<String>,
102    ) -> Self {
103        Self::ProviderModel {
104            provider: provider.into(),
105            model: model.into(),
106            message: message.into(),
107        }
108    }
109
110    /// Create an embedding dimension mismatch error
111    pub fn embedding_dimension(expected: usize, got: usize) -> Self {
112        Self::EmbeddingDimension { expected, got }
113    }
114
115    /// Create a storage schema error
116    pub fn storage_schema(store: impl Into<String>, message: impl Into<String>) -> Self {
117        Self::StorageSchema {
118            store: store.into(),
119            message: message.into(),
120        }
121    }
122
123    /// Create a training configuration error
124    pub fn training_config(parameter: impl Into<String>, message: impl Into<String>) -> Self {
125        Self::TrainingConfig {
126            parameter: parameter.into(),
127            message: message.into(),
128        }
129    }
130}
131
132/// Result type alias using FrameworkError
133pub type FrameworkResult<T> = Result<T, FrameworkError>;