From 253320ce1dcd287c37fd443473a2a4e61c8ba06c Mon Sep 17 00:00:00 2001 From: s464951 Date: Tue, 11 Jun 2024 01:56:44 +0200 Subject: [PATCH] dp mockup --- chatbot/modules/state_monitor.py | 7 ++++++- chatbot/modules/strategy.py | 28 ++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/chatbot/modules/state_monitor.py b/chatbot/modules/state_monitor.py index 21d0994..95a0cb5 100644 --- a/chatbot/modules/state_monitor.py +++ b/chatbot/modules/state_monitor.py @@ -13,7 +13,7 @@ class DialogStateMonitor: 'delivery_method': {}, 'payment_method': {}, 'email': {}, - 'order-complete': False, + 'order-completed': False, }, act='', slot_names=[]) @@ -37,6 +37,11 @@ class DialogStateMonitor: ['item', 'address', 'card_nr', 'delivery_method', 'payment_method', 'email']) self.state['belief_state']['order-complete'] = all_filled + def find_first_empty_slot(self): + for slot_name, slot_value in self.state['belief_state'].items(): + if slot_name != 'order-completed' and self.is_value_empty(slot_value): + return slot_name + def update(self, act: UserAct) -> None: print(act) if act.intent == 'inform': diff --git a/chatbot/modules/strategy.py b/chatbot/modules/strategy.py index c669c4c..27a59c2 100644 --- a/chatbot/modules/strategy.py +++ b/chatbot/modules/strategy.py @@ -1,8 +1,24 @@ -import random +from modules.nlu import UserAct, Slot +from numpy.random.mtrand import random -class DialogueStrategy: - @staticmethod - def decide_response(state: dict, responses) -> str: - intent_responses = responses.get(state['last_intent'], ["Przepraszam, nie rozumiem. Możesz to powtórzyć?"]) - return random.choice(intent_responses) +class DialoguePolicy: + def __init__(self, dst): + self.dialogue_state = dst.state + + def next_action(self): + if not self.dialogue_state['belief_state']['order-complete']: + user_intent = self.dialogue_state['act'] + if user_intent == "inform": + empty_slot = dst.find_first_empty_slot() + return UserAct(intent="request", slots=[Slot(name=empty_slot, value='')]) + if user_intent == "request": + if self.dialogue_state['slot_names']: + slot = random.choice(self.state['slot_names']) + return UserAct(intent="inform", slots=[Slot(name=slot, value='')]) + else: + return UserAct(intent="inform", slots=[Slot(name='unknown', value='')]) + if user_intent == "bye": + return UserAct(intent="bye", slots=[Slot(name='', value='')]) + else: + return UserAct(intent= "inform", slots=[Slot(name='confirmation', value='Zamówienie złożono poprawnie.')]) \ No newline at end of file