You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.3 KiB

from string import Template
TYPE_VALUE_BASED_PROMPT = "value-based"
TYPE_INVERSE_PROMPT = "inverse-prompt"
TYPE_PROMPT_ENSEMBLE = "prompt-ensemble"
PROMPT_WEIGHT = 0.25
INVERSE_PROMPTS = {
"i1": "belief states: $slot = $value",
"i2": "belief states: slot = $slot, value = $value",
}
PROMPT_TEMPLATES = {
"value-based": {
"training": "belief states: value = $value, slot = $slot",
"generate": "belief states: value = $value, slot ="
},
"inverse-prompt": {
"training": INVERSE_PROMPTS["i2"],
},
"prompt-ensemble": {
"training": {
"p1": "belief states: value = $value, slot = $slot",
"p2": "belief states: $value = $slot",
"p3": "$value is of slot type $slot",
"p4": "$value is the value of $slot"
},
"generate": {
"p1": "belief states: value = $value, slot =",
"p2": "belief states: $value =",
"p3": "$value is of slot type",
"p4": "$value is the value of"
}
}
}
# TODO add the final set of answered prompts
ANSWERED_PROMPTS = """
user : hello, i'm looking for a 4 star place on the west side to stay at.\n
system : do you have a price range ?\n
user : yes, i am looking in the expensive price range. also, i need free parking.\n
belief states: west = area, 4 = stars, expensive = price, yes = parking \n
user : i am looking for a train, it should go to cambridge and should depart from norwich.\n
system : what time and day are you looking to travel?\n
user : yes, i would like travel on monday and i would need to arrive by 08:30. \n
belief states: cambridge = destination, norwich = departure, monday = day, 08:30 = arrive \n
user : i would like an expensive place to dine, centre of town.\n
system : what type of food would you like to eat?\n
user : the type of food doesn't matter, but i need a reservation for 8 people on wednesday at 12:45\n
belief states: expensive = price, centre = area, dont care = food, 8 = people, wednesday = day, 12:45 = time \n
user : i need a taxi to pick me up at curry prince at 08:15.\n
belief states: curry prince = departure, 08:15 = leave \n
user : i am looking for a place in the centre of town that is a nightclub.\n
belief states: night club = type, centre = area \n
"""
def get_prompt_for_training(typ, slot_value):
template = PROMPT_TEMPLATES[typ]['training']
if isinstance(template, str):
return Template(template).substitute(slot=slot_value[0], value=slot_value[1])
elif isinstance(template, dict):
template_list = template.values()
prompt_list = []
for template_str in template_list:
prompt = Template(template_str).substitute(slot=slot_value[0], value=slot_value[1])
prompt_list.append(prompt)
return prompt_list
def get_value_based_prompt(value):
template = Template(PROMPT_TEMPLATES[TYPE_VALUE_BASED_PROMPT]["generate"])
return template.substitute(value=value)
def get_ensemble_prompts(value):
templates = PROMPT_TEMPLATES[TYPE_PROMPT_ENSEMBLE]['generate']
template_list = templates.values()
prompt_list = []
for template_str in template_list:
template = Template(template_str)
prompt_list.append(template.substitute(value=value))
return prompt_list
def get_answered_prompts():
return ANSWERED_PROMPTS