openhands-index / main_page.py
openhands
Hide incomplete entries from home page charts by default
0b126a8
Raw
History Blame Contribute Delete
5.75 kB
import matplotlib
matplotlib.use('Agg')
import gradio as gr
import pandas as pd
from ui_components import (
create_leaderboard_display,
get_full_leaderboard_data,
create_winners_by_category_html,
)
from content import (
CITATION_BUTTON_LABEL,
CITATION_BUTTON_TEXT,
INTRO_PARAGRAPH
)
from visualizations import (
create_evolution_over_time_chart,
create_accuracy_by_size_chart
)
from constants import MARK_BY_DEFAULT
# --- Global State for Viewers (simple caching) ---
CACHED_VIEWERS = {}
CACHED_TAG_MAPS = {}
def filter_complete_entries(df: pd.DataFrame) -> pd.DataFrame:
if df.empty:
return df.copy()
category_score_columns = [
'Issue Resolution Score',
'Frontend Score',
'Greenfield Score',
'Testing Score',
'Information Gathering Score',
]
if all(column in df.columns for column in category_score_columns):
return df[df[category_score_columns].notna().all(axis=1)].copy()
if 'Categories Completed' in df.columns:
categories_completed = pd.to_numeric(df['Categories Completed'], errors='coerce')
return df[categories_completed >= 5].copy()
if 'Categories Attempted' in df.columns:
return df[df['Categories Attempted'] == '5/5'].copy()
return df.copy()
def build_page():
with gr.Row(elem_id="intro-row"):
with gr.Column(scale=1):
gr.HTML(INTRO_PARAGRAPH, elem_id="intro-paragraph")
# --- Leaderboard Display Section ---
gr.Markdown("---")
CATEGORY_NAME = "Overall"
gr.HTML(f'<h2>OpenHands Index {CATEGORY_NAME} Leaderboard <span style="font-weight: normal; color: inherit;">(Aggregate)</span></h2>', elem_id="main-header")
test_df, test_tag_map = get_full_leaderboard_data("test")
if not test_df.empty:
show_incomplete_checkbox, show_open_only_checkbox, mark_by_dropdown = create_leaderboard_display(
full_df=test_df,
tag_map=test_tag_map,
category_name=CATEGORY_NAME,
split_name="test"
)
test_df_complete = filter_complete_entries(test_df)
has_complete_entries = len(test_df_complete) > 0
if 'Openness' in test_df.columns:
test_df_open = test_df[test_df['Openness'].str.lower() == 'open'].copy()
else:
test_df_open = test_df.copy()
test_df_complete_open = filter_complete_entries(test_df_open)
initial_df = test_df_complete if has_complete_entries else test_df
# --- Winners by Category Section ---
gr.Markdown("---")
gr.HTML('<h2>Winners by Category</h2>', elem_id="winners-header")
gr.Markdown("Top 5 performing systems in each benchmark category.")
winners_component = gr.HTML(
create_winners_by_category_html(initial_df, top_n=5),
elem_id="winners-by-category",
)
# --- New Visualization Sections ---
gr.Markdown("---")
# Evolution Over Time Section
gr.HTML('<h2>Evolution Over Time</h2>', elem_id="evolution-header")
gr.Markdown("Track how model performance has improved over time based on release dates.")
evolution_component = gr.Plot(
value=create_evolution_over_time_chart(initial_df, MARK_BY_DEFAULT),
elem_id="evolution-chart",
)
gr.Markdown("---")
# Open Model Accuracy by Size Section (always shows open models only by design)
gr.HTML('<h2>Open Model Accuracy by Size</h2>', elem_id="size-accuracy-header")
gr.Markdown("Compare open-weights model performance against their parameter count.")
size_component = gr.Plot(
value=create_accuracy_by_size_chart(initial_df, MARK_BY_DEFAULT),
elem_id="size-accuracy-chart",
)
def update_extra_sections(show_incomplete, show_open_only, mark_by):
include_incomplete = show_incomplete or not has_complete_entries
base_df = test_df if include_incomplete else test_df_complete
base_df_open = test_df_open if include_incomplete else test_df_complete_open
winners_df = base_df_open if show_open_only else base_df
winners_html = create_winners_by_category_html(winners_df, top_n=5)
evolution_fig = create_evolution_over_time_chart(winners_df, mark_by)
size_fig = create_accuracy_by_size_chart(base_df, mark_by)
return winners_html, evolution_fig, size_fig
show_incomplete_input = show_incomplete_checkbox if show_incomplete_checkbox is not None else gr.State(value=True)
show_open_only_input = show_open_only_checkbox if show_open_only_checkbox is not None else gr.State(value=False)
extra_section_inputs = [show_incomplete_input, show_open_only_input, mark_by_dropdown]
if show_incomplete_checkbox is not None:
show_incomplete_checkbox.change(
fn=update_extra_sections,
inputs=extra_section_inputs,
outputs=[winners_component, evolution_component, size_component]
)
if show_open_only_checkbox is not None:
show_open_only_checkbox.change(
fn=update_extra_sections,
inputs=extra_section_inputs,
outputs=[winners_component, evolution_component, size_component]
)
if mark_by_dropdown is not None:
mark_by_dropdown.change(
fn=update_extra_sections,
inputs=extra_section_inputs,
outputs=[winners_component, evolution_component, size_component]
)
else:
gr.Markdown("No data available.")
if __name__ == "__main__":
demo.launch()