agent_base/engine/
recovery.rs1use async_trait::async_trait;
2
3use crate::types::{AgentError, AgentResult, SessionId};
4
5#[derive(Clone, Debug, PartialEq, Eq)]
7pub enum ToolErrorAction {
8 Stop,
10 Retry,
12}
13
14#[async_trait]
20pub trait ToolErrorRecovery: Send + Sync {
21 async fn on_error(
22 &self,
23 _session_id: &SessionId,
24 _tool_names: &[String],
25 _error: &AgentError,
26 ) -> AgentResult<ToolErrorAction>;
27}
28
29pub struct StopOnError;
34
35#[async_trait]
36impl ToolErrorRecovery for StopOnError {
37 async fn on_error(
38 &self,
39 _session_id: &SessionId,
40 _tool_names: &[String],
41 _error: &AgentError,
42 ) -> AgentResult<ToolErrorAction> {
43 Ok(ToolErrorAction::Stop)
44 }
45}
46
47pub struct RetryOnError;
51
52#[async_trait]
53impl ToolErrorRecovery for RetryOnError {
54 async fn on_error(
55 &self,
56 _session_id: &SessionId,
57 _tool_names: &[String],
58 _error: &AgentError,
59 ) -> AgentResult<ToolErrorAction> {
60 Ok(ToolErrorAction::Retry)
61 }
62}