siro1's picture
siro1 HF Staff
Feat: claude stuff but works
0339ef7
raw
history blame
2.63 kB
import gradio as gr
import asyncio
import time
import threading
from src.retrieve_data import populate_lb_data
leaderboard_data = {}
async def fetch_data():
"""Fetch the leaderboard data asynchronously"""
global leaderboard_data
try:
data = await populate_lb_data()
leaderboard_data = data
return True
except Exception as e:
print(f"Error fetching data: {e}")
return False
def background_update():
"""Background thread function to update data every 5 minutes"""
while True:
print("Updating leaderboard data...")
asyncio.run(fetch_data())
time.sleep(300) # 5 minutes
def create_table_for_lb(lb_name):
"""Create a formatted table for a specific leaderboard and GPU"""
global leaderboard_data
lb_data = leaderboard_data[lb_name]
headers = ["Rank", "Submission Name", "User ID", "Score", "Date"]
rows = []
for i, result in enumerate(lb_data.results, 1):
rows.append(
[
i,
result.submission_name,
result.user_id,
f"{float(result.submission_score):.4f}",
result.submission_time,
]
)
return gr.Dataframe(
headers=headers,
datatype=["number", "str", "str", "str", "str"],
value=rows,
interactive=False,
)
def refresh_ui():
"""Force refresh the UI with latest data"""
asyncio.run(fetch_data())
return "Data refreshed!"
def build_ui():
"""Build the Gradio UI"""
global leaderboard_data
with gr.Blocks(title="ML Leaderboards") as app:
gr.Markdown("# Machine Learning Leaderboards")
with gr.Row():
refresh_btn = gr.Button("Refresh Data")
status = gr.Textbox(label="Status", value="Ready")
refresh_btn.click(fn=refresh_ui, outputs=status)
# Initial data fetch
asyncio.run(fetch_data())
# Create tabs for each leaderboard
if leaderboard_data:
with gr.Tabs():
for lb_name, lb_data in leaderboard_data.items():
with gr.Tab(lb_name):
gr.Markdown(f"## {lb_name} - {lb_data.gpu}")
create_table_for_lb(lb_name)
else:
gr.Markdown("No leaderboard data available. Please refresh.")
return app
if __name__ == "__main__":
# Start the background update thread
update_thread = threading.Thread(target=background_update, daemon=True)
update_thread.start()
# Launch the Gradio app
app = build_ui()
app.launch()