File size: 2,378 Bytes
63bdadc 50e75cf 63bdadc 0bcfe16 63bdadc 0bcfe16 63bdadc 0bcfe16 63bdadc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import pathlib
from pathlib import Path
import tempfile
from typing import BinaryIO, Literal
import json
import pandas as pd
import gradio as gr
from datasets import load_dataset, Dataset
from huggingface_hub import upload_file, hf_hub_download
from gradio_leaderboard import ColumnFilter, Leaderboard, SelectColumns
from evaluation import evaluate_problem
from datetime import datetime
import os
from huggingface_hub import HfApi
from about import PROBLEM_TYPES, TOKEN, CACHE_PATH, API, submissions_repo, results_repo
def submit_boundary(
problem_type: Literal["geometrical", "simple_to_build", "mhd_stable"],
boundary_file: BinaryIO,
profile: gr.OAuthProfile | None
) -> str:
# error handling
if profile.username is None:
raise gr.Error("You must be logged in to submit a file.")
file_path = boundary_file.name
if not file_path:
raise gr.Error("Uploaded file object does not have a valid file path.")
path_obj = pathlib.Path(file_path)
timestamp = datetime.utcnow().isoformat()
with (
path_obj.open("rb") as f_in,
tempfile.NamedTemporaryFile(delete=False, suffix=".json") as tmp_boundary,
):
file_content = f_in.read()
tmp_boundary.write(file_content)
tmp_boundary_path = pathlib.Path(tmp_boundary.name)
# write to dataset
filename = f"{problem_type}/{timestamp.replace(':', '-')}_{problem_type}.json"
record = {
"submission_filename": filename,
"submission_time": timestamp,
"problem_type": problem_type,
"boundary_json": file_content.decode("utf-8"),
"evaluated": False,
"user": profile.username,
}
with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as tmp:
json.dump(record, tmp, indent=2)
tmp.flush()
tmp_name = tmp.name
API.upload_file(
path_or_fileobj=tmp_name,
path_in_repo=filename,
repo_id=submissions_repo,
repo_type="dataset",
commit_message=f"Add submission for {problem_type} at {timestamp}"
)
pathlib.Path(tmp_name).unlink()
tmp_boundary_path.unlink()
return "✅ Your submission has been received! Sit tight and your scores will appear on the leaderboard shortly.", filename |