| from transformers import PreTrainedTokenizerFast |
|
|
| class SinglePOTokenizer(PreTrainedTokenizerFast): |
| def __init__(self, *args, **kwargs): |
| super().__init__(*args, **kwargs) |
|
|
| def get_context( |
| self, |
| raw_instruction, |
| rule_description, |
| ): |
| prompt = "You are an expert prompt engineer." + " " |
| prompt += "Please help me optimize this prompt to get better response:\n\n[The Start of Raw Prompt]\n{}\n[The End of Raw Prompt]".format(raw_instruction) |
| prompt += "\n\nYou should optimize this prompt by {}".format(rule_description) |
| |
| context = self.apply_chat_template( |
| [ |
| { |
| "role": "user", |
| "content": prompt, |
| } |
| ], |
| add_generation_prompt=True, |
| tokenize=False, |
| ) + "The Optimized Prompt:\n\n[The Start of Optimized Prompt" |
|
|
| return context |
|
|
| def parse_output( |
| self, |
| output_text, |
| raw_instruction = "", |
| ): |
| better_instruction = "The Optimized Prompt:\n\n[The Start of Optimized Prompt" + output_text |
| |
| if "[The Start of Optimized Prompt]" in better_instruction: |
| better_instruction = better_instruction[better_instruction.index("[The Start of Optimized Prompt]") + len("[The Start of Optimized Prompt]"):] |
| if better_instruction.startswith("\n"): |
| better_instruction = better_instruction[1:] |
| if "[The End of Optimized Prompt]" in better_instruction: |
| better_instruction = better_instruction[:better_instruction.index("[The End of Optimized Prompt]")] |
| if better_instruction.endswith("\n"): |
| better_instruction = better_instruction[:-1] |
| if "The Optimized Prompt:" in better_instruction: |
| better_instruction = better_instruction[:better_instruction.index("The Optimized Prompt:")] |
| |
| if better_instruction.strip() == "": |
| better_instruction = raw_instruction |
|
|
| if "The Optimized" in better_instruction: |
| better_instruction = raw_instruction |
|
|
| return better_instruction |