|
import asyncio |
|
import streamlit as st |
|
import pandas as pd |
|
from typing import Optional, List, Set, Tuple |
|
|
|
from .components.filters import render_table_filters |
|
from .components.visualizations import ( |
|
render_leaderboard_table, |
|
render_performance_plots, |
|
) |
|
from .components.header import render_header, render_contribution_guide |
|
from .services.firebase import fetch_leaderboard_data |
|
from .core.styles import CUSTOM_CSS |
|
|
|
|
|
def get_filter_values( |
|
df: pd.DataFrame, |
|
) -> tuple[ |
|
List[str], |
|
List[str], |
|
List[str], |
|
List[str], |
|
List[str], |
|
Tuple[int, int], |
|
Tuple[int, int], |
|
Tuple[int, int], |
|
List[str], |
|
int, |
|
]: |
|
"""Get unique values for filters""" |
|
models = sorted(df["Model ID"].unique().tolist()) |
|
platforms = sorted(df["Platform"].unique().tolist()) |
|
devices = sorted(df["Device"].unique().tolist()) |
|
cache_type_v = sorted(df["cache_type_v"].unique().tolist()) |
|
cache_type_k = sorted(df["cache_type_k"].unique().tolist()) |
|
n_threads = (df["n_threads"].min(), df["n_threads"].max()) |
|
max_n_gpu_layers = (0, max(df["n_gpu_layers"].unique().tolist())) |
|
pp_range = (df["PP Config"].min(), df["PP Config"].max()) |
|
tg_range = (df["TG Config"].min(), df["TG Config"].max()) |
|
versions = sorted(df["Version"].unique().tolist()) |
|
return ( |
|
models, |
|
platforms, |
|
devices, |
|
cache_type_v, |
|
cache_type_k, |
|
pp_range, |
|
tg_range, |
|
n_threads, |
|
versions, |
|
max_n_gpu_layers, |
|
) |
|
|
|
|
|
async def main(): |
|
"""Main application entry point""" |
|
st.set_page_config( |
|
page_title="AI Phone Benchmark Leaderboard", |
|
page_icon="π±", |
|
layout="wide", |
|
) |
|
|
|
|
|
st.markdown(CUSTOM_CSS, unsafe_allow_html=True) |
|
|
|
|
|
df = await fetch_leaderboard_data() |
|
|
|
if df.empty: |
|
st.error("No data available. Please check your connection and try again.") |
|
return |
|
|
|
|
|
render_header() |
|
|
|
|
|
( |
|
models, |
|
platforms, |
|
devices, |
|
cache_type_v, |
|
cache_type_k, |
|
pp_range, |
|
tg_range, |
|
n_threads, |
|
versions, |
|
max_n_gpu_layers, |
|
) = get_filter_values(df) |
|
|
|
|
|
|
|
if "show_guide" not in st.session_state: |
|
st.session_state.show_guide = True |
|
|
|
main_col, guide_col = st.columns( |
|
[ |
|
0.9 if not st.session_state.show_guide else 0.8, |
|
0.1 if not st.session_state.show_guide else 0.2, |
|
] |
|
) |
|
|
|
with main_col: |
|
|
|
table_filters = render_table_filters( |
|
models, |
|
platforms, |
|
devices, |
|
cache_type_v, |
|
cache_type_k, |
|
pp_range, |
|
tg_range, |
|
n_threads, |
|
versions, |
|
max_n_gpu_layers, |
|
) |
|
|
|
|
|
render_leaderboard_table(df, table_filters) |
|
|
|
|
|
st.markdown("---") |
|
st.title("π Performance Comparison") |
|
|
|
|
|
plot_col1, plot_col2, plot_col3 = st.columns(3) |
|
|
|
with plot_col1: |
|
plot_model = st.selectbox( |
|
"Select Model for Comparison", options=models, key="plot_model_selector" |
|
) |
|
|
|
with plot_col2: |
|
plot_pp = st.selectbox( |
|
"Select PP Config for Comparison", |
|
options=sorted([int(x) for x in df["PP Config"].unique()]), |
|
key="plot_pp_selector", |
|
) |
|
|
|
with plot_col3: |
|
plot_tg = st.selectbox( |
|
"Select TG Config for Comparison", |
|
options=sorted([int(x) for x in df["TG Config"].unique()]), |
|
key="plot_tg_selector", |
|
) |
|
|
|
|
|
plot_filters = table_filters.copy() |
|
plot_filters["model"] = plot_model |
|
plot_filters["pp_range"] = (plot_pp, plot_pp) |
|
plot_filters["tg_range"] = (plot_tg, plot_tg) |
|
|
|
render_performance_plots(df, plot_filters) |
|
|
|
with guide_col: |
|
render_contribution_guide() |
|
|
|
|
|
if __name__ == "__main__": |
|
asyncio.run(main()) |
|
|