1use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum FrameworkError {
8 #[error("Configuration error: {0}")]
10 Config(String),
11
12 #[error("Provider error: {0}")]
14 Provider(String),
15
16 #[error("Provider authentication failed for {provider}: {message}")]
18 ProviderAuth {
19 provider: String,
21 message: String,
23 },
24
25 #[error("Provider model error ({provider}/{model}): {message}")]
27 ProviderModel {
28 provider: String,
30 model: String,
32 message: String,
34 },
35
36 #[error("Embedding dimension mismatch: expected {expected}, got {got}")]
38 EmbeddingDimension {
39 expected: usize,
41 got: usize,
43 },
44
45 #[error("Tool execution error: {0}")]
47 ToolExecution(String),
48
49 #[error("Agent error: {0}")]
51 Agent(String),
52
53 #[error("Storage error: {0}")]
55 Storage(String),
56
57 #[error("Storage schema error in {store}: {message}")]
59 StorageSchema {
60 store: String,
62 message: String,
64 },
65
66 #[error("Training configuration error for {parameter}: {message}")]
68 TrainingConfig {
69 parameter: String,
71 message: String,
73 },
74
75 #[error("Permission denied: {0}")]
77 PermissionDenied(String),
78
79 #[error("Serialization error: {0}")]
81 Serialization(#[from] serde_json::Error),
82
83 #[error("{0}")]
85 Other(#[from] anyhow::Error),
86}
87
88impl FrameworkError {
89 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 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 pub fn embedding_dimension(expected: usize, got: usize) -> Self {
112 Self::EmbeddingDimension { expected, got }
113 }
114
115 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 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
132pub type FrameworkResult<T> = Result<T, FrameworkError>;