Example #1
0
def home():
    utterance = request.args.get('utterance')
    user_session_id = request.args.get('user_session_id')
    key_session_id = "session_id"
    web_api = WebApi(utterance, new_session)
    active_module_node = dict()
    last_active_node = None
    # check for last active state for a user
    active_state_nodes, active_bot, active_module_id = web_api.get_user_active_state(
        key_session_id, user_session_id)
    if active_state_nodes:
        if active_module_id in active_state_nodes:
            last_active_node = active_state_nodes[active_module_id]

    if not active_bot:
        bot = initialize_bot()
    else:
        bot = active_bot

    chat = ConsoleChatInterface(bot)

    if not utterance or user_session_id == "null":
        if user_session_id == "null":  # for new user coming first time
            session_id = str(uuid.uuid4())
            final_api_output = add_user_and_start_chat(
                web_api, chat, active_state_nodes, key_session_id, session_id,
                last_active_node, bot, active_module_id, '')
            logger.info(json.dumps(final_api_output))
        else:  # if user open new tab while old tab is also open i.e. session exist
            session_id = user_session_id
            if not web_api.user_session_exist(key_session_id, session_id):
                final_api_output = add_user_and_start_chat(
                    web_api, chat, active_state_nodes, key_session_id,
                    session_id, last_active_node, bot, active_module_id, '')
                logger.info(json.dumps(final_api_output))

            else:  # for last user utterance as first bot message
                last_user_utterance = web_api.get_last_user_utterance(
                    key_session_id, user_session_id)
                if not last_user_utterance:  # if user open new tab without any chat in old tab
                    final_api_output = chat.start_chat('', active_state_nodes,
                                                       last_active_node,
                                                       active_module_id,
                                                       new_session, session_id)
                    logger.info(json.dumps(final_api_output))
                else:
                    active_node, module_id, final_api_output = chat.start_chat(
                        last_user_utterance, active_state_nodes,
                        last_active_node, active_module_id, new_session,
                        session_id)
                    logger.info(json.dumps(final_api_output))
    else:

        session_id = user_session_id
        active_node, module_id, final_api_output = chat.start_chat(
            utterance, active_state_nodes, last_active_node, active_module_id,
            new_session, session_id)

        if active_node and module_id and active_bot:
            last_active_node = active_node
            active_module_id = module_id
            active_user_bot = active_bot

        if web_api.user_session_exist(key_session_id, session_id):
            web_api.update_last_user_utterance(key_session_id, user_session_id)
            if active_node and module_id and active_bot:
                web_api.update_user_active_state(key_session_id,
                                                 user_session_id, active_node,
                                                 active_bot, module_id)

        logger.info(json.dumps(final_api_output))

    # if last_active_node:
    #     web_api.print_active_tree(last_active_node)

    chatbot_output = {"chatbot_output": final_api_output}
    user_session_id = {str(key_session_id): session_id}
    final_api_output = web_api.finalize_api_output(chatbot_output,
                                                   user_session_id)

    return jsonify(final_api_output)