cgeorgiaw's picture
cgeorgiaw HF Staff
first commit
281711d
raw
history blame
2.5 kB
import pathlib
import tempfile
from typing import BinaryIO, Literal
import json
from datasets import Dataset
import gradio as gr
from evaluation import evaluate_problem
from datetime import datetime
PROBLEM_TYPES = ["geometrical", "simple_to_build", "mhd_stable"]
def evaluate_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)
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()
save_to_dataset(problem_type, file_content, timestamp, output)
return output
def save_to_dataset(problem_type, file_content, timestamp, result):
# Example: convert to one-row dataframe
record = {
"submission_time": timestamp,
"problem_type": problem_type,
"boundary_json": file_content.decode("utf-8"), # Or store file path or URL
"result": result,
}
# If this is the first entry, create dataset
dataset_file = "local_dataset.jsonl"
with open(dataset_file, "a") as f:
f.write(json.dumps(record) + "\n")
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(
evaluate_boundary,
inputs=[problem_type, boundary_file],
outputs=output,
)
return demo
if __name__ == "__main__":
gradio_interface().launch()