|
import os |
|
import pickle |
|
import pandas as pd |
|
|
|
from typing import List |
|
|
|
import tqdm |
|
|
|
from prompt_injection.mutators.base import PromptMutator |
|
|
|
|
|
def init_mutator_result_object(output_path,evaluator_list): |
|
result={'idx':[],'Prompt':[]} |
|
for evaluator in evaluator_list: |
|
result[evaluator.get_name()]=[] |
|
|
|
|
|
if os.path.exists(output_path): |
|
with open(output_path,'rb') as f: |
|
result=pickle.load(f) |
|
|
|
if os.path.exists(output_path): |
|
with open(output_path,'rb') as f: |
|
result=pickle.load(f) |
|
return result |
|
|
|
|
|
def mutate_all(prompts,mutators_list:List[PromptMutator],output_path): |
|
result=init_mutator_result_object(output_path,mutators_list) |
|
|
|
for i in tqdm.tqdm(range(len(prompts))): |
|
if i in result["idx"]: |
|
continue |
|
|
|
prompt=prompts[i] |
|
result['idx'].append(i) |
|
result['Prompt'].append(prompt) |
|
for mutator in mutators_list: |
|
result[mutator.get_name()].append(mutator.mutate(prompt)) |
|
|
|
with open(output_path,'wb') as f: |
|
pickle.dump(result, f, protocol=pickle.HIGHEST_PROTOCOL) |
|
|
|
return pd.DataFrame.from_dict(result) |