ModPilot / api /canned.py
ThejasRao's picture
Deploy ModPilot Investigation Engine
7302343
Raw
History Blame Contribute Delete
2.97 kB
"""Canned verdict for S-1.3 stub `/investigate` endpoint.
Data ported from mockups/moderator-ui.html (the HIGH-conf REMOVE card) so the
Verdict Card UI in S-1.4 renders the same data the design was prototyped against.
Replaced by the real pipeline in E-2.11.
"""
from __future__ import annotations
from api.schemas import (
ConfidenceBreakdown,
EvidenceRow,
InvestigateRequest,
TimelineStep,
Verdict,
)
def canned_verdict(req: InvestigateRequest) -> Verdict:
"""Build a HIGH-conf REMOVE verdict that mirrors the mockup."""
return Verdict(
correlation_id=req.correlation_id,
tier="DEEP",
risk_tier="HIGH",
recommendation="REMOVE",
calibrated_confidence=0.92,
rationale=(
"Author has [ev-2] three prior removals in this subreddit. "
"Thread shows escalation from turn 8 [ev-5]. "
"Matches Rule 2 [ev-1]. Report velocity confirms the pattern is not "
"a one-off complaint [ev-4]."
),
top_evidence=[
EvidenceRow(
id="ev-4",
summary="4 reports in 6 min (z=6.2) — far above baseline",
tool="report_velocity",
),
EvidenceRow(
id="ev-2",
summary="Author: 3 prior removals in last 30 days",
tool="user_history",
),
EvidenceRow(
id="ev-5",
summary="Thread escalation detected at turn 8",
tool="thread_context",
),
],
timeline=[
TimelineStep(
tool="policy_match",
verb="Matched against rules",
status="success",
latency_ms=142,
evidence_ids=["ev-1"],
),
TimelineStep(
tool="report_velocity",
verb="Checked report velocity",
status="success",
latency_ms=23,
evidence_ids=["ev-4"],
),
TimelineStep(
tool="user_history",
verb="Pulled author history",
status="success",
latency_ms=87,
evidence_ids=["ev-2", "ev-3"],
),
TimelineStep(
tool="thread_context",
verb="Read thread context",
status="success",
latency_ms=1180,
evidence_ids=["ev-5"],
),
],
confidence_breakdown=ConfidenceBreakdown(
llm_self_report=0.95,
evidence_convergence=0.88,
subreddit_accuracy=0.87,
rule_match_strength=0.96,
),
model_reasoner="gemini-2.5-pro",
model_summarizer="gemini-2.5-flash",
cost_usd=0.018,
latency_ms=1432,
validation_flag=False,
degraded=False,
cold_start=False,
)