Spaces:
Sleeping
Sleeping
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) |