Plaiglab / scripts /run_demo.py
SanidhyaDhangar's picture
PlaigLab — Hugging Face Space (Docker) clean deploy
ebebfe8
Raw
History Blame Contribute Delete
2.09 kB
"""End-to-end demo: analyze the four test submissions, write HTML reports,
check verdicts against ground truth, and run one feedback-learning round.
"""
import json
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from plagdetect.pipeline import PlagiarismPipeline # noqa: E402
from plagdetect.report import write_html # noqa: E402
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SUB_DIR = os.path.join(ROOT, "data", "submissions")
REPORT_DIR = os.path.join(ROOT, "reports")
def main():
os.makedirs(REPORT_DIR, exist_ok=True)
pipe = PlagiarismPipeline(os.path.join(ROOT, "data", "corpus"),
os.path.join(ROOT, "models"))
with open(os.path.join(SUB_DIR, "truth.json"), "r", encoding="utf-8") as f:
truth = json.load(f)
rows, last_finding = [], None
for name in ["clean", "clone", "mosaic", "idea"]:
print(f"\n=== Analyzing {name}.txt " + "=" * 40)
result = pipe.analyze(os.path.join(SUB_DIR, f"{name}.txt"))
out = os.path.join(REPORT_DIR, f"report_{name}.html")
write_html(result, out)
ok = result["verdict"] in truth[name]
rows.append((name, result["verdict"], "/".join(truth[name]),
f"{result['overall_score']:.2f}", "PASS" if ok else "FAIL"))
print(f"[report] {out}")
if name == "clone" and result["findings"]:
last_finding = max(result["findings"], key=lambda x: x["score"])
print("\n" + "=" * 64)
print(f"{'submission':<12}{'verdict':<14}{'expected':<26}{'score':<8}check")
for r in rows:
print(f"{r[0]:<12}{r[1]:<14}{r[2]:<26}{r[3]:<8}{r[4]}")
if last_finding is not None:
print("\n[feedback loop] reviewer CONFIRMS the clone finding ->")
w = pipe.feedback(last_finding, confirmed=True)
print(f" updated evidence weights: {w}")
print(f" bandit interventional means E[r|do(arm)]: "
f"{pipe.bandit.interventional_means().round(3).tolist()}")
if __name__ == "__main__":
main()