fuhgedaboudit / main_page.py
Amber Tanaka
Bug Bash Fixes (#79)
8bd1c00 unverified
import matplotlib
matplotlib.use('Agg')
import gradio as gr
from ui_components import create_leaderboard_display, get_full_leaderboard_data
from content import (
CITATION_BUTTON_LABEL,
CITATION_BUTTON_TEXT,
INTRO_PARAGRAPH
)
# --- Global State for Viewers (simple caching) ---
CACHED_VIEWERS = {}
CACHED_TAG_MAPS = {}
def build_page():
with gr.Column(elem_id="home-page-content-wrapper"):
with gr.Row(elem_id="intro-row"):
with gr.Column(scale=6):
gr.HTML(INTRO_PARAGRAPH, elem_id="intro-paragraph")
with gr.Column(scale=4):
gr.HTML('<div class="diagram-placeholder">Future Diagram</div>')
# --- Leaderboard Display Section ---
gr.Markdown("---")
CATEGORY_NAME = "Overall"
gr.HTML(f'<h2>AstaBench {CATEGORY_NAME} Leaderboard <span style="font-weight: normal; color: inherit;">(Aggregate)</span></h2>', elem_id="main-header")
with gr.Tabs() as tabs:
with gr.Tab("Results: Test Set") as test_tab:
test_df, test_tag_map = get_full_leaderboard_data("test")
if not test_df.empty:
gr.Markdown("**Test Set** results are reserved for final assessment. This helps ensure that the agent generalizes well to unseen problems.")
create_leaderboard_display(
full_df=test_df,
tag_map=test_tag_map,
category_name=CATEGORY_NAME, # Use our constant
split_name="test"
)
else:
gr.Markdown("No data available for test split.")
with gr.Tab("Results: Validation Set") as validation_tab:
# 1. Load all necessary data for the "validation" split ONCE.
validation_df, validation_tag_map = get_full_leaderboard_data("validation")
# Check if data was loaded successfully before trying to display it
if not validation_df.empty:
gr.Markdown("**Validation Set** results are used during development to tune and compare agents before final testing.")
# 2. Render the display by calling the factory with the loaded data.
create_leaderboard_display(
full_df=validation_df,
tag_map=validation_tag_map,
category_name=CATEGORY_NAME, # Use our constant
split_name="validation"
)
else:
gr.Markdown("No data available for validation split.")
# hiding this for now till we have the real paper data
# with gr.Accordion("πŸ“™ Citation", open=False):
# gr.Textbox(value=CITATION_BUTTON_TEXT, label=CITATION_BUTTON_LABEL, elem_id="citation-button-main", interactive=False)
# JavaScript to show the TEST nav, hide the VALIDATION nav, AND fix the plots.
show_validation_js = """
() => {setTimeout(() => { window.dispatchEvent(new Event('resize')) }, 0);}
"""
# Assign the pure JS functions to the select events. No Python `fn` is needed.
validation_tab.select(fn=None, inputs=None, outputs=None, js=show_validation_js)
if __name__ == "__main__":
demo.launch()