"""Abstract base class for evaluation agents.""" from abc import ABC, abstractmethod from typing import Any, Callable, Optional from agenteval.channels.base import EvalChannel from agenteval.models import EvalRun, EvalTarget, Scenario ProgressCallback = Callable[[str, dict[str, Any]], None] class EvalAgent(ABC): """Base class for evaluation agents that execute scenarios against targets.""" @abstractmethod async def run( self, target: EvalTarget, scenario: Scenario, channel: EvalChannel, progress_callback: Optional[ProgressCallback] = None, ) -> EvalRun: """Execute the scenario against the target via the channel. Returns the completed EvalRun record. """ ...