diff --git a/src/service/template_selector.py b/src/service/template_selector.py index 65b749f..4cf5a70 100644 --- a/src/service/template_selector.py +++ b/src/service/template_selector.py @@ -1,35 +1,203 @@ import random from service.templates import templates +def generate_pizza_info(slots): + pizza_name = None + query_type = None + + for slot in slots: + if slot['name'] == 'pizza': + pizza_name = slot['value'].lower() + elif slot['name'] == 'ingredient': + query_type = 'ingredient' + elif slot['name'] == 'price': + query_type = 'price' + + if pizza_name not in pizza_data: + return f"Nie mamy w ofercie pizzy o nazwie {pizza_name}." + + if query_type == 'ingredient': + ingredients = pizza_data[pizza_name]['ingredient'] + return f"Składniki pizzy {pizza_name} to: {', '.join(ingredients)}." + elif query_type == 'price': + price = pizza_data[pizza_name]['price'] + return f"Cena pizzy {pizza_name} to {price} zł." + + return f"Informacje o pizzy {pizza_name}: składniki to {', '.join(pizza_data[pizza_name]['ingredient'])}, cena to {pizza_data[pizza_name]['price']} zł." + + +def generate_ingredients_response(slots): + ingredients = [slot['value'] for slot in slots if slot['name'] == 'ingredients'] + if ingredients: + ingredient_list = [] + for ingredient in ingredients: + ingredient_list.extend(ingredient.keys()) + response = f"Składniki to: {', '.join(ingredient_list)}." + return response + return "Nie podano składników." + + +def generate_drinks_response(slots): + drinks = [slot['value'] for slot in slots if slot['name'] == 'drink'] + if drinks: + drink_details = [] + for drink in drinks: + for name, details in drink.items(): + price = details.get('price', 'unknown') + drink_details.append(f"{name} w cenie {price} zł") + if len(drink_details) > 1: + response = f"Dostępne napoje to: {', '.join(drink_details[:-1])} oraz {drink_details[-1]}." + else: + response = f"Dostępne napoje to: {drink_details[0]}." + return response + return "Nie podano napojów." + +def generate_size_response(slots): + sizes = [slot['value'] for slot in slots if slot['name'] == 'size'] + if sizes: + size_details = [] + for size in sizes: + for name, details in size.items(): + rozmiar = details.get('rozmiar', 'unknown') + size_details.append(f"{name} o średnicy {rozmiar} cm") + if len(size_details) > 1: + response = f"Dostępne rozmiary to: {', '.join(size_details[:-1])} oraz {size_details[-1]}." + else: + response = f"Dostępne rozmiary to: {size_details[0]}." + return response + return "Nie podano rozmiarów." + +def generate_sauce_response(slots): + sauces = [slot['value'] for slot in slots if slot['name'] == 'sauce'] + if sauces: + sauce_list = [] + for sauce in sauces: + if isinstance(sauce, list): + sauce_list.extend(sauce) + else: + sauce_list.append(sauce) + return f"Dostępne sosy to: {', '.join(sauce_list)}." + return "Nie podano sosów." + + def select_template(act, slots): slot_names = {slot['name'] for slot in slots} if act == "welcomemsg": return random.choice(templates["welcomemsg"]) - if act == "request/menu": - return random.choice(templates["request/menu"]) - if act == "inform/address": - return random.choice(templates["inform/address"]) - if act == "inform/delivery": - return random.choice(templates["inform/delivery"]) - if act == "inform/payment": - return random.choice(templates["inform/payment"]) - if act == "affirm": - return random.choice(templates["affirm"]) - if act == "request/drinks": - return random.choice(templates["request/drinks"]) - if act == "bye": - return random.choice(templates["bye"]) - if act == "inform/order": - if "quantity" in slot_names and "food" in slot_names and "pizza" in slot_names: + + if "ingredients" in slot_names: + return generate_ingredients_response(slots) + elif "drink" in slot_names: + return generate_drinks_response(slots) + elif "sauce" in slot_names: + return generate_sauce_response(slots) + elif "size" in slot_names: + return generate_size_response(slots) + elif "price" in slot_names: + return random.choice(templates["inform/price"]) + + if act == "inform": + if "menu" in slot_names: + return random.choice(templates["inform/menu"]) + elif "address" in slot_names: + return random.choice(templates["inform/address"]) + elif "phone" in slot_names: + return random.choice(templates["inform/phone"]) + elif "order-complete" in slot_names: + return random.choice(templates["inform/order-complete"]) + elif "delivery" in slot_names: + return random.choice(templates["inform/delivery"]) + elif "payment" in slot_names: + return random.choice(templates["inform/payment"]) + elif "time" in slot_names: + return random.choice(templates["inform/time"]) + elif "name" in slot_names: + return random.choice(templates["inform/name"]) + elif "price" in slot_names and "pizza" in slot_names: + return generate_pizza_info(slots) + elif act == "inform/order": + if "quantity" in slot_names and "pizza" in slot_names and "size" in slot_names: return templates["inform/order"][1] elif "quantity" in slot_names and "pizza" in slot_names: - return templates["inform/order"][4] - elif "food" in slot_names and "pizza" in slot_names: return templates["inform/order"][2] + elif "quantity" in slot_names and "food" in slot_names: + return templates["inform/order"][0] + elif "food" in slot_names and "pizza" in slot_names and "price" in slot_names: + return templates["inform/order"][5] elif "quantity" in slot_names: return templates["inform/order"][3] else: return templates["inform/order"][4] + elif act == "request/menu": + return random.choice(templates["request/menu"]) + elif act == "inform/address": + return random.choice(templates["inform/address"]) + elif act == "request/price": + return random.choice(templates["request/price"]) + elif act == "inform/menu": + return random.choice(templates["inform/menu"]) + elif act == "request/ingredients": + return random.choice(templates["request/ingredients"]) + elif act == "request/sauce": + return random.choice(templates["request/sauce"]) + elif act == "inform/phone": + return random.choice(templates["inform/phone"]) + elif act == "inform/order-complete": + return random.choice(templates["inform/order-complete"]) + elif act == "request/time": + return random.choice(templates["request/time"]) + elif act == "request/size": + return random.choice(templates["request/size"]) + elif act == "inform/delivery": + return random.choice(templates["inform/delivery"]) + elif act == "inform/payment": + return random.choice(templates["inform/payment"]) + elif act == "request/delivery-price": + return random.choice(templates["request/delivery-price"]) + elif act == "inform/time": + return random.choice(templates["inform/time"]) + elif act == "request/drinks": + return random.choice(templates["request/drinks"]) + elif act == "request/food": + return random.choice(templates["request/food"]) + elif act == "inform/name": + return random.choice(templates["inform/name"]) + elif act == "bye": + return random.choice(templates["bye"]) + + return None + + +# def select_template(act, slots): +# slot_names = {slot['name'] for slot in slots} + +# if act == "welcomemsg": +# return random.choice(templates["welcomemsg"]) +# if act == "request/menu": +# return random.choice(templates["request/menu"]) +# if act == "inform/address": +# return random.choice(templates["inform/address"]) +# if act == "inform/delivery": +# return random.choice(templates["inform/delivery"]) +# if act == "inform/payment": +# return random.choice(templates["inform/payment"]) +# if act == "affirm": +# return random.choice(templates["affirm"]) +# if act == "request/drinks": +# return random.choice(templates["request/drinks"]) +# if act == "bye": +# return random.choice(templates["bye"]) +# if act == "inform/order": +# if "quantity" in slot_names and "food" in slot_names and "pizza" in slot_names: +# return templates["inform/order"][1] +# elif "quantity" in slot_names and "pizza" in slot_names: +# return templates["inform/order"][4] +# elif "food" in slot_names and "pizza" in slot_names: +# return templates["inform/order"][2] +# elif "quantity" in slot_names: +# return templates["inform/order"][3] +# else: +# return templates["inform/order"][4] - return "default/template" \ No newline at end of file +# return "default/template" diff --git a/src/service/templates.py b/src/service/templates.py index b31dc38..b45590b 100644 --- a/src/service/templates.py +++ b/src/service/templates.py @@ -6,12 +6,25 @@ templates = { "Dziękujemy za zamówienie {quantity} x {food}.", "Na jaką pizzę masz ochotę?" ], - "request/menu": [ - "Oto nasze menu: {menu}.", - "Nasze menu obejmuje: {menu}.", - "Proszę, oto lista dostępnych dań: {menu}.", - "Dostępne dania to: {menu}.", - "W naszym menu znajdziesz: {menu}." + "inform/menu": [ + "Oferujemy następujące pizze: {menu}.", + "Nasze pizze to: {menu}.", + "W naszym menu znajdziesz pizze: {menu}.", + "Dostępne pizze to: {menu}.", + "Proszę, oto lista dostępnych pizz: {menu}." + ], + "inform/name": [ + "Twoje imię to {name}.", + "Podane imię: {name}.", + "Twoje imię: {name}.", + "Masz na imię {name}.", + "Imię: {name}." + ], + "inform/price": [ + "Cena wybranej pizzy to {price} zł.", + "Koszt pizzy to {price} zł.", + "Wybrana pizza kosztuje {price} zł.", + "Cena pizzy wynosi {price} zł." ], "inform/address": [ "Twój adres to: {address}.", @@ -20,6 +33,92 @@ templates = { "Dostarczymy na adres: {address}.", "Twój podany adres to: {address}." ], + "inform/sauce": [ + "Dostępne sosy to: {sauce}.", + "Możesz wybrać spośród następujących sosów: {sauce}.", + "Oferujemy następujące sosy: {sauce}." + ], + "inform/phone": [ + "Twój numer telefonu to: {phone}.", + "Podany numer telefonu: {phone}.", + "Numer telefonu, który podałeś, to: {phone}.", + "Twoje dane kontaktowe: {phone}.", + "Telefon kontaktowy: {phone}." + ], + "inform/order-complete": [ + "Twoje zamówienie zostało zrealizowane. Dziękujemy!", + "Zamówienie zakończone. Dziękujemy za zakupy!", + "Zamówienie zrealizowane. Czekaj na dostawę!", + "Twoje zamówienie jest gotowe. Dziękujemy!", + "Realizacja zamówienia zakończona. Dziękujemy!" + ], + "inform/delivery": [ + "Twoje zamówienie zostanie dostarczone na {address}.", + "Dostarczymy zamówienie na adres: {address}.", + "Dostawa na adres: {address}.", + "Twoje zamówienie jedzie na {address}.", + "Adres dostawy: {address}." + ], + "inform/address": [ + "Twoje zamówienie zostanie dostarczone na adres: {address}.", + "Dostawa będzie na adres: {address}.", + "Adres dostawy: {address}." + ], + "inform/payment": [ + "Metoda płatności to: {payment-method}.", + "Płatność realizujesz przez: {payment-method}.", + "Wybrałeś metodę płatności: {payment-method}.", + "Płatność: {payment-method}.", + "Możesz zapłacić kartą, gotówką lub blikiem" + ], + "affirm": [ + "Świetnie! Napisz co Ci chodzi po głowie.", + "Dobrze! Co dalej?", + "OK! Co chciałbyś zamówić?", + "Super! Co dalej?", + "Dobrze! Jakie dalsze zamówienia?" + ], + "request/delivery-price": [ + "Koszt dostawy wynosi {delivery-price} zł.", + "Cena dostawy to {delivery-price} zł.", + "Za dostawę zapłacisz {delivery-price} zł.", + "Dostawa kosztuje {delivery-price} zł.", + "Koszt dostawy: {delivery-price} zł." + ], + "request/menu": [ + "Oto nasze menu: {menu}.", + "Nasze menu obejmuje: {menu}.", + "Proszę, oto lista dostępnych dań: {menu}.", + "Dostępne dania to: {menu}.", + "W naszym menu znajdziesz: {menu}." + ], + "inform/time": [ + "Aktualny czas to {time}.", + "Jest teraz {time}.", + "Czas: {time}.", + "Godzina: {time}.", + "Obecny czas: {time}." + ], + "request/drinks": [ + "Jakie napoje chciałbyś zamówić?", + "Proszę wybrać napoje do zamówienia.", + "Jakie napoje dołączamy do zamówienia?", + "Co chciałbyś pić?", + "Proszę podać napoje do zamówienia." + ], + "welcomemsg": [ + "Witaj w naszej wspaniałej pizzerii. W czym mogę pomóc?", + "Halo, halo, tu najlepsza pizza w mieście. Masz głoda?", + "Dzieńdoberek, gdyby wszyscy jedli nasze pizze, na świecie nie byłoby wojen. Jaką pizzę sobie dziś gruchniesz?", + ], + "request/menu": [ + "W naszym menu znajdują się pizze, spaghetti, gnocci oraz aranchini. Polecam potrawkę śląską po grecku.", + "Smażymy, gotujemy, prażymy, ale najlepiej nam wychodzi pizza. Na co masz ochotę?", + ], + "request/drink": [ + "Oferujemy napoje zimne, ciepłe i letnie. Cola, fanta, woda mineralna, kawa, herbata lub frappe.", + "Może z alkoholem? Mamy świeżo warzone piwo", + ], "request/price": [ "Cena za {food} wynosi {price} zł.", "Koszt {food} to {price} zł.", @@ -41,19 +140,10 @@ templates = { "Które sosy mają być do {food}?", "Wybierz sosy do {food}." ], - "inform/phone": [ - "Twój numer telefonu to: {phone}.", - "Podany numer telefonu: {phone}.", - "Numer telefonu, który podałeś, to: {phone}.", - "Twoje dane kontaktowe: {phone}.", - "Telefon kontaktowy: {phone}." - ], - "inform/order-complete": [ - "Twoje zamówienie zostało zrealizowane. Dziękujemy!", - "Zamówienie zakończone. Dziękujemy za zakupy!", - "Zamówienie zrealizowane. Czekaj na dostawę!", - "Twoje zamówienie jest gotowe. Dziękujemy!", - "Realizacja zamówienia zakończona. Dziękujemy!" + "request/food": [ + "Co chciałbyś zamówić?", + "Proszę podać na jaką pizzę masz ochotę", + "Którą pizzę wybrałeś?" ], "request/time": [ "Oczekiwany czas dostawy to {time} minut.", @@ -69,73 +159,6 @@ templates = { "Proszę wybrać rozmiar {pizza}: {sizes}.", "Mamy następujące rozmiary {pizza}: {sizes}." ], - "affirm": [ - "Świetnie! Napisz co Ci chodzi po głowie.", - "Dobrze! Co dalej?", - "OK! Co chciałbyś zamówić?", - "Super! Co dalej?", - "Dobrze! Jakie dalsze zamówienia?" - ], - "inform/delivery": [ - "Twoje zamówienie zostanie dostarczone na {address}.", - "Dostarczymy zamówienie na adres: {address}.", - "Dostawa na adres: {address}.", - "Twoje zamówienie jedzie na {address}.", - "Adres dostawy: {address}." - ], - "inform/address": [ - "Twoje zamówienie zostanie dostarczone na adres: {address}.", - "Dostawa będzie na adres: {address}.", - "Adres dostawy: {address}." - ], - "inform/payment": [ - "Metoda płatności to: {payment-method}.", - "Płatność realizujesz przez: {payment-method}.", - "Wybrałeś metodę płatności: {payment-method}.", - "Płatność: {payment-method}.", - "Możesz zapłacić kartą, gotówką lub blikiem" - ], - "request/delivery-price": [ - "Koszt dostawy wynosi {delivery-price} zł.", - "Cena dostawy to {delivery-price} zł.", - "Za dostawę zapłacisz {delivery-price} zł.", - "Dostawa kosztuje {delivery-price} zł.", - "Koszt dostawy: {delivery-price} zł." - ], - "inform/time": [ - "Aktualny czas to {time}.", - "Jest teraz {time}.", - "Czas: {time}.", - "Godzina: {time}.", - "Obecny czas: {time}." - ], - "request/drinks": [ - "Jakie napoje chciałbyś zamówić?", - "Proszę wybrać napoje do zamówienia.", - "Jakie napoje dołączamy do zamówienia?", - "Co chciałbyś pić?", - "Proszę podać napoje do zamówienia." - ], - "inform/name": [ - "Twoje imię to {name}.", - "Podane imię: {name}.", - "Twoje imię: {name}.", - "Masz na imię {name}.", - "Imię: {name}." - ], - "welcomemsg": [ - "Witaj w naszej wspaniałej pizzerii. W czym mogę pomóc?", - "Halo, halo, tu najlepsza pizza w mieście. Masz głoda?", - "Dzieńdoberek, gdyby wszyscy jedli nasze pizze, na świecie nie byłoby wojen. Jaką pizzę sobie dziś gruchniesz?", - ], - "request/menu": [ - "W naszym menu znajdują się pizze, spaghetti, gnocci oraz aranchini. Polecam potrawkę śląską po grecku.", - "Smażymy, gotujemy, prażymy, ale najlepiej nam wychodzi pizza. Na co masz ochotę?", - ], - "request/drink": [ - "Oferujemy napoje zimne, ciepłe i letnie. Cola, fanta, woda mineralna, kawa, herbata lub frappe.", - "Może z alkoholem? Mamy świeżo warzone piwo", - ], "bye": [ "Dziękujemy i do zobaczenia wkrótce.", "Polecamy się na przyszłość. Do zobaczenia!",