scouter_evaluate/tasks/
traits.rs

1use crate::error::EvaluationError;
2
3use scouter_types::genai::{traits::TaskRef, AssertionResult};
4use serde_json::Value;
5use std::fmt::Debug;
6
7pub trait EvaluationTask: Debug + Send + Sync {
8    /// Execute the task and return results
9    /// # Arguments
10    /// * `context` - The evaluation context containing necessary data
11    /// # Returns
12    /// An EvaluationTaskResult containing the outcome of the task
13    fn execute(&self, context: &Value) -> Result<AssertionResult, EvaluationError>;
14}
15
16/// Helper for mutably evaluation tasks for different task types
17pub trait EvaluateTaskMut {
18    fn evaluate_task(&self, context: &Value) -> Result<AssertionResult, EvaluationError>;
19}
20
21impl EvaluateTaskMut for TaskRef<'_> {
22    fn evaluate_task(&self, context: &Value) -> Result<AssertionResult, EvaluationError> {
23        let result = match self {
24            TaskRef::Assertion(assertion) => assertion.execute(context)?,
25            TaskRef::LLMJudge(judge) => judge.execute(context)?,
26        };
27        Ok(result)
28    }
29}