use async_trait::async_trait;
use crate::types::{AgentError, AgentResult, SessionId};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum ToolErrorAction {
Stop,
Retry,
}
#[async_trait]
pub trait ToolErrorRecovery: Send + Sync {
async fn on_error(
&self,
_session_id: &SessionId,
_tool_names: &[String],
_error: &AgentError,
) -> AgentResult<ToolErrorAction>;
}
pub struct StopOnError;
#[async_trait]
impl ToolErrorRecovery for StopOnError {
async fn on_error(
&self,
_session_id: &SessionId,
_tool_names: &[String],
_error: &AgentError,
) -> AgentResult<ToolErrorAction> {
Ok(ToolErrorAction::Stop)
}
}
pub struct RetryOnError;
#[async_trait]
impl ToolErrorRecovery for RetryOnError {
async fn on_error(
&self,
_session_id: &SessionId,
_tool_names: &[String],
_error: &AgentError,
) -> AgentResult<ToolErrorAction> {
Ok(ToolErrorAction::Retry)
}
}