Spaces:
Sleeping
Sleeping
File size: 3,937 Bytes
d7f5c38 5f3eeaf 0b41ab5 d7f5c38 e233ec3 5f3eeaf 0b41ab5 5f3eeaf d7f5c38 5f3eeaf 01809c9 0b41ab5 08a24e4 f06ca02 17aa841 0b41ab5 d7f5c38 0b41ab5 08a24e4 0b41ab5 d7f5c38 e233ec3 d7f5c38 e233ec3 0b41ab5 d7f5c38 0b41ab5 d7f5c38 0b41ab5 d7f5c38 c52847e 0b41ab5 0b5fad3 214ffa6 5f3eeaf 214ffa6 0b41ab5 d7f5c38 0b41ab5 d7f5c38 |
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 |
import pandas as pd
import html
import json
import gradio as gr
def create_html_with_tooltip(id, prompt):
escaped_prompt = html.escape(prompt.replace("\n", "<br />"))
return f'<span class="tooltip" data-id="{id}" data-prompt="{escaped_prompt}">{id}</span>'
with open("prompt/prompt.json", "r") as file:
json_data = file.read()
prompts = json.loads(json_data)# Sample data for the leaderboard
winning_rate = [prompt['metric']['winning_number'] for prompt in prompts]
winning_rate = [num / sum(winning_rate) for num in winning_rate]
data = {
'Rank': [i+1 for i in range(len(prompts))],
'Methods': [create_html_with_tooltip(prompt['id'], prompt['prompt'].replace("\n","<br />")) for prompt in prompts],
'Rouge Score': [prompt['metric']['Rouge'] for prompt in prompts],
'Winning Rate': winning_rate,
'Authors': [prompt['author'] for prompt in prompts],
}
df = pd.DataFrame(data)
df.sort_values(by='Rouge Score', ascending=False, inplace=True, ignore_index=True)
df['Rank'] = range(1, len(df) + 1)
# Define a list of medal emojis
medals = ['π
', 'π₯', 'π₯']
for i in range(3):
df.loc[i, 'Authors'] = f"{medals[i]} {df.loc[i, 'Authors']}"
def create_html_with_tooltip(id, prompt):
escaped_prompt = html.escape(prompt.replace("\n", "<br />"))
return f'<span class="tooltip" data-id="{id}" data-prompt="{escaped_prompt}">{id}</span>'
def update_leaderboard(sort_by):
sorted_df = df.sort_values(by=sort_by, ascending=False, ignore_index=True)
sorted_df['Rank'] = range(1, len(sorted_df) + 1)
# Convert DataFrame to HTML with clickable headers for sorting and without escaping
table_html = sorted_df.to_html(index=False, escape=False)
# Add sorting links to column headers
for column in sorted_df.columns:
table_html = table_html.replace(f'<th>{column}</th>',
f'<th><a href="#" onclick="sortBy(\'{column}\'); return false;">{column}</a></th>')
# Load the HTML template
with open('pages/leaderboard_template.html', 'r') as file:
template = file.read()
# Create the sortBy function in JavaScript
sort_by_function = f"""
function sortBy(column) {{
const gradioEl = document.querySelector('gradio-app');
const dropdown = gradioEl.querySelector('select');
dropdown.value = column;
dropdown.dispatchEvent(new Event('change'));
}}
"""
# Insert the table HTML and sortBy function into the template
full_html = template.replace('<div id="leaderboard-container"></div>',
f'<div id="leaderboard-container">{table_html}</div>')
full_html = full_html.replace('// This function will be implemented in Python and injected here',
sort_by_function)
return full_html
def create_leaderboard():
with gr.Blocks(css="""
.tooltip { cursor: pointer; color: blue; text-decoration: underline; }
""") as demo:
gr.Markdown("# π Summarization Arena Leaderboard")
with gr.Row():
gr.Markdown("[Blog](placeholder) | [GitHub](placeholder) | [Paper](placeholder) | [Dataset](placeholder) | [Twitter](placeholder) | [Discord](placeholder)")
gr.Markdown("Welcome to our open platform for evaluating LLM summarization capabilities. We use the DATASET_NAME_PLACEHOLDER dataset to generate summaries with Qwen2-1.5b. These summaries are then evaluated by Rouge and Winning Rate from the arena")
sort_by = gr.Dropdown(list(df.columns), label="Sort by", value="Rouge Score")
gr.Markdown("**Performance**\n\n**methods**: 5, **questions**: 15")
leaderboard = gr.HTML(update_leaderboard("Rouge Score"), elem_id="leaderboard")
sort_by.change(update_leaderboard, inputs=[sort_by], outputs=[leaderboard])
return demo
if __name__ == "__main__":
demo = create_leaderboard()
demo.launch() |