File size: 5,199 Bytes
ad956b6
46cbdf9
 
 
 
 
 
 
 
52c683f
46cbdf9
 
 
 
 
 
52c683f
46cbdf9
 
 
 
 
 
52c683f
 
 
 
 
 
 
46cbdf9
 
 
 
 
52c683f
 
 
 
 
 
 
 
 
 
 
 
 
46cbdf9
ad956b6
1a67d0f
 
 
 
52c683f
 
 
1a67d0f
46cbdf9
 
 
75eb05b
46cbdf9
75eb05b
46cbdf9
 
 
 
 
 
 
 
 
 
52c683f
1a67d0f
 
 
 
 
46cbdf9
 
1a67d0f
 
 
46cbdf9
 
 
 
 
 
 
 
 
 
 
 
 
 
1a67d0f
 
 
 
 
 
 
46cbdf9
 
 
 
 
 
 
 
 
63c6341
46cbdf9
63c6341
46cbdf9
 
 
 
 
 
 
 
52c683f
46cbdf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63c6341
46cbdf9
63c6341
46cbdf9
75eb05b
52c683f
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import gradio as gr
import os
import json

# Directory to store submissions
DATA_DIR = "submissions"
os.makedirs(DATA_DIR, exist_ok=True)

# Predefined task types
TASK_TYPES = ["Classification", "Regression", "Translation"]

# Function to handle task submission
def submit_task(task_type, description, yaml_text):
    if not yaml_text.strip():
        return "YAML/Text input cannot be empty."

    # Prepare data
    data = {
        "task_type": task_type,
        "description": description,
        "yaml": yaml_text
    }
    file_path = os.path.join(DATA_DIR, f"{task_type}_{len(os.listdir(DATA_DIR))}.json")
    
    try:
        with open(file_path, "w") as f:
            json.dump(data, f)
        return f"Task submitted successfully under type '{task_type}'!"
    except Exception as e:
        return f"Error saving task: {e}"

# Function to get tasks by type
def get_tasks_by_type(task_type):
    tasks = []
    for file in os.listdir(DATA_DIR):
        # Skip non-JSON files
        if not file.endswith(".json"):
            continue
        
        try:
            with open(os.path.join(DATA_DIR, file), "r") as f:
                data = json.load(f)
                # Filter by task type
                if data.get("task_type") == task_type:
                    tasks.append(data)
        except (json.JSONDecodeError, KeyError):
            # Skip invalid or corrupted files
            print(f"Skipped invalid file: {file}")
    return tasks

# Function to dynamically add a new task type
def add_new_task_type(new_type):
    if new_type and new_type not in TASK_TYPES:
        TASK_TYPES.append(new_type)
        # Return the updated choices
        return TASK_TYPES, f"Task type '{new_type}' added successfully!"
    return TASK_TYPES, "Task type already exists or invalid input."

# Function to switch tabs
def switch_tab(tab_name):
    return gr.Tabs.update(visible_tab=tab_name)

# Gradio App
with gr.Blocks() as app:
    gr.Markdown("# Task Configuration Sharing Space")

    with gr.Tabs() as tabs:
        with gr.Tab("Submit Task"):
            gr.Markdown("## Submit a New Task Configuration")
            
            # Input fields for the task submission
            task_type_input = gr.Dropdown(
                label="Task Type",
                choices=TASK_TYPES,
                value="Classification",
                interactive=True
            )
            new_task_input = gr.Textbox(
                label="Add New Task Type",
                placeholder="Enter a new task type",
                interactive=True
            )
            add_task_button = gr.Button("Add Task Type")
            add_task_status = gr.Textbox(label="Status", interactive=False)

            description_input = gr.Textbox(
                label="Task Description",
                placeholder="Provide a brief description of the task.",
                lines=3
            )
            yaml_input = gr.Textbox(
                label="YAML/Text Input",
                placeholder="Paste your YAML or text configuration here.",
                lines=10
            )
            submit_button = gr.Button("Submit Task")
            go_to_view_tab = gr.Button("Go to View Tasks")
            submission_status = gr.Textbox(label="Status", interactive=False)

            # Handle adding new task type
            add_task_button.click(
                add_new_task_type,
                inputs=[new_task_input],
                outputs=[task_type_input, add_task_status]
            )

            # Handle task submission
            submit_button.click(
                submit_task,
                inputs=[task_type_input, description_input, yaml_input],
                outputs=[submission_status]
            )

            # Button to switch to "View Tasks" tab
            go_to_view_tab.click(
                lambda: gr.Tabs.update(visible_tab="View Tasks"),
                inputs=None,
                outputs=[tabs]
            )

        with gr.Tab("View Tasks"):
            gr.Markdown("## View Submitted Tasks")

            task_type_filter = gr.Dropdown(
                label="Filter by Task Type",
                choices=TASK_TYPES,
                value="Classification",
                interactive=True
            )
            view_button = gr.Button("View Tasks")
            task_table = gr.Dataframe(headers=["Task Type", "Description", "YAML/Text"], interactive=False)
            go_to_submit_tab = gr.Button("Go to Submit Task")

            # Function to filter tasks by type
            def filter_tasks(task_type):
                tasks = get_tasks_by_type(task_type)
                return [{"Task Type": t["task_type"], "Description": t["description"], "YAML/Text": t["yaml"]} for t in tasks]

            # Handle task filtering
            view_button.click(
                filter_tasks,
                inputs=[task_type_filter],
                outputs=[task_table]
            )

            # Button to switch to "Submit Task" tab
            go_to_submit_tab.click(
                lambda: gr.Tabs.update(visible_tab="Submit Task"),
                inputs=None,
                outputs=[tabs]
            )

app.launch()