lexguard-backend / app /agents /devil_advocate.py
Dar4devil's picture
LexGuard backend
c34b339
Raw
History Blame Contribute Delete
1.29 kB
"""Devil's Advocate agent: 1st-person worst-case scenario for a flagged clause."""
from __future__ import annotations
import logging
from typing import ClassVar
from app.agents.base import BaseAgent
from app.schemas import AgentName, Clause
logger = logging.getLogger(__name__)
class DevilAdvocateAgent(BaseAgent):
name: ClassVar[AgentName] = "devil_advocate"
prompt_file: ClassVar[str] = "devil"
async def run(self, clause: Clause) -> str:
user_prompt = _format_prompt(clause)
response = await self._call(
user_prompt,
max_tokens=350,
temperature=0.4,
clause_id=clause.id,
log_label=f"severity={clause.severity}",
)
scenario = response.text.strip().strip("`").strip('"').strip()
if scenario:
self._emit_message(f"[Worst case] {scenario}", clause_id=clause.id)
return scenario
def _format_prompt(clause: Clause) -> str:
return (
f"Clause type: {clause.type}\n"
f"Severity assigned by Risk Analyst: {clause.severity}\n"
f"Risk Analyst's rationale: {clause.rationale}\n\n"
f"<clause>\n{clause.text}\n</clause>\n\n"
"Now write the worst-case scenario paragraph described in your role instructions."
)