Spaces:
Running
Running
import streamlit as st | |
import asyncio | |
from src.core.styles import CUSTOM_CSS | |
from src.components.header import render_header | |
from src.components.filters import render_table_filters, render_plot_filters | |
from src.components.visualizations import ( | |
render_performance_plots, | |
render_leaderboard_table, | |
) | |
from src.services.firebase import fetch_leaderboard_data | |
# Configure the page | |
st.set_page_config( | |
page_title="AI-Phone Leaderboard", | |
page_icon="src/static/images/favicon.png", | |
layout="wide", | |
initial_sidebar_state="expanded", | |
) | |
# Apply custom CSS | |
st.markdown(CUSTOM_CSS, unsafe_allow_html=True) | |
async def main(): | |
# Render header | |
render_header() | |
# Fetch initial data | |
full_df = await fetch_leaderboard_data() | |
if full_df.empty: | |
st.info("No benchmark data available yet!") | |
return | |
# Get unique values for filters | |
models = sorted(full_df["Model"].unique()) | |
benchmarks = sorted(full_df["Benchmark"].unique()) | |
platforms = sorted(full_df["Platform"].unique()) | |
devices = sorted(full_df["Normalized Device ID"].unique()) | |
# Render table filters and get selections | |
( | |
selected_model_table, | |
selected_benchmark_table, | |
selected_platform_table, | |
selected_device_table, | |
) = render_table_filters(models, benchmarks, platforms, devices) | |
# Filter data for table | |
table_df = full_df.copy() | |
if selected_model_table != "All": | |
table_df = table_df[table_df["Model"] == selected_model_table] | |
if selected_benchmark_table != "All": | |
table_df = table_df[table_df["Benchmark"] == selected_benchmark_table] | |
if selected_platform_table != "All": | |
table_df = table_df[table_df["Platform"] == selected_platform_table] | |
if selected_device_table != "All": | |
table_df = table_df[table_df["Normalized Device ID"] == selected_device_table] | |
# Render leaderboard table | |
render_leaderboard_table(table_df) | |
# Performance plots section | |
st.subheader("Performance Comparison") | |
# Render plot filters and get selections | |
selected_model_plot, selected_benchmark_plot = render_plot_filters( | |
models, benchmarks | |
) | |
# Filter data for plots | |
plot_df = full_df[ | |
(full_df["Model"] == selected_model_plot) | |
& (full_df["Benchmark"] == selected_benchmark_plot) | |
] | |
# Render performance plots | |
render_performance_plots(plot_df, selected_model_plot) | |
if __name__ == "__main__": | |
asyncio.run(main()) |