def run_pipeline()

in main.py [0:0]


def run_pipeline(entity_linking_method, entity_linking_threshold=None, is_BIO=False):
    conversations = dict()
    dialog_states = dict()
    latest_intents = dict()
    for ids, output in zip(test_ids, nlu_result):
        if not is_BIO:
            conver_id, turn_id, sentence_id = ids[0], ids[1], ids[2]
        else:
            conver_id, turn_id = ids[0], ids[1]

        if conver_id not in conversations:
            conversations[conver_id] = []
            dialog_states[conver_id] = {None: {}}
            latest_intents[conver_id] = [None]

        predicted_intents, texts = output.split('->')
        intents = predicted_intents[1:-2].split('<div>')
        tokens = texts.strip().split(' ')
        word_list = []
        label_list = []
        for t in tokens:
            if t.startswith('[') and t.endswith(']') and ':' in t:
                colon_idx = t.rindex(':')
                word_list.append(t[1:colon_idx])
                the_label = t[colon_idx + 1:-1]
                #                 assert the_label in bot_definition['slots']
                label_list.append(the_label)
            else:
                word_list.append(t)
                label_list.append('O')

        if is_BIO:
            slot_values = get_slot_values_BIO(word_list, label_list)
        else:
            slot_values = get_slot_values(word_list, label_list)
        entity_values = entity_linking_list(slot_values, distinct_slot_values, method=entity_linking_method,
                                            threshold=entity_linking_threshold)
        main_intents = [intent for intent in intents if intent in bot_definition['main_intents']]

        # Update dialog states
        if main_intents != []:
            for intent in main_intents:
                if intent not in dialog_states[conver_id]:
                    dialog_states[conver_id][intent] = dict()
                dialog_states[conver_id][intent].update(entity_values)
            latest_intents[conver_id] = main_intents

        else:
            for intent in latest_intents[conver_id]:
                dialog_states[conver_id][intent].update(entity_values)

        sentence_object = {
            'conversationId': conver_id,
            'turnNumber': turn_id,
            'utterance': ' '.join(word_list),
            'intents': predicted_intents[1:-2],
            'main_intents': main_intents,
            'slot_values': slot_values,
            'entity_values': entity_values,
            'dialog_states': copy.deepcopy(dialog_states[conver_id])
        }

        if not is_BIO:
            sentence_object['sentenceNumber'] = sentence_id
            sentence_object['utteranceId'] = f'<CONV>{conver_id}<TURN>{turn_id}<SENT>{sentence_id}'
        else:
            sentence_object['utteranceId'] = f'<CONV>{conver_id}<TURN>{turn_id}'

        # Violation detection
        violations_all = set()
        violation_details = []
        for intent, state in sentence_object['dialog_states'].items():
            if intent is None:
                continue
            related_constraints = constraints_for_intent[intent]
            for constraint in related_constraints:
                is_applicable, violations = find_violations(constraint, state, distinct_slot_values)
                if is_applicable and len(violations) > 0:  # No violations
                    violations_all.add((intent, constraint['name']))
                    violation_details.append(
                        {'intent': intent, 'constraint': constraint['name'], 'violations': violations})
        sentence_object['violations'] = list(violations_all)
        sentence_object['violation_details'] = violation_details

        conversations[conver_id].append(sentence_object)

    entity_linking_results = get_linking_results_of_method(test_data, conversations, distinct_slot_values, entity_linking_method, threshold=entity_linking_threshold)
    pipeline_results = evaluation(test_data, conversations)
    pipeline_results_no_intent = evaluation_no_intent(test_data, conversations)
    return conversations, entity_linking_results, pipeline_results, pipeline_results_no_intent