Source code for chatbot.manager.service_manager
from cluster.service.service_predict_cnn import PredictNetCnn
from chatbot.common.chat_conf_manager import ChatBotConfManager
from chatbot.common.chat_share_data import ShareData
from chatbot.nlp.entity_synonym import EntitySynonym
from chatbot.common.chat_knowledge_data_dict import ChatKnowledgeDataDict
from chatbot.nlp.entity_analyzer import EntityAnalyzer
from chatbot.nlp.rule_intent_analyzer import RuleIntentAnalyzer
from chatbot.nlp.intend_analyzer import IntendAnalyzer
from chatbot.nlp.entity_recognizer import EntityRecognizer
from chatbot.manager.service_mapper import ServiceMapper
from chatbot.decision.summrize_result import SummrizeResult
import threading, logging
from chatbot.decision.decision_maker import DecisionMaker
import json
[docs]class ServiceManager:
"""
This is the class where all the chatbot service start
"""
def __init__(self, cb_id):
"""
initialze chatbot servic with id
:param cb_id:
"""
try :
self.cb_id = cb_id
self.chatbot_conf = ChatBotConfManager(cb_id)
self.chat_knowledge_data_dict = ChatKnowledgeDataDict(cb_id)
self.chat_knowledge_data_dict.initialize(cb_id)
self.chat_share_data = ShareData()
self.entity_synonym = EntitySynonym(cb_id)
self.entity_analyzer = EntityAnalyzer(cb_id)
self.rule_intent_analyzer = RuleIntentAnalyzer(self.chat_knowledge_data_dict.get_intent_conf("custom"))
self.entity_recognizer = EntityRecognizer(cb_id,self.chatbot_conf.get_ner_model())
self.intent_analyzer_rule = IntendAnalyzer(cb_id,self.chatbot_conf.get_intent_model())
self.intent_analyzer_ner = IntendAnalyzer(cb_id,self.chatbot_conf.get_pattern_intent_model())
self.decision_maker = DecisionMaker(self.chat_knowledge_data_dict)
self.service_mapper = ServiceMapper(cb_id, self.entity_synonym)
self.summrize_result = SummrizeResult(self.chat_knowledge_data_dict)
except Exception as e :
raise Exception ("error on ChatBot ServiceManager init process : {0}".format(e))
[docs] class ThreadCls(threading.Thread) :
def __init__(self, input, func, type):
threading.Thread.__init__(self)
self.input = input
self.ret = None
self.func = func
self.type = type
[docs] def run(self):
self.ret = self.func(self.input, self.type)
[docs] def join(self):
threading.Thread.join(self)
return self.ret
[docs] def run_chatbot(self, req_ctx, mode='none'):
"""
execute chatbot as api mode
:return:
"""
try :
logging.info("■■■■■■■■■■ 챗봇 시작 ■■■■■■■■■■")
### UUID mapping ###
### set parms from client ###
share_ctx = self.chat_share_data.load_json(req_ctx)
### get rule intent ###
rule_intent = self.rule_intent_analyzer.parse(share_ctx)
### nlp process ###
if(not rule_intent):
share_ctx = self.entity_analyzer.parse(share_ctx)
share_ctx = self.entity_recognizer.parse(share_ctx)
if(mode == 'thread'):
logging.info("■■■■■■■■■■ Thread Mode ■■■■■■■■■■")
job_list = [
self.ThreadCls(share_ctx, self.intent_analyzer_rule.parse, 'Rule'),
self.ThreadCls(share_ctx, self.intent_analyzer_ner.parse, 'NER')]
for job in job_list:
job.start()
for job in job_list:
share_ctx.__dict__.update(job.join().__dict__)
else :
logging.info("■■■■■■■■■■ None Thread Mode ■■■■■■■■■■")
share_ctx = self.intent_analyzer_rule.parse(share_ctx, 'Rule')
share_ctx = self.intent_analyzer_ner.parse(share_ctx, 'NER')
### summrize result ###
share_ctx = self.summrize_result.parse(share_ctx)
share_ctx.add_test_client_data()
### decision maker ###
share_ctx = self.decision_maker.run(share_ctx)
### UUID mapping ###
share_ctx = self.service_mapper.run(share_ctx)
logging.info("■■■■■■■■■■ 챗봇 끝 ■■■■■■■■■■")
### 4. return result as json ###
share_ctx = share_ctx.add_extra_client_data()
return share_ctx.to_json()
except Exception as e:
raise Exception (e)
[docs] def run_chatbot_with_file(self, req_ctx):
"""
uplaod files
:return:
"""
PredictNetCnn().run("", "", req_ctx)