gemini_adk_rs/evaluation/
evaluator.rs1use async_trait::async_trait;
4
5use super::eval_case::Invocation;
6use super::eval_result::EvalResult;
7
8#[derive(Debug, thiserror::Error)]
10pub enum EvalError {
11 #[error("Evaluation error: {0}")]
13 Evaluation(String),
14 #[error("LLM error: {0}")]
16 Llm(String),
17 #[error("Invalid input: {0}")]
19 InvalidInput(String),
20 #[error("IO error: {0}")]
22 Io(String),
23 #[error("Parse error: {0}")]
25 Parse(String),
26}
27
28#[async_trait]
32pub trait Evaluator: Send + Sync {
33 async fn evaluate(
42 &self,
43 actual: &[Invocation],
44 expected: Option<&[Invocation]>,
45 ) -> Result<EvalResult, EvalError>;
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 fn _assert_object_safe(_: &dyn Evaluator) {}
53
54 #[test]
55 fn evaluator_is_object_safe() {
56 }
58
59 #[test]
60 fn eval_error_display() {
61 let err = EvalError::Evaluation("test".into());
62 assert!(err.to_string().contains("test"));
63 }
64}