use thiserror::Error;
#[derive(Debug, Error)]
#[error("{message}")]
pub struct NonRetryableLlmError {
message: String,
}
impl NonRetryableLlmError {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
}
}
}
pub(crate) fn non_retryable_llm_error_message(error: &anyhow::Error) -> Option<&str> {
error
.downcast_ref::<NonRetryableLlmError>()
.map(|error| error.message.as_str())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn marker_survives_anyhow_context() {
let error = anyhow::Error::new(NonRetryableLlmError::new("quota exhausted"))
.context("LLM call failed");
assert_eq!(
non_retryable_llm_error_message(&error),
Some("quota exhausted")
);
}
}