hope it works
This commit is contained in:
parent
6ca7b66fb4
commit
fbd85d9e34
@ -1,10 +1,24 @@
|
|||||||
|
import re
|
||||||
|
from service.template_selector import select_template
|
||||||
|
import random
|
||||||
|
# from service.templates import templates
|
||||||
|
|
||||||
|
def parse_frame(frame):
|
||||||
|
if not hasattr(frame, 'act') or not hasattr(frame, 'slots'):
|
||||||
|
raise TypeError("Expected a Frame object with 'act' and 'slots' attributes.")
|
||||||
|
|
||||||
|
act = frame.act
|
||||||
|
slots = [{"name": slot.name, "value": slot.value} for slot in frame.slots]
|
||||||
|
|
||||||
|
return act, slots
|
||||||
|
|
||||||
class NaturalLanguageGeneration:
|
class NaturalLanguageGeneration:
|
||||||
def __init__(self):
|
def __init__(self, templates):
|
||||||
self.name = ["Michał"]
|
self.templates = templates
|
||||||
|
|
||||||
def respond_to_name_query(self, question):
|
|
||||||
if "jak masz na imię?" in question.lower():
|
|
||||||
return f"Nazywam się {self.name}."
|
|
||||||
else:
|
|
||||||
return "Nie rozumiem."
|
|
||||||
|
|
||||||
|
def generate(self, act, slots):
|
||||||
|
template = select_template(act, slots)
|
||||||
|
if template == "default/template":
|
||||||
|
template = random.choice(self.templates["default/template"])
|
||||||
|
slot_dict = {slot['name']: slot['value'] for slot in slots}
|
||||||
|
return template.format(**slot_dict)
|
35
src/service/template_selector.py
Normal file
35
src/service/template_selector.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import random
|
||||||
|
from service.templates import templates
|
||||||
|
|
||||||
|
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"
|
157
src/service/templates.py
Normal file
157
src/service/templates.py
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
templates = {
|
||||||
|
"inform/order": [
|
||||||
|
"Zamówiłeś {quantity} x {food}.",
|
||||||
|
"Twoje zamówienie to {quantity} x {food} {pizza}.",
|
||||||
|
"Mmmm... {food} {pizza} to rewelacyjny wybór. Czy chcesz coś do picia?",
|
||||||
|
"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/address": [
|
||||||
|
"Twój adres to: {address}.",
|
||||||
|
"Adres, który podałeś, to: {address}.",
|
||||||
|
"Dostawa na adres: {address}.",
|
||||||
|
"Dostarczymy na adres: {address}.",
|
||||||
|
"Twój podany adres to: {address}."
|
||||||
|
],
|
||||||
|
"request/price": [
|
||||||
|
"Cena za {food} wynosi {price} zł.",
|
||||||
|
"Koszt {food} to {price} zł.",
|
||||||
|
"Cena {pizza} o rozmiarze {size} wynosi {price} zł.",
|
||||||
|
"Za {quantity} x {pizza} zapłacisz {price} zł.",
|
||||||
|
"Koszt {food} to {price} zł."
|
||||||
|
],
|
||||||
|
"request/ingredients": [
|
||||||
|
"Nasza {food} {pizza} składa się z ciasta, sosu pomidorowego, sera i innych dodatków.",
|
||||||
|
"W {pizza} znajdziesz: {ingredients}.",
|
||||||
|
"{pizza} zawiera: {ingredients}.",
|
||||||
|
"W skład {pizza} wchodzi: {ingredients}.",
|
||||||
|
"Na {pizza} składają się: {ingredients}."
|
||||||
|
],
|
||||||
|
"request/sauce": [
|
||||||
|
"Jakie sosy chciałbyś do {food}?",
|
||||||
|
"Proszę wybrać sosy do {food}.",
|
||||||
|
"Jakie sosy zamawiasz do {food}?",
|
||||||
|
"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/time": [
|
||||||
|
"Oczekiwany czas dostawy to {time} minut.",
|
||||||
|
"Dostawa zajmie około {time} minut.",
|
||||||
|
"Czas dostawy to około {time} minut.",
|
||||||
|
"Przewidywany czas dostawy to {time} minut.",
|
||||||
|
"Twoje zamówienie dotrze w {time} minut."
|
||||||
|
],
|
||||||
|
"request/size": [
|
||||||
|
"Jaką wielkość {pizza} preferujesz? Mamy {sizes}.",
|
||||||
|
"Dostępne rozmiary {pizza} to {sizes}.",
|
||||||
|
"Jaką wielkość {pizza} chciałbyś zamówić? {sizes}.",
|
||||||
|
"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!",
|
||||||
|
"Do widzenia.",
|
||||||
|
],
|
||||||
|
"negate": [
|
||||||
|
"Przepraszam, nie mamy {ingredient/neg} w ofercie.",
|
||||||
|
"Niestety, {ingredient/neg} jest niedostępne.",
|
||||||
|
"Nie posiadamy {ingredient/neg} w menu.",
|
||||||
|
"Brak {ingredient/neg} w naszej ofercie.",
|
||||||
|
"Niestety, nie mamy {ingredient/neg}."
|
||||||
|
],
|
||||||
|
"default/template": [
|
||||||
|
"Przepraszamy, ale nie rozumiemy Twojego zapytania.",
|
||||||
|
"Proszę spróbować ponownie później.",
|
||||||
|
"Nie rozpoznajemy Twojej prośby, spróbuj ponownie.",
|
||||||
|
"Strasznie szybko to napisałeś, nie zrozumiałem...."
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user