mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-21 04:02:22 +02:00
32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
"""The one decision for whether a browser run may ASK a human for help. Code never fires
|
|
RequestHumanIntervention itself; this gate only controls whether the model is offered the tool."""
|
|
|
|
from typing import Dict, Optional, Set
|
|
|
|
from typeguard import typechecked
|
|
|
|
from backend.apps.agents.core.models import AgentSession
|
|
|
|
|
|
@typechecked
|
|
def human_intervention_allowed(
|
|
builtin_perms: Dict[str, str],
|
|
parent_session_id: Optional[str],
|
|
sessions: Dict[str, AgentSession],
|
|
) -> bool:
|
|
if builtin_perms.get("RequestHumanIntervention") == "deny":
|
|
return False
|
|
# A workflow run anywhere up the parent chain means nobody is watching the screen. The visited
|
|
# set means a corrupt chain degrades to "allowed" instead of hanging the spawn.
|
|
seen: Set[str] = set()
|
|
sid = parent_session_id
|
|
while sid and sid not in seen:
|
|
seen.add(sid)
|
|
parent = sessions.get(sid)
|
|
if parent is None:
|
|
return True
|
|
if parent.workflow_run_id:
|
|
return False
|
|
sid = parent.parent_session_id
|
|
return True
|