MBench_Leaderboard / test_submission.py
PeanutUp's picture
Fix Space startup and harden submissions
989c9fa
Raw
History Blame Contribute Delete
3.37 kB
import json
import tempfile
import unittest
import zipfile
from pathlib import Path
from unittest.mock import patch
import app
from scripts.validate_submission import validate_submission_json
VALID_SUBMISSION = {
"model_name": "ExampleWorldModel",
"model_link": "https://example.com/model",
"model_type": "text-conditioned",
"total_m_score": 52.46,
}
class SubmissionZipTests(unittest.TestCase):
def test_reads_root_submission_json(self):
with tempfile.TemporaryDirectory() as tmp_dir:
zip_path = Path(tmp_dir) / "submission.zip"
with zipfile.ZipFile(zip_path, "w") as archive:
archive.writestr(
"leaderboard_submission.json",
json.dumps(VALID_SUBMISSION),
)
archive.writestr(
"verification/entity/summary.json",
json.dumps({"score": 1}),
)
self.assertEqual(
app.read_submission_json_from_zip(zip_path),
VALID_SUBMISSION,
)
def test_rejects_zip_without_root_submission_json(self):
with tempfile.TemporaryDirectory() as tmp_dir:
zip_path = Path(tmp_dir) / "submission.zip"
with zipfile.ZipFile(zip_path, "w") as archive:
archive.writestr(
"verification/entity/summary.json",
json.dumps(VALID_SUBMISSION),
)
with self.assertRaisesRegex(
ValueError,
"leaderboard_submission.json at the root",
):
app.read_submission_json_from_zip(zip_path)
def test_upload_commits_only_pending_json_and_zip(self):
with tempfile.TemporaryDirectory() as tmp_dir:
local_root = Path(tmp_dir)
pending_dir = local_root / "submissions" / "pending"
pending_dir.mkdir(parents=True)
json_path = pending_dir / "submission.json"
zip_path = pending_dir / "submission.zip"
json_path.write_text("{}", encoding="utf-8")
zip_path.write_bytes(b"zip")
with (
patch.object(app, "LOCAL_LEADERBOARD_PATH", local_root),
patch("app.HfApi") as api_class,
):
app.upload_pending_submission(
"test-token",
"ExampleWorldModel",
json_path,
zip_path,
)
kwargs = api_class.return_value.create_commit.call_args.kwargs
self.assertEqual(
kwargs["repo_id"],
"PeanutUp/membench_leaderboard_submission",
)
self.assertEqual(kwargs["repo_type"], "dataset")
self.assertEqual(
[operation.path_in_repo for operation in kwargs["operations"]],
[
"submissions/pending/submission.json",
"submissions/pending/submission.zip",
],
)
def test_rejects_out_of_range_score(self):
submission = {**VALID_SUBMISSION, "total_m_score": 100.01}
valid, message = validate_submission_json(submission)
self.assertFalse(valid)
self.assertIn("between 0 and 100", message)
if __name__ == "__main__":
unittest.main()