File size: 2,684 Bytes
281711d 8efd41a 281711d 8efd41a 281711d 8efd41a 281711d 8efd41a 281711d 8efd41a 281711d 8efd41a 281711d |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import pathlib
import tempfile
from typing import BinaryIO, Literal
import json
import gradio as gr
from datasets import load_dataset, Dataset
from huggingface_hub import upload_file
from evaluation import evaluate_problem
from datetime import datetime
PROBLEM_TYPES = ["geometrical", "simple_to_build", "mhd_stable"]
repo_id = "cgeorgiaw/constellaration-submissions"
def submit_boundary(
problem_type: Literal["geometrical", "simple_to_build", "mhd_stable"],
boundary_file: BinaryIO,
) -> str:
file_path = boundary_file.name
if not file_path:
return "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,
):
file_content = f_in.read()
tmp.write(file_content)
tmp_path = pathlib.Path(tmp.name)
# write to dataset
filename = f"data/{timestamp.replace(':', '-')}_{problem_type}.json"
record = {
"submission_time": timestamp,
"problem_type": problem_type,
"boundary_json": file_content.decode("utf-8"), # Or store file path or URL
}
json.dump(record, tmp, indent=2)
tmp.flush()
upload_file(
path_or_fileobj=tmp.name, # this is just a string path
path_in_repo=filename,
repo_id=repo_id,
repo_type="dataset",
commit_message=f"Add submission for {problem_type} at {timestamp}"
)
try:
result = evaluate_problem(problem_type, str(tmp_path))
output = str(result)
except Exception as e:
output = f"Error during evaluation:\n{e}"
finally:
tmp_path.unlink()
return output
def gradio_interface() -> gr.Blocks:
with gr.Blocks() as demo:
gr.Markdown(
"""
# Plasma Boundary Evaluation App
Upload your plasma boundary JSON and select the problem type to get your score.
"""
)
with gr.Row():
problem_type = gr.Dropdown(
PROBLEM_TYPES, label="Problem Type", value="geometrical"
)
boundary_file = gr.File(label="Boundary JSON File (.json)")
boundary_file
output = gr.Textbox(label="Evaluation Result", lines=10)
submit_btn = gr.Button("Evaluate")
submit_btn.click(
submit_boundary,
inputs=[problem_type, boundary_file],
outputs=output,
)
return demo
if __name__ == "__main__":
gradio_interface().launch()
|