hope it works

This commit is contained in:
s495724 2024-06-03 19:50:59 +02:00
parent 6ca7b66fb4
commit fbd85d9e34
3 changed files with 214 additions and 8 deletions

View File

@ -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)

View 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
View 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...."
]
}