Spaces:
Runtime error
Runtime error
File size: 4,434 Bytes
3bbba47 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# -*- 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 string
def generate_new_query_prompt(system_prompt="", task="", previous_actions=None, question_description="",select_elements=None):
"""
Generate the first phase prompt to ask model to generate general descriptions about {environment, high-level plans, next step action}
Each experiment will have a similar prompt in this phase
This prompt is used to generate models' thoughts without disrupt of formatting/referring prompts
"""
sys_role=""+system_prompt
query_text = ""
# System Prompt
query_text += "You are asked to complete the following task: "
# Task Description
query_text += task
query_text += "\n\n"
# Previous Actions
previous_action_text = "Previous Actions:\n"
if previous_actions is None:
previous_actions = []
for action_text in previous_actions:
previous_action_text += action_text
previous_action_text += "\n"
query_text += previous_action_text
query_text += "\n"
# Question Description
query_text += question_description
if select_elements:
query_text += "\n"
for element in select_elements:
query_text+=element+'\n'
return [sys_role,query_text]
def generate_new_referring_prompt(referring_description="", element_format="", action_format="", value_format="",
choices=None,split="4"):
referring_prompt = ""
# Add description about how to format output
if referring_description != "":
referring_prompt += referring_description
referring_prompt += "\n\n"
# Add element prediction format and choices
# Prepare Option texts
# For exp {1, 2, 4}, generate option
# For element_atttribute, set options field at None
# if choices:
# choice_text = format_options(choices)
# referring_prompt += choice_text
if element_format != "":
referring_prompt += element_format
referring_prompt += "\n\n"
# Format Action Prediction
if action_format != "":
referring_prompt += action_format
referring_prompt += "\n\n"
# Format Value Prediction
if value_format != "":
referring_prompt += value_format
referring_prompt += ""
return referring_prompt
def format_options(choices):
option_text = ""
abcd = ''
non_abcd = ''
multi_choice = ''
for multichoice_idx, choice in enumerate(choices):
multi_choice += f"{generate_option_name(multichoice_idx)}. {choice}\n"
abcd += f"{generate_option_name(multichoice_idx)}, "
non_abcd = generate_option_name(multichoice_idx + 1)
multi_choice += f"{non_abcd}. None of the other options match the correct element or the action doesn't involve an element."
# option_text += abcd
option_text += f"If none of these elements match your target element or your target action doesn't involve an element, please select {non_abcd}.\n"
option_text += (multi_choice + '\n\n')
return option_text
def generate_option_name(index):
if index < 26:
return string.ascii_uppercase[index]
else:
first_letter_index = (index - 26) // 26
second_letter_index = (index - 26) % 26
first_letter = string.ascii_uppercase[first_letter_index]
second_letter = string.ascii_uppercase[second_letter_index]
return f"{first_letter}{second_letter}"
def get_index_from_option_name(name):
if len(name) == 1:
return string.ascii_uppercase.index(name)
elif len(name) == 2:
first_letter_index = string.ascii_uppercase.index(name[0])
second_letter_index = string.ascii_uppercase.index(name[1])
return 26 + first_letter_index * 26 + second_letter_index
else:
raise Exception("The string should be either 1 or 2 characters long")
|