Source code for chatbot.decision.decision_maker

from chatbot.common.chat_share_data import ShareData
from chatbot.story.story_board_manager import StoryBoardManager
from chatbot.services.service_provider import ServiceProvider
from chatbot.common.chat_story_conf_data import ChatStoryConfData


[docs]class DecisionMaker(ShareData): """ (1) check intend is clear , if not return intend select list (2) check intend service type (story board, ontology and etc) """ def __init__(self, dict_conf): self.dict_conf = dict_conf
[docs] def run(self, share_data): """ :param share_data: :return: """ try : if(len(share_data.get_intent_id()) > 1): pass elif(len(share_data.get_intent_id()) == 1): intent_conf = ChatStoryConfData(share_data.get_intent_id()[0]) if (not self._check_essential_entity(share_data.get_story_slot_entity().keys(), share_data)): pass elif(intent_conf.get_intent_story()[0]['fields']['story_type'] == 'response'): response_story = intent_conf.get_story_response(intent_conf.get_intent_story()[0]['pk']) share_data = StoryBoardManager(response_story).run(share_data) elif(intent_conf.get_intent_story()[0]['fields']['story_type'] == 'service'): service_story = intent_conf.get_story_service(intent_conf.get_intent_story()[0]['pk']) share_data = ServiceProvider(service_story).run(share_data) else: share_data.set_output_data("무슨말인지 모르겠어요") share_data.initialize_story() else: #intent 3개 이상 share_data.set_output_data("무슨말인지 모르겠어요") return share_data except Exception as e: raise Exception(e)
def _check_essential_entity(self, entity_list, share_data): check_value = True for entity in self.dict_conf.get_entity_key(share_data.get_intent_id()[0]): if (entity in entity_list): pass else : share_data.set_output_data(entity + " 값을 입력해 주세요") check_value = False break return check_value