"""Outcome verification: check step results for success or failure.""" from __future__ import annotations from typing import Any, Callable from fusionagi._logger import logger class OutcomeVerifier: """Verifies step outcomes using a pluggable verification function. Args: verify_fn: Optional callable ``(step_result, context) -> bool``. When ``None``, defaults to checking for an ``"error"`` key. """ def __init__( self, verify_fn: Callable[[Any, dict[str, Any]], bool] | None = None, ) -> None: self._verify_fn = verify_fn def verify( self, step_result: Any, context: dict[str, Any] | None = None, ) -> bool: """Verify a step result. Args: step_result: The result to verify. context: Optional context dict for the verification function. Returns: ``True`` if the result is considered successful. """ ctx = context or {} if self._verify_fn: try: return self._verify_fn(step_result, ctx) except Exception: logger.exception("OutcomeVerifier failed") return False if isinstance(step_result, dict) and step_result.get("error"): return False return True