synwire_core/agents/
error.rs1use thiserror::Error;
4
5#[derive(Error, Debug, Clone)]
7#[non_exhaustive]
8pub enum AgentError {
9 #[error("Model error: {0}")]
11 Model(#[from] ModelError),
12
13 #[error("Tool error: {0}")]
15 Tool(String),
16
17 #[error("Strategy error: {0}")]
19 Strategy(String),
20
21 #[error("Middleware error: {0}")]
23 Middleware(String),
24
25 #[error("Directive error: {0}")]
27 Directive(String),
28
29 #[error("VFS error: {0}")]
31 Vfs(String),
32
33 #[error("Session error: {0}")]
35 Session(String),
36
37 #[error("Panic: {0}")]
39 Panic(String),
40
41 #[error("Budget exceeded: ${0:.2}")]
43 BudgetExceeded(f64),
44}
45
46#[derive(Error, Debug, Clone)]
48#[non_exhaustive]
49pub enum ModelError {
50 #[error("Authentication failed: {0}")]
52 Authentication(String),
53
54 #[error("Billing error: {0}")]
56 Billing(String),
57
58 #[error("Rate limited: {0}")]
60 RateLimit(String),
61
62 #[error("Server error: {0}")]
64 ServerError(String),
65
66 #[error("Invalid request: {0}")]
68 InvalidRequest(String),
69
70 #[error("Max output tokens exceeded")]
72 MaxOutputTokens,
73}
74
75impl ModelError {
76 #[must_use]
78 pub const fn is_retryable(&self) -> bool {
79 matches!(self, Self::RateLimit(_) | Self::ServerError(_))
80 }
81}