"""Apply pinned RAID surface attacks to both classes, retaining source groups.""" import argparse,json from pathlib import Path from app.robustness import raid_attack def main(): p=argparse.ArgumentParser();p.add_argument('input',type=Path);p.add_argument('--output',type=Path,required=True);a=p.parse_args() with a.output.open('w') as out: for line in a.input.read_text().splitlines(): row=json.loads(line) if row.get('split')!='train':raise ValueError('Augment training partition only; do not leak validation/test derivatives.') out.write(json.dumps(row|{'attack':'none'})+'\n') for kind in ['zero_width','whitespace','homoglyph']: out.write(json.dumps(row|{'text':raid_attack(row['text'],kind)['generation'],'attack':kind})+'\n') if __name__=='__main__':main()