File size: 6,014 Bytes
7631655
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cff50c9
 
7631655
cff50c9
4a2140f
 
 
 
 
 
7631655
4a2140f
7631655
 
 
 
 
 
 
4a2140f
 
7631655
4a2140f
7631655
 
 
 
 
4a2140f
7631655
4a2140f
7631655
4a2140f
7631655
4a2140f
7631655
4a2140f
7631655
 
 
4a2140f
7631655
4a2140f
7631655
 
 
 
 
4a2140f
7631655
4a2140f
7631655
 
 
 
 
cff50c9
7631655
 
 
 
 
 
 
 
 
 
cff50c9
7acb7fd
7631655
 
 
 
 
 
 
 
 
 
 
 
 
4a2140f
 
cff50c9
7631655
 
 
 
 
cff50c9
4a2140f
7631655
 
 
 
 
 
 
 
 
 
 
 
4a2140f
 
 
 
7631655
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import json
import re
import argparse
import gradio as gr

# Load the JSONL file
def load_jsonl(file_path):
    data = []
    with open(file_path, 'r') as f:
        for line in f:
            data.append(json.loads(line))
    return data

def display_pairwise_answer(data):
    chat_mds = pairwise_to_gradio_chat_mds(data)
    return chat_mds

newline_pattern1 = re.compile("\n\n(\d+\. )")
newline_pattern2 = re.compile("\n\n(- )")

def post_process_answer(x):
    return x

def pairwise_to_gradio_chat_mds(data):
    end = data["turn"] * 3
    ans_a = data["conversation_a"]
    ans_b = data["conversation_b"]

    mds = [""] * end
    base = 0
    for i in range(0, end, 3):
        mds[i] = "## User Prompt\n" + data["conversation_a"][base]["content"].strip()
        mds[i + 1] = f"## {data['model_a']}\n" + post_process_answer(ans_a[base + 1]["content"].strip())
        mds[i + 2] = f"## {data['model_b']}\n" + post_process_answer(ans_b[base + 1]["content"].strip())
        base += 2

    if data["winner"] == "tie":
        winner = "tie"
    elif data["winner"] == "model_a":
        winner = "gemini" if "gemini" in data["model_a"] else "opponent"
    else:
        winner = "gemini" if "gemini" in data["model_b"] else "opponent"

    mds += [f"## Winner: {winner}"]
    mds += [""] * (16 - len(mds))
    return mds

# Filtering functions
def filter_by_language(language):
    return [item for item in data if item['language'] == language]

def filter_by_winner(winner_model, filtered_data):
    if winner_model == "anyone":
        return [item for item in filtered_data]
    return [item for item in filtered_data if item['winner'] == winner_model]

def filter_by_conversation_a_prefix(prefix, filtered_data):
    return [item for item in filtered_data if item['conversation_a'][0]["content"][:128] == prefix]

# Create Gradio interface
def update_winner_and_questions(language):
    filtered_data = filter_by_language(language)
    winners = ["anyone"] + sorted(set(item['winner'] for item in filtered_data))
    prefixes = [item['conversation_a'][0]["content"][:128] for item in filtered_data]
    return gr.update(choices=winners, value=winners[0]), gr.update(choices=prefixes, value=prefixes[0])

def update_question_options(language, winner_model):
    filtered_data = filter_by_language(language)
    filtered_data = filter_by_winner(winner_model, filtered_data)
    prefixes = [item['conversation_a'][0]["content"][:128] for item in filtered_data]
    return gr.update(choices=prefixes, value=prefixes[0])

def display_filtered_data(language, winner_model, prefix):
    filtered_data = filter_by_language(language)
    filtered_data = filter_by_winner(winner_model, filtered_data)
    filtered_data = filter_by_conversation_a_prefix(prefix, filtered_data)
    if len(filtered_data) == 0:
        return [""] * 16
    return pairwise_to_gradio_chat_mds(filtered_data[0])

def next_question(language, winner_model, prefix):
    filtered_data = filter_by_language(language)
    filtered_data = filter_by_winner(winner_model, filtered_data)
    all_items = [item['conversation_a'][0]["content"][:128] for item in filtered_data]
    if prefix:
        i = all_items.index(prefix) + 1
    else:
        i = 0

    if i >= len(all_items):
        return gr.update(choices=all_items, value=all_items[-1])
    return gr.update(choices=all_items, value=all_items[i])

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--host", type=str, default="0.0.0.0")
    parser.add_argument("--port", type=int)
    parser.add_argument("--share", action="store_true")
    args = parser.parse_args()

    data = load_jsonl('gemini_battles.jsonl')

    default_lang = "English"
    filter_data = filter_by_language(language=default_lang)
    question_prefixes = [item['conversation_a'][0]["content"][:128] for item in filter_data]
    default_question = question_prefixes[2]

    with gr.Blocks() as demo:
        gr.Markdown(value="# Welcome to gemini-1.5-pro-api-0514 battles")
        with gr.Row():
            with gr.Column():
                languages = ["English"] + list(sorted(set([item['language'] for item in data if item['language'] != "English"])))
                language_dropdown = gr.Dropdown(label="Select Language", choices=languages, value=default_lang)
            with gr.Column():
                winners = ["anyone"] + sorted(set(item['winner'] for item in filter_data))
                winner_dropdown = gr.Dropdown(label="Winner Model", choices=winners, value="anyone")

        with gr.Row():
            with gr.Column(scale=5):
                question_dropdown = gr.Dropdown(label="Select Question", choices=question_prefixes, value=default_question)
            with gr.Column():
                next_button = gr.Button("Next Question")

        default_chat_mds = display_filtered_data(default_lang, "anyone", default_question)
        chat_mds = []
        for i in range(5):
            chat_mds.append(gr.Markdown(elem_id=f"user_question_{i+1}", value=default_chat_mds[len(chat_mds)]))
            with gr.Row():
                for j in range(2):
                    with gr.Column(scale=100):
                        chat_mds.append(gr.Markdown(value=default_chat_mds[len(chat_mds)]))
                    if j == 0:
                        with gr.Column(scale=1, min_width=8):
                            gr.Markdown()
        chat_mds.append(gr.Markdown())

        language_dropdown.change(fn=update_winner_and_questions, inputs=language_dropdown, outputs=[winner_dropdown, question_dropdown])
        winner_dropdown.change(fn=update_question_options, inputs=[language_dropdown, winner_dropdown], outputs=question_dropdown)
        next_button.click(fn=next_question, inputs=[language_dropdown, winner_dropdown, question_dropdown], outputs=question_dropdown)
        question_dropdown.change(fn=display_filtered_data, inputs=[language_dropdown, winner_dropdown, question_dropdown], outputs=chat_mds)

    demo.launch(share=args.share)