Websterfly's picture
Deploy Websterfly educational AI detection workbench
97799b9 verified
Raw History Blame Contribute Delete
1.37 kB
import json,gc,time,traceback
from pathlib import Path
from app.detectors import Detector
root=Path('work/upgrade')
paper_path=Path('work/paper-analysis/normalized.txt')
paper=paper_path.read_text() if paper_path.exists() else None
for key in ['fakespot','earlybird','vanguard']:
print('Loading',key,flush=True)
try:
d=Detector(key);d.load()
if paper is not None:
report=json.loads((root/(key+'-paper.json')).read_text()) if (root/(key+'-paper.json')).exists() else d.analyze(paper)
(root/(key+'-paper.json')).write_text(json.dumps(report,indent=2))
print('PAPER',key,report['ai_score'],report['duration_ms'],flush=True)
if not (root/'external.jsonl').exists():
print('Corpus not ready',flush=True);continue
rows=[json.loads(l) for l in (root/'external.jsonl').read_text().splitlines()]
with (root/(key+'-external.jsonl')).open('w') as out:
for i,row in enumerate(rows):
r=d.analyze(' '.join(row['text'].split()[:300]));out.write(json.dumps({k:v for k,v in row.items() if k!='text'}|{'ai_score':r['ai_score'],'duration_ms':r['duration_ms'],'words':min(300,len(row['text'].split())),'excerpt_policy':'First 300 whitespace-delimited words for bounded-cost pilot; full original retained locally'})+'\n');out.flush()
if i%10==0:print(key,'controls',i+1,'/',len(rows),flush=True)
del d;gc.collect()
except Exception:
traceback.print_exc()