Spaces:
Runtime error
Runtime error
| # -*- coding: utf-8 -*- | |
| # Copyright (c) 2024 OSU Natural Language Processing Group | |
| # | |
| # Licensed under the OpenRAIL-S License; | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # https://www.licenses.ai/ai-pubs-open-rails-vz1 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| import re | |
| def format_choices(elements): | |
| converted_elements = [ | |
| f'<{element["tag_with_role"]}>' | |
| + ( | |
| element["description"] | |
| ) | |
| + f"</{element['tag']}>" | |
| for i, element in enumerate(elements) | |
| ] | |
| return converted_elements | |
| def postprocess_action_lmm(text): | |
| text = text.strip() | |
| text = text.replace( | |
| "The uppercase letter of your choice. Choose one of the following elements if it matches the target element based on your analysis:\n\n", | |
| "") | |
| text = text.replace( | |
| "The uppercase letter of your choice. Choose one of the following elements if it matches the target element based on your analysis:\n", | |
| "") | |
| text = text.replace( | |
| "The uppercase letter of your choice. Choose one of the following elements if it matches the target element based on your analysis:", | |
| "") | |
| text = text.replace("The uppercase letter of your choice based on your analysis is:\n\n", "") | |
| text = text.replace("The uppercase letter of your choice based on your analysis is:\n", "") | |
| text = text.replace("The uppercase letter of your choice based on your analysis is:", "") | |
| text = text.replace("The uppercase letter of my choice is \n\n", "") | |
| text = text.replace("The uppercase letter of my choice is \n", "") | |
| text = text.replace("The uppercase letter of my choice is ", "") | |
| text = text.replace("The uppercase letter of your choice is \n\n", "") | |
| text = text.replace("The uppercase letter of your choice is \n", "") | |
| text = text.replace("The uppercase letter of your choice is ", "") | |
| text = text.replace("The uppercase letter of your choice.\n\n", "") | |
| text = text.replace("The uppercase letter of your choice.\n", "") | |
| text = text.replace("The uppercase letter of your choice.", "") | |
| text = text.replace("The uppercase letter of your choice based on my analysis is:\n\n", "") | |
| text = text.replace("The uppercase letter of your choice based on my analysis is:\n", "") | |
| text = text.replace("The uppercase letter of your choice based on my analysis is:", "") | |
| text = text.replace("The correct choice based on the analysis would be:\n\n", "") | |
| text = text.replace("The correct choice based on the analysis would be:\n", "") | |
| text = text.replace("The correct choice based on the analysis would be :", "") | |
| text = text.replace("The correct choice based on the analysis would be ", "") | |
| text = text.replace( | |
| "The uppercase letter of your choice. Choose one of the following elements if it matches the target element based on your analysis:\n\n", | |
| "") | |
| text = text.replace( | |
| "The uppercase letter of your choice. Choose one of the following elements if it matches the target element based on your analysis:\n", | |
| "") | |
| text = text.replace( | |
| "The uppercase letter of your choice. Choose one of the following elements if it matches the target element based on your analysis:", | |
| "") | |
| text = text.replace("The uppercase letter of your choice.\n\n", "") | |
| text = text.replace("The uppercase letter of your choice.\n", "") | |
| text = text.replace("The uppercase letter of your choice based on the analysis is:\n\n", "") | |
| text = text.replace("The uppercase letter of your choice based on the analysis is:\n", "") | |
| text = text.replace("The uppercase letter of your choice based on the analysis is:", "") | |
| text = text.replace("The uppercase letter of your choice based on the analysis is ", "") | |
| text = text.replace("The uppercase letter of my choice based on the analysis is:\n\n", "") | |
| text = text.replace("The uppercase letter of my choice based on the analysis is:\n", "") | |
| text = text.replace("The uppercase letter of my choice based on the analysis is:", "") | |
| text = text.replace("The uppercase letter of my choice based on the analysis is ", "") | |
| text = text.replace("The correct element to select would be:\n\n", "") | |
| text = text.replace("The correct element to select would be:\n", "") | |
| text = text.replace("The correct element to select would be:", "") | |
| text = text.replace("The correct element to select would be ", "") | |
| text = text.replace("The uppercase letter of my choice is:\n\n", "") | |
| text = text.replace("The uppercase letter of my choice is:\n", "") | |
| text = text.replace("The uppercase letter of my choice is:", "") | |
| text = text.replace("The uppercase letter of my choice is ", "") | |
| text = text.replace("Choose an action from {CLICK, TYPE, SELECT}.\n\n", "") | |
| text = text.replace("Choose an action from {CLICK, TYPE, SELECT}.\n", "") | |
| text = text.replace("Choose an action from {CLICK, TYPE, SELECT}.", "") | |
| text = text.replace("Provide additional input based on ACTION.\n\n", "") | |
| text = text.replace("Provide additional input based on ACTION.\n", "") | |
| text = text.replace("Provide additional input based on ACTION.", "") | |
| def extract_element_description(text): | |
| pattern = r'ELEMENT:\s*(.*?)\s*ACTION:' | |
| match = re.search(pattern, text) | |
| if match: | |
| return match.group(1) | |
| else: | |
| return None | |
| description = extract_element_description(text) | |
| action = re.search( | |
| r"ACTION: (CLICK|SELECT|TYPE|HOVER|PRESS ENTER|SCROLL UP|SCROLL DOWN|PRESS HOME|PRESS END|PRESS PAGEUP|PRESS PAGEDOWN|NEW TAB|CLOSE TAB|GO BACK|GO FORWARD|TERMINATE|NONE|GOTO|SAY|MEMORIZE)", | |
| text | |
| ) | |
| if action: | |
| action = action.group(1) | |
| else: | |
| action = "None" | |
| value = re.search(r"VALUE: (.*)$", text, re.MULTILINE) | |
| value = value.group(1) if value is not None else "" | |
| return description, action.strip(), process_string(process_string(value.strip())) | |
| def process_string(input_string): | |
| if input_string.startswith('"') and input_string.endswith('"'): | |
| input_string = input_string[1:-1] | |
| if input_string.endswith('.'): | |
| input_string = input_string[:-1] | |
| return input_string | |