File size: 2,723 Bytes
dd2d404
 
 
de01b88
cc21e4f
dd2d404
 
f70941b
 
 
dd2d404
f70941b
 
 
f9dae72
f70941b
 
 
 
 
 
 
 
 
1798610
f70941b
 
dd2d404
f70941b
 
 
 
 
 
dd2d404
f70941b
 
 
 
dad6394
f70941b
 
 
dd2d404
f70941b
 
 
 
 
b865c47
f70941b
 
 
 
 
 
dd2d404
f70941b
714d5d4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import streamlit as st
import pandas as pd

# Load data
df_benchmark = pd.read_csv('leaderboard_data.csv')
df_server = pd.read_csv('server_specs.csv')

# Normalize column names (remove extra spaces, make case consistent)
df_benchmark.columns = df_benchmark.columns.str.strip()
df_server.columns = df_server.columns.str.strip()

# Debug output (optional)
# st.write("Benchmark columns:", df_benchmark.columns.tolist())
# st.write("Server columns:", df_server.columns.tolist())

# Ensure "Server Name" exists in both
if "Server Name" not in df_benchmark.columns:
    st.error('"Server Name" column not found in leaderboard_data.csv')
elif "Server Name" not in df_server.columns:
    st.error('"Server Name" column not found in server_specs.csv')
else:
    # Remove duplicated columns except "Server Name"
    duplicate_cols = set(df_benchmark.columns) & set(df_server.columns) - {"Server Name"}
    df_server_filtered = df_server.drop(columns=duplicate_cols)

    # Merge datasets
    df = pd.merge(df_benchmark, df_server_filtered, on="Server Name", how="left")

    # Continue with the rest of the app...
    st.title("MSNP Leaderboard")
    st.markdown("""
    [GitHub Repository](https://github.com/EvilFreelancer/llm-msnp-tests)  
    This leaderboard shows the performance of quantized GGUF models (via Ollama) on various CPU and GPU combinations in a single-node setup.
    """)

    # Filters
    with st.sidebar:
        st.header("Filters")
        model_options = st.multiselect("Select model:", options=sorted(df["Model"].dropna().unique()))
        gpu_options = st.multiselect("Select GPU:", options=sorted(df["GPU(s)"].dropna().unique()))
        quantization_options = st.multiselect("Quantization:", options=sorted(df["Quantization"].dropna().unique()))
        context_length_options = st.multiselect("Context length:", options=sorted(df["Context Length"].dropna().unique()))
        server_options = st.multiselect("Select server:", options=sorted(df["Server Name"].dropna().unique()))

    # Apply filters
    filtered_df = df.copy()
    if model_options:
        filtered_df = filtered_df[filtered_df["Model"].isin(model_options)]
    if gpu_options:
        filtered_df = filtered_df[filtered_df["GPU(s)"].isin(gpu_options)]
    if quantization_options:
        filtered_df = filtered_df[filtered_df["Quantization"].isin(quantization_options)]
    if context_length_options:
        filtered_df = filtered_df[filtered_df["Context Length"].isin(context_length_options)]
    if server_options:
        filtered_df = filtered_df[filtered_df["Server Name"].isin(server_options)]

    # Display filtered table
    st.dataframe(filtered_df.sort_values(by="Tokens/sec", ascending=False).reset_index(drop=True))