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:
|
||||
def __init__(self):
|
||||
self.name = ["Michał"]
|
||||
|
||||
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 __init__(self, templates):
|
||||
self.templates = templates
|
||||
|
||||
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