def extract_and_save_wikipage(vars, save=False): flag = False user_uttr = state_utils.get_last_human_utterance(vars) bot_uttr = state_utils.get_last_bot_utterance(vars) shared_memory = state_utils.get_shared_memory(vars) cur_facts = shared_memory.get("cur_facts", {}) for fact in cur_facts: wikihow_page = fact.get("wikihow_page", "") condition = fact["cond"] checked = check_condition(condition, user_uttr, bot_uttr, shared_memory) if checked and wikihow_page: flag = True if save: state_utils.save_to_shared_memory( vars, cur_wikihow_page=wikihow_page) state_utils.save_to_shared_memory(vars, cur_facts={}) break wikipedia_page = fact.get("wikipedia_page", "") condition = fact["cond"] checked = check_condition(condition, user_uttr, bot_uttr, shared_memory) if checked and wikipedia_page: flag = True if save: state_utils.save_to_shared_memory( vars, cur_wikipedia_page=wikipedia_page) state_utils.save_to_shared_memory(vars, cur_facts={}) break return flag
def make_smalltalk_response(vars, topic_config, shared_memory, utt_info, used_utt_nums, num): user_uttr = state_utils.get_last_human_utterance(vars) bot_uttr = state_utils.get_last_bot_utterance(vars) response = "" utt_list = utt_info["utt"] found_ackn = "" ackns = utt_info.get("ackn", []) for ackn in ackns: condition = ackn["cond"] if check_condition(condition, user_uttr, bot_uttr, shared_memory): found_ackn = ackn["answer"] break found_prev_ackn = "" ackns = shared_memory.get("ackn", []) for ackn in ackns: condition = ackn["cond"] if check_condition(condition, user_uttr, bot_uttr, shared_memory): found_prev_ackn = ackn["answer"] break found_ackn = found_ackn or found_prev_ackn resp_list = make_resp_list(vars, utt_list, topic_config, shared_memory) if resp_list: response = " ".join(resp_list).strip().replace(" ", " ") used_utt_nums.append(num) cur_facts = utt_info.get("facts", {}) state_utils.save_to_shared_memory(vars, cur_facts=cur_facts) next_ackn = utt_info.get("next_ackn", []) state_utils.save_to_shared_memory(vars, ackn=next_ackn) expected_entities = utt_info.get("expected_entities", {}) if expected_entities: state_utils.save_to_shared_memory( vars, expected_entities=expected_entities) expected_subtopic_info = utt_info.get("expected_subtopic_info", {}) logger.info( f"print expected_subtopic_info {expected_subtopic_info} utt_info {utt_info}" ) state_utils.save_to_shared_memory( vars, expected_subtopic_info=expected_subtopic_info) if found_ackn: found_ackn_sentences = nltk.sent_tokenize(found_ackn) found_ackn_list = make_resp_list(vars, found_ackn_sentences, topic_config, shared_memory) found_ackn = " ".join(found_ackn_list) response = f"{found_ackn} {response}".strip().replace(" ", " ") return response, used_utt_nums
def if_facts_agree(vars): flag = False user_uttr = state_utils.get_last_human_utterance(vars) bot_uttr = state_utils.get_last_bot_utterance(vars) shared_memory = state_utils.get_shared_memory(vars) cur_facts = shared_memory.get("cur_facts", {}) for fact in cur_facts: condition = fact["cond"] flag = check_condition(condition, user_uttr, bot_uttr, shared_memory) if flag: break return flag
def check_utt_cases(vars, utt_info): flag = False user_uttr = state_utils.get_last_human_utterance(vars) bot_uttr = state_utils.get_last_bot_utterance(vars) shared_memory = state_utils.get_shared_memory(vars) utt_cases = utt_info.get("utt_cases", []) if utt_cases: for utt_case in utt_cases: condition = utt_case["cond"] if check_condition(condition, user_uttr, bot_uttr, shared_memory): flag = True else: flag = True return flag
def check_acknowledgements(vars, topic_config): response = "" user_uttr = state_utils.get_last_human_utterance(vars) bot_uttr = state_utils.get_last_bot_utterance(vars) shared_memory = state_utils.get_shared_memory(vars) found_topic = shared_memory.get("special_topic", "") if found_topic: ackns = topic_config[found_topic].get("ackn", []) for ackn in ackns: condition = ackn["cond"] if check_condition(condition, user_uttr, bot_uttr, shared_memory): answer = ackn["answer"] resp_list = make_resp_list(vars, answer, topic_config, shared_memory) if resp_list: response = " ".join(resp_list).strip().replace(" ", " ") break return response
def check_switch(vars, topic_config): user_uttr = state_utils.get_last_human_utterance(vars) bot_uttr = state_utils.get_last_bot_utterance(vars) shared_memory = state_utils.get_shared_memory(vars) found_topic = shared_memory.get("special_topic", "") first_utt = False utt_can_continue = "can" utt_conf = 0.0 shared_memory = state_utils.get_shared_memory(vars) for topic in topic_config: linkto = topic_config[topic].get("linkto", []) for phrase in linkto: if phrase.lower() in bot_uttr["text"].lower(): found_topic = topic first_utt = True break pattern = topic_config[topic].get("pattern", "") if pattern: if if_chat_about_particular_topic(user_uttr, bot_uttr, compiled_pattern=pattern): utt_can_continue = "must" utt_conf = 1.0 found_topic = topic first_utt = True elif re.findall(pattern, user_uttr["text"]) and not found_topic: utt_can_continue = "prompt" utt_conf = 0.95 found_topic = topic first_utt = True switch_on = topic_config[topic].get("switch_on", []) for switch_elem in switch_on: condition = switch_elem["cond"] if check_condition(condition, user_uttr, bot_uttr, shared_memory): found_topic = topic utt_can_continue = switch_elem.get("can_continue", "can") utt_conf = switch_elem.get("conf", utt_conf) first_utt = True break if found_topic: break return found_topic, first_utt, utt_can_continue, utt_conf
def extract_and_save_subtopic(vars, topic_config, found_topic): user_uttr = state_utils.get_last_human_utterance(vars) bot_uttr = state_utils.get_last_bot_utterance(vars) shared_memory = state_utils.get_shared_memory(vars) expected_subtopic_info_list = shared_memory.get("expected_subtopic_info", []) subtopics = shared_memory.get("subtopics", []) for expected_subtopic_info in expected_subtopic_info_list: if isinstance(expected_subtopic_info, str) and found_topic: global_subtopic_info = topic_config[found_topic].get( "expected_subtopics", {}) if expected_subtopic_info in global_subtopic_info: expected_subtopic_info = global_subtopic_info[ expected_subtopic_info] if isinstance(expected_subtopic_info, dict): subtopic = expected_subtopic_info["subtopic"] condition = expected_subtopic_info["cond"] flag = check_condition(condition, user_uttr, bot_uttr, shared_memory) logger.info( f"expected_subtopic_info {expected_subtopic_info} flag {flag}") if flag and subtopic not in subtopics: subtopics.append(subtopic) prev_available_utterances = shared_memory.get( "available_utterances", []) available_utterances = expected_subtopic_info.get( "available_utterances", []) for utt_key in available_utterances: if utt_key not in prev_available_utterances: prev_available_utterances.append(utt_key) state_utils.save_to_shared_memory( vars, available_utterances=prev_available_utterances) if flag: state_utils.save_to_shared_memory(vars, subtopics=subtopics) state_utils.save_to_shared_memory(vars, expected_subtopic_info={}) break