Source code for council.runners.if_runner

from council.contexts import ChatMessage

from .runner_context import RunnerContext
from .errrors import RunnerPredicateError
from .runner_base import RunnerBase
from .runner_executor import RunnerExecutor
from .types import RunnerPredicate


[docs]class If(RunnerBase): """ Runner that executes only if the predicate returns `True` """ def __init__(self, predicate: RunnerPredicate, runner: RunnerBase): self.predicate = predicate self.runner = runner def _run( self, context: RunnerContext, executor: RunnerExecutor, ) -> None: try: result = self.predicate(context.make_chain_context(), context.budget.remaining()) except Exception as e: context.append(ChatMessage.skill("IfRunner", f"predicate raised exception: {e}", is_error=True)) raise RunnerPredicateError from e if result: self.runner.run(context, executor)