use serde::{Deserialize, Serialize};
use super::agent::AgentAssertionTask;
use super::assertion::AssertionTask;
use super::condition::EvalCondition;
use super::ids::TaskId;
use super::llm_judge::LlmJudgeTask;
use super::trace::TraceAssertionTask;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)]
pub enum EvalTask {
Assertion(AssertionTask),
LlmJudge(LlmJudgeTask),
TraceAssertion(TraceAssertionTask),
AgentAssertion(AgentAssertionTask),
}
impl EvalTask {
#[must_use]
pub fn id(&self) -> &TaskId {
match self {
EvalTask::Assertion(task) => &task.id,
EvalTask::LlmJudge(task) => &task.id,
EvalTask::TraceAssertion(task) => &task.id,
EvalTask::AgentAssertion(task) => &task.id,
}
}
#[must_use]
pub fn depends_on(&self) -> &[TaskId] {
match self {
EvalTask::Assertion(task) => &task.depends_on,
EvalTask::LlmJudge(task) => &task.depends_on,
EvalTask::TraceAssertion(task) => &task.depends_on,
EvalTask::AgentAssertion(task) => &task.depends_on,
}
}
#[must_use]
pub fn condition(&self) -> Option<&EvalCondition> {
match self {
EvalTask::Assertion(task) => task.condition.as_ref(),
EvalTask::LlmJudge(task) => task.condition.as_ref(),
EvalTask::TraceAssertion(task) => task.condition.as_ref(),
EvalTask::AgentAssertion(task) => task.condition.as_ref(),
}
}
#[must_use]
pub fn discriminator(&self) -> &'static str {
match self {
EvalTask::Assertion(_) => "assertion",
EvalTask::LlmJudge(_) => "llm_judge",
EvalTask::TraceAssertion(_) => "trace_assertion",
EvalTask::AgentAssertion(_) => "agent_assertion",
}
}
}