import abc from pydantic import BaseModel from openhands.events import Event class CriticResult(BaseModel): """A critic result is a score and a message.""" score: float message: str @property def success(self) -> bool: """Whether the agent is successful.""" return self.score >= 0.5 class BaseCritic(abc.ABC): """A critic is a function that takes in a list of events, optional git patch, and returns a score about the quality of those events.""" @abc.abstractmethod def evaluate( self, events: list[Event], git_patch: str | None = None ) -> CriticResult: pass