use async_trait::async_trait;
use super::eval_case::Invocation;
use super::eval_result::EvalResult;
#[derive(Debug, thiserror::Error)]
pub enum EvalError {
#[error("Evaluation error: {0}")]
Evaluation(String),
#[error("LLM error: {0}")]
Llm(String),
#[error("Invalid input: {0}")]
InvalidInput(String),
#[error("IO error: {0}")]
Io(String),
#[error("Parse error: {0}")]
Parse(String),
}
#[async_trait]
pub trait Evaluator: Send + Sync {
async fn evaluate(
&self,
actual: &[Invocation],
expected: Option<&[Invocation]>,
) -> Result<EvalResult, EvalError>;
}
#[cfg(test)]
mod tests {
use super::*;
fn _assert_object_safe(_: &dyn Evaluator) {}
#[test]
fn evaluator_is_object_safe() {
}
#[test]
fn eval_error_display() {
let err = EvalError::Evaluation("test".into());
assert!(err.to_string().contains("test"));
}
}