File size: 6,315 Bytes
ad956b6
46cbdf9
 
7724700
46cbdf9
 
 
 
 
 
52c683f
46cbdf9
7724700
 
 
46cbdf9
 
 
 
 
52c683f
46cbdf9
 
 
 
 
 
52c683f
 
 
 
94673da
52c683f
 
 
46cbdf9
 
 
 
 
52c683f
 
 
 
 
 
 
94673da
52c683f
 
 
c91d84c
94673da
46cbdf9
ad956b6
1a67d0f
 
 
 
1c7801c
 
75eb05b
94673da
0cd8e4c
 
50de557
0cd8e4c
 
 
50de557
99b6330
 
94673da
99b6330
 
 
50de557
 
99b6330
0cd8e4c
 
 
 
46cbdf9
75eb05b
46cbdf9
 
 
 
 
 
 
 
 
 
52c683f
1a67d0f
 
 
 
 
46cbdf9
 
1a67d0f
 
 
46cbdf9
 
 
 
 
 
 
 
c91d84c
46cbdf9
 
 
 
 
1a67d0f
 
 
 
1c7801c
1a67d0f
 
46cbdf9
 
 
 
 
 
 
 
 
63c6341
46cbdf9
63c6341
46cbdf9
 
 
 
 
 
 
 
52c683f
46cbdf9
 
 
7724700
46cbdf9
 
7724700
46cbdf9
7724700
46cbdf9
7724700
46cbdf9
 
 
 
63c6341
46cbdf9
63c6341
46cbdf9
75eb05b
83cc4f8
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
import gradio as gr
import os
import json
import random

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

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

# Colors for task cards
CARD_COLORS = ["#FFDDC1", "#FFABAB", "#FFC3A0", "#D5AAFF", "#85E3FF", "#B9FBC0"]

# 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)
        print(f"Saved file: {file_path}, Contents: {data}")
        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)
                print(f"File: {file}, Content: {data}")
                # Filter by task type
                if data.get("task_type") == task_type:
                    tasks.append(data)
        except (json.JSONDecodeError, KeyError) as e:
            print(f"Error reading file {file}: {e}")
    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 gr.update(choices=TASK_TYPES), f"Task type '{new_type}' added successfully!"
    return gr.update(choices=TASK_TYPES), "Task type already exists or invalid input."

# Function to display tasks as clickable cards
def display_tasks(task_type):
    tasks = get_tasks_by_type(task_type)
    html_content = "<div style='display: flex; flex-wrap: wrap; gap: 10px; color: #000;'>"
    for idx, task in enumerate(tasks):
        color = random.choice(CARD_COLORS)
        html_content += f"""
        <div style='background-color: {color}; color: #000; padding: 10px; border-radius: 5px; cursor: pointer;' onclick="document.getElementById('task-details-{idx}').style.display='block';">
            <b>{task['description']}</b>
        </div>
        <div id='task-details-{idx}' style='display: none; margin-top: 10px; border: 1px solid #ccc; background: #fff; padding: 10px; border-radius: 5px;'>
            <b>Task Type:</b> {task['task_type']}<br>
            <b>Description:</b> {task['description']}<br>
            <b>YAML/Text:</b><pre>{task['yaml']}</pre>
            <button style='margin-top: 10px; color: #000;' onclick="document.getElementById('task-details-{idx}').style.display='none';">Close</button>
            <span style='cursor: pointer; float: right; font-size: 18px; color: #000;' onclick="document.getElementById('task-details-{idx}').style.display='none';">&times;</span>
        </div>
        """
    html_content += "</div>"
    return html_content

# 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=20
            )
            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]  # Update dropdown and 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_display = gr.HTML(label="Submitted Tasks")
            go_to_submit_tab = gr.Button("Go to Submit Task")

            # Handle task display
            view_button.click(
                display_tasks,
                inputs=[task_type_filter],
                outputs=[task_display]
            )

            # 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()