import gradio as gr
import pandas as pd
import numpy as np
from gradio_leaderboard import Leaderboard, SelectColumns, ColumnFilter
# Define constants and enums
TITLE = "
M-RewardBench Leaderboard
"
INTRODUCTION_TEXT = "https://m-rewardbench.github.io/"
GOOGLE_SHEET_URL = "https://docs.google.com/spreadsheets/d/1qrD7plUdrBwAw7G6UeDVZAaV9ihxaNAcoiKwSaqotR4/export?gid=0&format=csv"
ABOUT_TEXT = """Welcome to M-RewardBench Leaderboard!"""
class AutoEvalColumn:
model = {
"name": "Model",
"type": "markdown",
"displayed_by_default": True,
"never_hidden": True,
}
model_type = {
"name": "MT",
"type": "markdown",
"displayed_by_default": True,
"never_hidden": True,
}
@classmethod
def add_columns_from_df(cls, df, columns):
for col in columns:
if col.lower() != 'model': # Skip if it's the model column since it's predefined
setattr(cls, col, {
"name": col,
"type": "markdown",
"displayed_by_default": True,
"never_hidden": False,
})
def get_result_data():
return pd.read_csv(GOOGLE_SHEET_URL)
def init_leaderboard(dataframe):
if dataframe is None or dataframe.empty:
raise ValueError("Leaderboard DataFrame is empty or None.")
return Leaderboard(
value=dataframe,
datatype=[
col["type"]
for col in AutoEvalColumn.__dict__.values()
if isinstance(col, dict)
],
select_columns=SelectColumns(
default_selection=[
col["name"]
for col in AutoEvalColumn.__dict__.values()
if isinstance(col, dict) and col["displayed_by_default"]
],
cant_deselect=[
col["name"]
for col in AutoEvalColumn.__dict__.values()
if isinstance(col, dict) and col.get("never_hidden", False)
],
label="Select Columns to Display:",
),
search_columns=["Model"],
interactive=False,
)
def format_model_link(row):
"""Format model name as HTML link if URL is available"""
model_name = row["Model"]
# url = row.get("URL", "")
# if pd.notna(url) and url.strip():
# return f'{model_name}'
return model_name
lang_ids = "eng_Latn arb_Arab tur_Latn rus_Cyrl ces_Latn pol_Latn kor_Hang zho_Hans zho_Hant fra_Latn ell_Grek deu_Latn ron_Latn ita_Latn nld_Latn pes_Arab hin_Deva ukr_Cyrl por_Latn ind_Latn jpn_Jpan spa_Latn heb_Hebr vie_Latn"
emojis = "🔢 💬 🎯"
model_types = {"Generative RM": "💬", "DPO": "🎯", "Sequence Classifier": "🔢"}
from functools import partial
def format_with_color(val, min_val=50, max_val=100):
"""
Formats a value with inline green color gradient CSS.
Returns an HTML string with bold, black text and muted green background.
"""
try:
val = float(val)
if pd.isna(val):
return str(val)
# Normalize value between 50 and 100 to 0-1 range
normalized = (val - min_val) / (max_val - min_val)
# Clamp value between 0 and 1
normalized = max(0, min(1, normalized))
# Create color gradient with reduced brightness (max 200 instead of 255)
# and increased minimum intensity (50 instead of 0)
intensity = int(50 + (150 * (1 - normalized)))
# Return HTML with inline CSS - bold black text
return f'{val*100:.1f}
'
except (ValueError, TypeError):
return str(val)
demo = gr.Blocks(theme=gr.themes.Soft())
with demo:
gr.HTML(TITLE)
gr.Markdown(INTRODUCTION_TEXT)
with gr.Tabs() as tabs:
with gr.TabItem("🏅 Leaderboard"):
df = get_result_data()
df["Model_Type"] = df["Model_Type"].map(model_types)
df["Model"] = df.apply(format_model_link, axis=1)
df["zho"] = df[["zho_Hans", "zho_Hant"]].mean(axis=1)
columns = lang_ids.split("\t")
# print(df.head())
df.pop("zho_Hans")
df.pop("zho_Hant")
df.rename(columns={
"Model_Type": "MT",
"Avg_Multilingual": "AVG",
}, inplace=True)
df.rename(columns={col: col[:3] for col in columns}, inplace=True)
# df = df.style.applymap(apply_color_gradient, subset=['eng'])
numeric_cols = df.select_dtypes(include=[np.number]).columns
for col in numeric_cols:
lang_format_with_color = partial(format_with_color,
min_val=df[col].min(),
max_val=df[col].max())
df[col] = df[col].apply(lang_format_with_color)
# for col in numeric_cols:
# df[col] = (df[col] * 100).round(1).astype(str)
AutoEvalColumn.add_columns_from_df(df, numeric_cols)
leaderboard = init_leaderboard(df)
demo.launch(ssr_mode=False)