Files
FusionAGI/fusionagi/verification/outcome.py

48 lines
1.3 KiB
Python
Raw Normal View History

"""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