polyguard-openenv / app /agents /critic_agent.py
TheJackBright's picture
Deploy PolyGuard OpenEnv Space
877add7 verified
"""Safety critic agent."""
from __future__ import annotations
from app.common.enums import ActionType, DecisionMode, DoseBucket
from app.common.types import PolyGuardAction, PolyGuardState
from app.env.verifier import verify_action_legality
class CriticAgent:
name = "CriticAgent"
def run(self, state: PolyGuardState, proposed: PolyGuardAction) -> dict:
report = verify_action_legality(state, proposed)
if report.legal:
report_payload = report.model_dump(mode="json")
return {
"approved": True,
"report": report_payload,
"final_action": proposed,
"legal": True,
"violations": report_payload.get("violations", []),
}
fallback = PolyGuardAction(
mode=DecisionMode.REVIEW,
action_type=ActionType.REQUEST_SPECIALIST_REVIEW,
target_drug=None,
replacement_drug=None,
dose_bucket=DoseBucket.NA,
taper_days=None,
monitoring_plan="critic_veto",
candidate_id="cand_veto_fallback",
confidence=0.62,
rationale_brief=f"Critic veto: {', '.join(report.violations)}",
)
report_payload = report.model_dump(mode="json")
return {
"approved": False,
"report": report_payload,
"final_action": fallback,
"legal": False,
"violations": report_payload.get("violations", []),
}