Spaces:
Running
Running
| import argparse | |
| import ast | |
| import pickle | |
| import os | |
| import threading | |
| import time | |
| import gradio as gr | |
| import numpy as np | |
| import pandas as pd | |
| from serve.model import model_config | |
| def amend_model_name(config): | |
| if config.page_link: | |
| return '[' + config.model_name + '](' + config.page_link + ')' | |
| elif config.code_link: | |
| return '[' + config.model_name + '](' + config.page_link + ')' | |
| else: | |
| return config.model_name | |
| def amend_rank(rank): | |
| if rank==1: | |
| return "π₯" | |
| elif rank==2: | |
| return "π₯" | |
| elif rank==3: | |
| return 'π₯' | |
| else: | |
| return rank | |
| def get_leaderboard_values(leaderboard_df): | |
| leaderboard_vals = [] | |
| for i, row in leaderboard_df.iterrows(): | |
| rank = i+1 | |
| model_name = row["Method"] | |
| task = row["Task"] | |
| if model_name not in model_config.keys() or model_config[model_name].task != task: | |
| continue | |
| cfg = model_config[model_name] | |
| values = [amend_rank(rank), amend_model_name(cfg), task] | |
| values = values + [row.get(dim, np.NaN) for dim in leaderboard_df.columns[2:]] | |
| # values.append(round(np.sum([v for v in values[3:] if pd.notna(v)]), 4)) | |
| values.append(cfg.organization if cfg.organization else "N/A") | |
| leaderboard_vals.append(values) | |
| return leaderboard_vals | |
| def get_topk_ranks(df, k=3): | |
| ranks = {} | |
| for col_idx, col in enumerate(df.columns[2:]): # skip "Model" βTask" | |
| topk = df[col].nlargest(k) | |
| for rank, idx in enumerate(topk.index): | |
| if idx not in ranks: | |
| ranks[idx] = {} | |
| ranks[idx][col_idx] = rank + 1 # 1-based rank | |
| for i in range(k): ranks[i][5] = i + 1 | |
| return ranks # dict: row -> {col: rank} | |
| def build_leaderboard_tab(leaderboard_file: str, task: str = ""): | |
| if not isinstance(leaderboard_file, str): | |
| leaderboard_file = leaderboard_file.value | |
| if not isinstance(task, str): | |
| task = task.value | |
| df = pd.read_csv(leaderboard_file) | |
| if task in ["Text-to-3D only", "Image-to-3D only"]: | |
| df = df[df["Task"] == task.split()[0]] | |
| # df = df.drop(df[df["Task"]!=task.split()[0]].index) | |
| leaderboard_df = df.drop(df[df["Method"].isnull()].index) | |
| leaderboard_df = leaderboard_df.reset_index(drop=True) | |
| leaderboard_df = leaderboard_df.sort_values(by="Overall", ascending=False).reset_index(drop=True) | |
| leaderboard_vals = get_leaderboard_values(leaderboard_df) | |
| leaderboard = gr.Dataframe( | |
| headers = ['Rank', "π€ Model", "πͺ§ Task" ] | |
| + [f"{dim}" for dim in leaderboard_df.keys()[2:-1]] | |
| + ["β Overall", "ποΈ Orgnization"], # "π Links", | |
| datatype = ["number", "markdown", "markdown"] | |
| + ["number"] * (len(leaderboard_df.columns) - 3) | |
| + ["number", "markdown"], | |
| value = leaderboard_vals, | |
| height = 680, | |
| column_widths = [60, 120, 100] | |
| + [120] * (len(leaderboard_df.columns) - 3) | |
| + [120, 180], | |
| wrap = True, | |
| type="pandas", | |
| ) | |
| return leaderboard |