Skip to content

Commit 02759d0

Browse files
committed
fix: guard leaderboard benchmark query
1 parent 55ceddb commit 02759d0

2 files changed

Lines changed: 67 additions & 2 deletions

File tree

mteb/leaderboard/app.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,42 @@ def _produce_benchmark_link(benchmark_name: str, request: gr.Request) -> str:
7070
return md
7171

7272

73-
def _set_benchmark_on_load(request: gr.Request):
73+
@functools.cache
74+
def _leaderboard_benchmark_names() -> frozenset[str]:
75+
names: set[str] = set()
76+
pending: list[Benchmark | MenuEntry] = [
77+
*GP_BENCHMARK_ENTRIES,
78+
*R_BENCHMARK_ENTRIES,
79+
]
80+
81+
while pending:
82+
entry = pending.pop()
83+
if isinstance(entry, Benchmark):
84+
names.add(entry.name)
85+
else:
86+
pending.extend(entry.benchmarks)
87+
88+
return frozenset(names)
89+
90+
91+
def _resolve_benchmark_name_from_query(benchmark_name: str | None) -> str:
92+
if benchmark_name is None:
93+
return DEFAULT_BENCHMARK_NAME
94+
95+
try:
96+
resolved_name = mteb.get_benchmark(benchmark_name).name
97+
except KeyError:
98+
return DEFAULT_BENCHMARK_NAME
99+
100+
if resolved_name not in _leaderboard_benchmark_names():
101+
return DEFAULT_BENCHMARK_NAME
102+
103+
return resolved_name
104+
105+
106+
def _set_benchmark_on_load(request: gr.Request) -> str:
74107
query_params = request.query_params
75-
return query_params.get("benchmark_name", DEFAULT_BENCHMARK_NAME)
108+
return _resolve_benchmark_name_from_query(query_params.get("benchmark_name"))
76109

77110

78111
def _download_table(table: pd.DataFrame) -> str:
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import pytest
2+
3+
pytest.importorskip("gradio", reason="Gradio not installed")
4+
5+
from mteb.leaderboard.app import _resolve_benchmark_name_from_query
6+
from mteb.leaderboard.benchmark_selector import DEFAULT_BENCHMARK_NAME
7+
8+
9+
def test_resolve_benchmark_name_from_query_defaults_when_missing():
10+
assert _resolve_benchmark_name_from_query(None) == DEFAULT_BENCHMARK_NAME
11+
12+
13+
def test_resolve_benchmark_name_from_query_defaults_when_invalid():
14+
assert (
15+
_resolve_benchmark_name_from_query("not-a-real-benchmark")
16+
== DEFAULT_BENCHMARK_NAME
17+
)
18+
19+
20+
def test_resolve_benchmark_name_from_query_defaults_when_not_on_leaderboard():
21+
assert (
22+
_resolve_benchmark_name_from_query("MTEB(Multilingual, v1)")
23+
== DEFAULT_BENCHMARK_NAME
24+
)
25+
26+
27+
def test_resolve_benchmark_name_from_query_keeps_valid_name():
28+
assert _resolve_benchmark_name_from_query("MTEB(eng, v1)") == "MTEB(eng, v1)"
29+
30+
31+
def test_resolve_benchmark_name_from_query_normalizes_alias():
32+
assert _resolve_benchmark_name_from_query("MTEB(eng, classic)") == "MTEB(eng, v1)"

0 commit comments

Comments
 (0)