#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum AgentError {
#[error("{0}")]
Runtime(String),
#[error("Maximum steps ({max_steps}) reached without final answer")]
MaxSteps {
max_steps: usize,
},
#[error("Input guardrail '{name}' tripwire triggered")]
InputGuardrailTriggered {
name: String,
info: serde_json::Value,
},
#[error("Output guardrail '{name}' tripwire triggered")]
OutputGuardrailTriggered {
name: String,
info: serde_json::Value,
},
}
impl AgentError {
#[must_use]
pub fn runtime(msg: impl Into<String>) -> Self {
Self::Runtime(msg.into())
}
#[must_use]
pub const fn max_steps(max_steps: usize) -> Self {
Self::MaxSteps { max_steps }
}
#[must_use]
pub fn input_guardrail_triggered(name: impl Into<String>, info: serde_json::Value) -> Self {
Self::InputGuardrailTriggered {
name: name.into(),
info,
}
}
#[must_use]
pub fn output_guardrail_triggered(name: impl Into<String>, info: serde_json::Value) -> Self {
Self::OutputGuardrailTriggered {
name: name.into(),
info,
}
}
}