MedVQA / gradio_interface.py
SushantGautam's picture
Add Gradio interface for viewing and uploading submissions
9e4515d
raw
history blame
6.74 kB
import gradio as gr
from datetime import datetime, timedelta
import json
# Sample data structure to hold submission information
submissions = [
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
{"user": "User1", "task": "task1", "submitted_time": datetime.now() -
timedelta(hours=1)},
{"user": "User2", "task": "task2", "submitted_time": datetime.now() -
timedelta(days=1)},
{"user": "User3", "task": "task1", "submitted_time": datetime.now() -
timedelta(minutes=30)},
# ... add more sample data as needed ...
]
def time_ago(submitted_time):
delta = datetime.now() - submitted_time
if delta.days > 0:
return f"{delta.days} days ago"
elif delta.seconds // 3600 > 0:
return f"{delta.seconds // 3600} hours ago"
elif delta.seconds // 60 > 0:
return f"{delta.seconds // 60} minutes ago"
else:
return "just now"
def filter_submissions(task_type, search_query):
if search_query == "":
filtered = [s for s in submissions if task_type ==
"all" or s["task"] == task_type]
else:
filtered = [s for s in submissions if (
task_type == "all" or s["task"] == task_type) and search_query.lower() in s["user"].lower()]
return [{"user": s["user"], "task": s["task"], "submitted_time": time_ago(s["submitted_time"])} for s in filtered]
def display_submissions(task_type="all", search_query=""):
filtered_submissions = filter_submissions(task_type, search_query)
return [[s["user"], s["task"], s["submitted_time"]] for s in filtered_submissions]
def add_submission(file):
try:
new_submissions = json.load(file)
for submission in new_submissions:
submission["submitted_time"] = datetime.strptime(
submission["submitted_time"], "%Y-%m-%d %H:%M:%S")
submissions.append(submission)
return "Submissions added successfully!"
except Exception as e:
return f"Error: {str(e)}"
# Define Gradio interface components
output_table = gr.Dataframe(
headers=["User", "Task", "Submitted Time"], value=display_submissions(), scale=5,)
task_type_dropdown = gr.Dropdown(
choices=["all", "task1", "task2"], value="all", label="Task Type")
search_box = gr.Textbox(value="", label="Search User")
upload_button = gr.File(label="Upload JSON", file_types=["json"])
# Create a tabbed interface
with gr.Blocks(title="ImageCLEFmed-MEDVQA-GI-2025 Submissions") as demo:
with gr.Tab("View Submissions"):
gr.Interface(
fn=display_submissions,
inputs=[task_type_dropdown, search_box],
outputs=output_table,
title="ImageCLEFmed-MEDVQA-GI-2025 Submissions",
description="Filter and search submissions by task type and user."
)
with gr.Tab("Upload Submission", visible=False):
gr.Interface(
api_name="UploadSubmission",
fn=add_submission,
inputs=upload_button,
outputs="text",
title="Upload Submissions",
description="Upload a JSON file to add new submissions."
)
demo.launch()