示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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
示例#7
0
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