Model type filter
Browse files
app.py
CHANGED
|
@@ -32,6 +32,7 @@ HF_TOKEN = os.getenv("HF_TOKEN")
|
|
| 32 |
RESULTS_LOCK = threading.Lock()
|
| 33 |
DEFAULT_METRIC = "NDCG@10"
|
| 34 |
METRICS = ["NDCG@10", "MAP@10", "Recall@10", "P@10", "MRR@10"]
|
|
|
|
| 35 |
STATIC_COLUMNS = ["Rank", "Model"]
|
| 36 |
META_COLUMNS = ["Model ID", "Organization", "Type", "Verified", "Date", "Source URL", ]
|
| 37 |
TRAILING_COLUMNS = META_COLUMNS
|
|
@@ -716,8 +717,8 @@ def sort_type_for_column(index: int, column: str, metric: str) -> str:
|
|
| 716 |
return "text"
|
| 717 |
|
| 718 |
|
| 719 |
-
def leaderboard_table_html(metric: str, task_filter: str, verified_only: bool, model_filter: str) -> str:
|
| 720 |
-
frame = leaderboard_frame(metric, task_filter, verified_only, model_filter)
|
| 721 |
if frame.empty:
|
| 722 |
return '<div class="rusbeir-empty">No results match the selected filters.</div>'
|
| 723 |
|
|
@@ -920,21 +921,16 @@ def append_submission_records(records: list[dict[str, Any]]) -> tuple[int, int,
|
|
| 920 |
raise RuntimeError("Could not update leaderboard results after multiple attempts.")
|
| 921 |
|
| 922 |
|
| 923 |
-
def add_submission_record(uploaded_file: Any, metric: str, task_filter: str, verified_only: bool, model_filter: str) -> tuple[str, str, str]:
|
| 924 |
try:
|
| 925 |
file_text = uploaded_file_text(uploaded_file)
|
| 926 |
except OSError as exc:
|
| 927 |
-
return (
|
| 928 |
-
|
| 929 |
-
|
| 930 |
-
leaderboard_table_html(metric, task_filter, verified_only, model_filter),
|
| 931 |
-
)
|
| 932 |
if not file_text.strip():
|
| 933 |
-
return (
|
| 934 |
-
|
| 935 |
-
summary_html(),
|
| 936 |
-
leaderboard_table_html(metric, task_filter, verified_only, model_filter),
|
| 937 |
-
)
|
| 938 |
|
| 939 |
try:
|
| 940 |
records = parse_submission_records(file_text)
|
|
@@ -943,7 +939,7 @@ def add_submission_record(uploaded_file: Any, metric: str, task_filter: str, ver
|
|
| 943 |
return (
|
| 944 |
f"Submission was not added: {exc}",
|
| 945 |
summary_html(),
|
| 946 |
-
leaderboard_table_html(metric, task_filter, verified_only, model_filter),
|
| 947 |
)
|
| 948 |
|
| 949 |
if added == 0 and skipped > 0:
|
|
@@ -955,11 +951,8 @@ def add_submission_record(uploaded_file: Any, metric: str, task_filter: str, ver
|
|
| 955 |
if commit_url:
|
| 956 |
status += f" [Hub commit]({commit_url})"
|
| 957 |
|
| 958 |
-
return (
|
| 959 |
-
|
| 960 |
-
summary_html(),
|
| 961 |
-
leaderboard_table_html(metric, task_filter, verified_only, model_filter),
|
| 962 |
-
)
|
| 963 |
|
| 964 |
|
| 965 |
def logo_data_uri() -> str:
|
|
@@ -982,7 +975,7 @@ def format_score(value: float | None) -> str:
|
|
| 982 |
def summary_html() -> str:
|
| 983 |
datasets = [dataset for dataset in load_datasets() if dataset.get("official", True)]
|
| 984 |
records = load_results()
|
| 985 |
-
frame = leaderboard_frame(DEFAULT_METRIC, "All", False, "")
|
| 986 |
best_model = "No results yet"
|
| 987 |
best_score = "n/a"
|
| 988 |
if not frame.empty and DEFAULT_METRIC in frame:
|
|
@@ -1040,7 +1033,11 @@ def summary_html() -> str:
|
|
| 1040 |
"""
|
| 1041 |
|
| 1042 |
|
| 1043 |
-
def leaderboard_frame(metric: str, task_filter: str,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1044 |
datasets = load_datasets()
|
| 1045 |
if task_filter != "All":
|
| 1046 |
datasets = [dataset for dataset in datasets if dataset["task"] == task_filter]
|
|
@@ -1050,6 +1047,11 @@ def leaderboard_frame(metric: str, task_filter: str, verified_only: bool, model_
|
|
| 1050 |
for record in load_results():
|
| 1051 |
if verified_only and not record.get("verified", False):
|
| 1052 |
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1053 |
model_text = f"{record.get('model_id', '')} {record.get('model_name', '')}".lower()
|
| 1054 |
if model_filter and model_filter.lower() not in model_text:
|
| 1055 |
continue
|
|
@@ -1115,7 +1117,7 @@ with gr.Blocks(title="rusBEIR Leaderboard") as demo:
|
|
| 1115 |
"""
|
| 1116 |
<h2 class="rusbeir-section-title">Model Rankings</h2>
|
| 1117 |
<p class="rusbeir-section-note">
|
| 1118 |
-
Filter by task family, model name, or verification status. Scores are stored as fractions;
|
| 1119 |
leaderboard rankings use the selected average metric.
|
| 1120 |
</p>
|
| 1121 |
"""
|
|
@@ -1124,19 +1126,20 @@ with gr.Blocks(title="rusBEIR Leaderboard") as demo:
|
|
| 1124 |
metric = gr.Dropdown(METRICS, value=DEFAULT_METRIC, label="Metric", min_width=150)
|
| 1125 |
task_filter = gr.Dropdown(task_choices(), value="All", label="Task", min_width=180)
|
| 1126 |
model_filter = gr.Textbox(label="Model", placeholder="intfloat, BGE, FRIDA...", min_width=220)
|
|
|
|
| 1127 |
verified_only = gr.Checkbox(value=False, label="Verified", min_width=120, elem_classes=["rusbeir-verified-filter"])
|
| 1128 |
|
| 1129 |
gr.HTML('<div class="rusbeir-section-note">Results</div>')
|
| 1130 |
-
table = gr.HTML(value=leaderboard_table_html(DEFAULT_METRIC, "All", False, ""))
|
| 1131 |
|
| 1132 |
-
for control in [metric, task_filter, verified_only, model_filter]:
|
| 1133 |
control.change(leaderboard_table_html,
|
| 1134 |
-
inputs=[metric, task_filter, verified_only, model_filter],
|
| 1135 |
outputs=table)
|
| 1136 |
|
| 1137 |
reload_button = gr.Button("Reload results", variant="secondary")
|
| 1138 |
reload_button.click(leaderboard_table_html,
|
| 1139 |
-
inputs=[metric, task_filter, verified_only, model_filter],
|
| 1140 |
outputs=table)
|
| 1141 |
|
| 1142 |
with gr.Tab("Datasets"):
|
|
@@ -1179,7 +1182,7 @@ with gr.Blocks(title="rusBEIR Leaderboard") as demo:
|
|
| 1179 |
submit_status = gr.Markdown()
|
| 1180 |
add_button = gr.Button("Add to leaderboard", variant="primary")
|
| 1181 |
add_button.click(add_submission_record,
|
| 1182 |
-
inputs=[results_file, metric, task_filter, verified_only, model_filter],
|
| 1183 |
outputs=[submit_status, summary, table])
|
| 1184 |
|
| 1185 |
with gr.Tab("About"):
|
|
|
|
| 32 |
RESULTS_LOCK = threading.Lock()
|
| 33 |
DEFAULT_METRIC = "NDCG@10"
|
| 34 |
METRICS = ["NDCG@10", "MAP@10", "Recall@10", "P@10", "MRR@10"]
|
| 35 |
+
RERANKER_FILTER_CHOICES = ["All models", "With reranker", "Single models"]
|
| 36 |
STATIC_COLUMNS = ["Rank", "Model"]
|
| 37 |
META_COLUMNS = ["Model ID", "Organization", "Type", "Verified", "Date", "Source URL", ]
|
| 38 |
TRAILING_COLUMNS = META_COLUMNS
|
|
|
|
| 717 |
return "text"
|
| 718 |
|
| 719 |
|
| 720 |
+
def leaderboard_table_html(metric: str, task_filter: str, verified_only: bool, model_filter: str, reranker_filter: str = "All models") -> str:
|
| 721 |
+
frame = leaderboard_frame(metric, task_filter, verified_only, model_filter, reranker_filter)
|
| 722 |
if frame.empty:
|
| 723 |
return '<div class="rusbeir-empty">No results match the selected filters.</div>'
|
| 724 |
|
|
|
|
| 921 |
raise RuntimeError("Could not update leaderboard results after multiple attempts.")
|
| 922 |
|
| 923 |
|
| 924 |
+
def add_submission_record(uploaded_file: Any, metric: str, task_filter: str, verified_only: bool, model_filter: str, reranker_filter: str = "All models") -> tuple[str, str, str]:
|
| 925 |
try:
|
| 926 |
file_text = uploaded_file_text(uploaded_file)
|
| 927 |
except OSError as exc:
|
| 928 |
+
return (f"Submission was not added: could not read uploaded file: {exc}", summary_html(),
|
| 929 |
+
leaderboard_table_html(metric, task_filter, verified_only, model_filter, reranker_filter))
|
| 930 |
+
|
|
|
|
|
|
|
| 931 |
if not file_text.strip():
|
| 932 |
+
return ("Upload a non-empty results.jsonl file first.", summary_html(),
|
| 933 |
+
leaderboard_table_html(metric, task_filter, verified_only, model_filter, reranker_filter))
|
|
|
|
|
|
|
|
|
|
| 934 |
|
| 935 |
try:
|
| 936 |
records = parse_submission_records(file_text)
|
|
|
|
| 939 |
return (
|
| 940 |
f"Submission was not added: {exc}",
|
| 941 |
summary_html(),
|
| 942 |
+
leaderboard_table_html(metric, task_filter, verified_only, model_filter, reranker_filter),
|
| 943 |
)
|
| 944 |
|
| 945 |
if added == 0 and skipped > 0:
|
|
|
|
| 951 |
if commit_url:
|
| 952 |
status += f" [Hub commit]({commit_url})"
|
| 953 |
|
| 954 |
+
return (status, summary_html(),
|
| 955 |
+
leaderboard_table_html(metric, task_filter, verified_only, model_filter, reranker_filter))
|
|
|
|
|
|
|
|
|
|
| 956 |
|
| 957 |
|
| 958 |
def logo_data_uri() -> str:
|
|
|
|
| 975 |
def summary_html() -> str:
|
| 976 |
datasets = [dataset for dataset in load_datasets() if dataset.get("official", True)]
|
| 977 |
records = load_results()
|
| 978 |
+
frame = leaderboard_frame(DEFAULT_METRIC, "All", False, "", "All models")
|
| 979 |
best_model = "No results yet"
|
| 980 |
best_score = "n/a"
|
| 981 |
if not frame.empty and DEFAULT_METRIC in frame:
|
|
|
|
| 1033 |
"""
|
| 1034 |
|
| 1035 |
|
| 1036 |
+
def leaderboard_frame(metric: str, task_filter: str,
|
| 1037 |
+
verified_only: bool,
|
| 1038 |
+
model_filter: str,
|
| 1039 |
+
reranker_filter: str = "All models",
|
| 1040 |
+
) -> pd.DataFrame:
|
| 1041 |
datasets = load_datasets()
|
| 1042 |
if task_filter != "All":
|
| 1043 |
datasets = [dataset for dataset in datasets if dataset["task"] == task_filter]
|
|
|
|
| 1047 |
for record in load_results():
|
| 1048 |
if verified_only and not record.get("verified", False):
|
| 1049 |
continue
|
| 1050 |
+
has_reranker = str(record.get("type", "")).strip().casefold() == "reranker"
|
| 1051 |
+
if reranker_filter == "With reranker" and not has_reranker:
|
| 1052 |
+
continue
|
| 1053 |
+
if reranker_filter == "Single models" and has_reranker:
|
| 1054 |
+
continue
|
| 1055 |
model_text = f"{record.get('model_id', '')} {record.get('model_name', '')}".lower()
|
| 1056 |
if model_filter and model_filter.lower() not in model_text:
|
| 1057 |
continue
|
|
|
|
| 1117 |
"""
|
| 1118 |
<h2 class="rusbeir-section-title">Model Rankings</h2>
|
| 1119 |
<p class="rusbeir-section-note">
|
| 1120 |
+
Filter by task family, model name, reranker usage, or verification status. Scores are stored as fractions;
|
| 1121 |
leaderboard rankings use the selected average metric.
|
| 1122 |
</p>
|
| 1123 |
"""
|
|
|
|
| 1126 |
metric = gr.Dropdown(METRICS, value=DEFAULT_METRIC, label="Metric", min_width=150)
|
| 1127 |
task_filter = gr.Dropdown(task_choices(), value="All", label="Task", min_width=180)
|
| 1128 |
model_filter = gr.Textbox(label="Model", placeholder="intfloat, BGE, FRIDA...", min_width=220)
|
| 1129 |
+
reranker_filter = gr.Dropdown(RERANKER_FILTER_CHOICES, value="All models", label="Reranker", min_width=170)
|
| 1130 |
verified_only = gr.Checkbox(value=False, label="Verified", min_width=120, elem_classes=["rusbeir-verified-filter"])
|
| 1131 |
|
| 1132 |
gr.HTML('<div class="rusbeir-section-note">Results</div>')
|
| 1133 |
+
table = gr.HTML(value=leaderboard_table_html(DEFAULT_METRIC, "All", False, "", "All models"))
|
| 1134 |
|
| 1135 |
+
for control in [metric, task_filter, verified_only, model_filter, reranker_filter]:
|
| 1136 |
control.change(leaderboard_table_html,
|
| 1137 |
+
inputs=[metric, task_filter, verified_only, model_filter, reranker_filter],
|
| 1138 |
outputs=table)
|
| 1139 |
|
| 1140 |
reload_button = gr.Button("Reload results", variant="secondary")
|
| 1141 |
reload_button.click(leaderboard_table_html,
|
| 1142 |
+
inputs=[metric, task_filter, verified_only, model_filter, reranker_filter],
|
| 1143 |
outputs=table)
|
| 1144 |
|
| 1145 |
with gr.Tab("Datasets"):
|
|
|
|
| 1182 |
submit_status = gr.Markdown()
|
| 1183 |
add_button = gr.Button("Add to leaderboard", variant="primary")
|
| 1184 |
add_button.click(add_submission_record,
|
| 1185 |
+
inputs=[results_file, metric, task_filter, verified_only, model_filter, reranker_filter],
|
| 1186 |
outputs=[submit_status, summary, table])
|
| 1187 |
|
| 1188 |
with gr.Tab("About"):
|