File size: 2,693 Bytes
1d5e796
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import json
import requests
import gradio as gr

def download_fn(url):
    resp = requests.get(url)
    data = json.loads(resp.content)

    for idx, data_item in enumerate(data[:]):
        for conv in data_item:
            if len(conv) != 2:
                del data[idx]
                break

    first_data = []
    if len(data) > 0:
        for first_conv in data[0]:
            piece = []
            for key in first_conv:
                piece.append(first_conv[key])

            first_data.append(piece)
        
    return (
        data,
        first_data,
        0,
        gr.Button(interactive=True) if len(data) > 0 else gr.Button(interactive=False),
        gr.Button(interactive=True) if len(data) > 0 else gr.Button(interactive=False)
    )

def move_next_fn(data, cursor):
    cursor = cursor + 1
    next_data = []

    for conv in data[cursor]:
        piece = []
        for key in conv:
            piece.append(conv[key])

        next_data.append(piece)

    return (
        next_data,
        cursor,
        gr.Button(interactive=True),
        gr.Button(interactive=True) if cursor < len(data)-1 else gr.Button(interactive=False)
    )

def move_prev_fn(data, cursor):
    cursor = cursor -1
    prev_data = []

    for conv in data[cursor]:
        piece = []
        for key in conv:
            piece.append(conv[key])

        prev_data.append(piece)

    return (
        prev_data,
        cursor,
        gr.Button(interactive=True) if cursor > 0 else gr.Button(interactive=False),
        gr.Button(interactive=True)
    )

with gr.Blocks() as demo:
    data = gr.State([])
    data_to_be_removed = gr.State(set())
    cursor = gr.State(-1)

    with gr.Row():
        url = gr.Textbox(label="URL", placeholder="URL to download conversation recorded JSON", scale=9)
        download = gr.Button("Download", scale=1)
    
    chatbot = gr.Chatbot()

    with gr.Row():
        prev_btn = gr.Button("Prev", interactive=False)
        mark_btn = gr.Button("✅ Mark to remove ", interactive=False)
        next_btn = gr.Button("Next", interactive=False)

    download.click(
        download_fn,
        inputs=[url], 
        outputs=[data, chatbot, cursor, next_btn, mark_btn]
    )

    prev_btn.click(
        move_prev_fn,
        inputs=[data, cursor],
        outputs=[chatbot, cursor, prev_btn, next_btn]
    )

    next_btn.click(
        move_next_fn,
        inputs=[data, cursor],
        outputs=[chatbot, cursor, prev_btn, next_btn]
    )

    mark_btn.click(
        lambda remove_list, cursor: remove_list.add(cursor),
        inputs=[data_to_be_removed, cursor],
        outputs=[data_to_be_removed]
    )

    

demo.launch(debug=True)