18 KiB
18 KiB
import random
def nlg(system_act):
intent, domain, slot, value = system_act
if domain == 'payment' and intent == 'inform':
if slot == 'type':
if value == 'blik' or value == 'gotówka' or value == 'karta kredytowa' or value == 'karta restauracyjna' or value == 'bon upominkowy':
return f"Informuję, że {value} jest możliwą formą płatności w naszej restauracji."
else:
return f"Informuję, że {value} nie jest możliwą formą płatności w naszej restauracji."
if slot == 'vat':
return f"Twój vat jest {value} w rachunek."
if slot == 'amount':
return f"Kwota Twojej płatności to {value}."
else:
return "Nie mogę wykonać takiej operacji."
elif domain == 'booking' and intent == 'inform':
if slot == 'area':
return f"Ta restauracja znajduje się w dzielnicy {value}."
if slot == 'restaurant_name':
return f"Oto twoja rezerwacja w {value}."
if slot == "book_people":
if value == 0:
return f'Nie można zarezerwować stolika dla 0 osób.'
elif value == 1:
return f'Można zarezerwować stolik dla Ciebie.'
elif value <= 10:
return f'Znalazłem stolik dla {value} osób.'
elif value >= 11:
return f'Nie ma stoliku dla {value} osób.'
else:
return f'Nie znalazłem stolików dla podanych kryterów.'
if slot == "book_day":
return f"Dzień Twojej rezerwacji to: {value}."
if slot == "book_time":
return f"Godzina Twojej rezerwacji to: {value}."
elif domain == "order" and intent == "inform":
if slot == "type":
if value == "na wynos":
return f'Twoje zamówienie zostanie może zostać przygotowane do odbioru na wynos.'
elif value == "na miejscu":
return f'Możesz odebrać zamówienie na miejscu.'
elif value == "dostawa":
return f'Twoje zamówienie może być zrealizowane w formie dostawy.'
if slot == "price_range":
return f"Porównując do cen w innych restauracjach, kwota Twojego zamówienia jest: {value}."
if slot == "restaurant_name":
return f"Zamówienie zostanie wykonane przez {value}."
if slot == "area":
return f"Zamówienie zostanie zrealizowane w dzielnicy {value}."
if slot == "book_time":
return f"Godzina Twojego zamówienia to: {value}."
if slot == "book_day":
return f"Dzień Twojego zamówienia to: {value}."
elif domain == 'food' and intent == 'inform':
if slot == 'size':
if value == 'mała':
return f"Posiadamy dania w kategorii {value}, szczególnie dotyczy to pizzy, która ma średnice 30cm."
elif value == 'średnia':
return f"Kategoria {value}, dotyczy tylko pizzy, która ma średnice 42cm."
elif value == 'duża':
return f"Posiadamy dania w kategorii {value}, szczególnie dotyczy to pizzy, która ma średnice 50cm."
else:
return f"Informuje, że nie posiadamy {value} w naszej ofercie."
if slot == 'type':
#Pizza
if value == 'pizza':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi Margherite, Pepperoni czy Milano."
#Makarony
elif value == 'makaron':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi spaghetti bolognese, spaghetti napoli czy lasagne."
#Zupy
elif value == 'zupa':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi pomidorowa, ogórkowa czy grzybowa."
#Sushi
elif value == 'sushi':
return f"Inforumuję, że mamy jedzenie w kategorii {value}."
#Pierogi
elif value == 'pierogi':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi ruskie, mięsne lub z serem."
#owoce morza
elif value == 'owoce morza':
return f"Inforumuję, że mamy jedzenie w kategorii {value}."
#ryby
elif value == 'ryba':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi filet z dorsza lub łososia."
#sałatka
elif value == 'sałatka':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi grecką, cezar lub z grillowanym serem kozim."
#bao
elif value == 'bao':
return f"Inforumuję, że mamy jedzenie w kategorii {value}."
#mięso
elif value == 'mięso':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi kotlet schabowy, kebab lub stek z wołowiny."
#fast food
elif value == 'fast food':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi kebaba lub też burgera."
#śniadania
elif value == 'śniadania':
return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi szakszuke."
else:
return f"Informuje, że nie posiadamy dania z podanej kategorii."
if slot == 'price_range':
if value == 'niska':
return f"Inforumuje, że {value} cena dotyczy dań do 15 zł."
elif value == 'średnia':
return f"Inforumuje, że {value} cena dotyczy dań od 15zł do 25 zł."
elif value == 'wysoka':
return f"Inforumuje, że {value} cena dotyczy dań od 25zł."
if slot == 'name':
if value in ["pizza margherita","pizza poznańska","pizza peperoni","pizza nowojorska","pizza milano","xiaolongbao", \
"Burger Butcher","sałatka z grillowanym serem kozim","pizza nolita","szakszuka","sałatka cezar", \
"spaghetti bolognese","spaghetti napoli","kotlet schabowy","zupa pomidorowa","pierogi ruskie","ryba Dorsz", \
"krewetki na grillu","kurczak curry","tarta szpinakowa","kebab","zupa ogórkowa","sushi maki","pierogi z serem",\
"calamari","gomen","karp smażony","pizza vegetariana","sałatka z grillowanym kurczakiem","steak z wieprzowiny", \
"ravioli ze szpinakiem i ricottą","kotlet mielony","zupa grzybowa","sushi nigiri","pierogi z mięsem", \
"krewetki w panierce","filet z dorsza","pizza hawajska","sałatka cezar", "stek z kurczaka", "lasagne", \
"dushi california roll","krewetki w sosie czosnkowym","filet z łososia","pizza capricciosa","sałatka grecka", \
"stek z wołowiny"]:
return f"Informuje, że posiadamy {value} w naszej ofercie."
else:
return f"Informuje, że nie posiadamy {value} w naszej ofercie."
elif domain == 'drink' and intent == 'inform':
if slot == 'size':
if value == 'mała':
return f"Informuje, że napój o rozmiarze {value} jest serwowany w małej szklance lub filiżance."
elif value == 'standardowa':
return f"Informuje, że napój o rozmiarze {value} jest serwowany w dużej szklance."
elif value == 'duża':
return f"Informuje, że napój o rozmiarze {value} jest serwowany w dzbanku lub w przypadku piwa w specjalnym kuflu."
else:
return f"Informuje, że nie posiadamy {value} w naszej ofercie."
if slot == 'price_range':
if value == 'niska':
return f"Inforumuje, że {value} cena dotyczy napojów do 5 zł."
elif value == 'średnia':
return f"Inforumuje, że {value} cena dotyczy napojów od 5 zł do 15 zł."
elif value == 'wysoka':
return f"Inforumuje, że {value} cena dotyczy napojów od 15 zł."
else:
return f"Informuje, że nie posiadamy {value} w naszej ofercie."
if slot == 'name':
if value in ['kawa', 'cola', 'herbata', 'pepsi', 'sok pomarańczowy', 'koktajl owocowy', 'sok ze świeżych pomarańczy', 'lemoniada', 'sprite', 'piwo', 'fanta']:
return f"Informuje, że posiadamy {value} w naszej ofercie."
else:
return f"Informuje, że nie posiadamy {value} w naszej ofercie."
elif domain == 'sauce' and intent == 'inform':
if slot == 'size':
if value == 'mała':
return f"Inforumuje, że sos o rozmiarze {value} jest serwowany w pojemniku plastikowym."
elif value == 'duża':
return f"Inforumuje, że sos o rozmiarze {value} jest serwowany w szklanej misce."
if slot == 'price_range':
if value == 'niska':
return f"Inforumuje, {value} cena dotyczy sosów podawanych w plastikowym pojemniku."
elif value == 'duża':
return f"Inforumuje, {value} cena dotyczy sosów podawanych w szklanej miseczce."
if slot == 'name':
if value in ["sos pomidorowy","sos czosnkowy","sos bbq","sos tatarski","sos Meksykański","sos aioli","sos śmietanowo-koperkowy","sos pikantny","sos curry","sos hollandaise"]:
return f"Informuje, że posiadamy {value} w naszej ofercie."
else: return f"Informuje, że nie posiadamy {value} w naszej ofercie."
elif intent == 'end_conversation':
return random.choice(['Żegnam i dziękuję za skorzystanie z usługi.', 'Do widzenia.', "Dziękuję za skorzystanie z usługi, do kolejnego razu."])
elif intent == 'start_conversation':
return random.choice(['Witaj, jestem asystentem dialogowym, dzięki któremu złożysz zamówienie w restuaracji.', 'Cześć, w czym mogę pomóc?', "Witam w usłudze, w czym mogę pomóc?"])
elif intent == 'affirm':
return random.choice(['Tak.', 'Potwierdzam.', "Mozliwe."])
elif intent == 'deny':
return random.choice(['Nie.', 'Nie potwierdzam.', "Niemożliwe."])
elif intent == 'recommend' and slot=="name":
if domain=="food":
return f"Rekomendowany posiłek to: {value}."
if domain=="drink":
return f"Rekomendowany napój to: {value}."
if domain=="sauce":
return f"Rekomendowany sos to: {value}."
elif intent == 'recommend' and slot=="type":
if domain=="booking":
return f"Rekomenduję następującą rezerwację stolika: {value}."
if domain=="order":
return f"Rekomenduję takie zamówienie: {value}."
if domain=="payment":
return f"Rekomendowana metoda płatności to: {value}."
nlg(['inform', 'payment', 'type', 'gotówka'])
'Informuję, że gotówka jest możliwą formą płatności w naszej restauracji.'
nlg(['inform', 'order', 'type', 'na wynos'])
'Twoje zamówienie zostanie może zostać przygotowane do odbioru na wynos.'
nlg(['inform', 'booking', 'restaurant_name', 'biały kwiat'])
'Oto twoja rezerwacja w biały kwiat.'
nlg(['inform', 'food', 'type', 'pizza'])
'Informuje, że z kategorii pizza posiadamy w ofercie między innymi Margherite, Pepperoni czy Milano.'
nlg(['inform', 'drink', 'name', 'pepsi'])
'Informuje, że posiadamy pepsi w naszej ofercie.'
nlg(['inform', 'sauce', 'size', 'mała'])
'Inforumuje, że sos o rozmiarze mała jest serwowany w pojemniku plastikowym.'
nlg(['end_conversation', '', '', ''])
'Żegnam i dziękuję za skorzystanie z usługi.'
nlg(['start_conversation', '', '', ''])
'Cześć, w czym mogę pomóc?'
nlg(['recommend', 'food', 'name', 'zupa grzybowa'])
'Rekomendowany posiłek to: zupa grzybowa.'
nlg(['recommend', 'payment', 'type', 'blik'])
'Rekomendowana metoda płatności to: blik.'