File size: 2,916 Bytes
022601f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4be744b
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
import gradio as gr
from response_db import StResponseDb
db = StResponseDb()
a = gr.Number(0)

def get_next_question(history):
    if len(history)==2:
        question = "What is the man doing?"
    elif len(history)==4:
        question = "How many apples are there?"
    else:
        question = "What color is the cat?"
    return question

def ask_a_question(input, taskid, history=[]):
    history.append(input)
    db.add(int(a.value), taskid, len(history)//2-1, history[-2], history[-1])
    history.append(get_next_question(history))
    
    # write some HTML
    html = "<div class='chatbot'>"
    for m, msg in enumerate(history):
        cls = "bot" if m%2 == 0 else "user"
        html += "<div class='msg {}'> {}</div>".format(cls, msg)
    html += "</div>"
    return html, history


css = """
.chatbox {display:flex;flex-direction:column}
.msg {padding:4px;margin-bottom:4px;border-radius:4px;width:80%}
.msg.user {background-color:cornflowerblue;color:white}
.msg.bot {background-color:lightgray;align-self:self-end}
.footer {display:none !important}
"""

def set_images(taskid):
    id1 = f"images/img_{int(10*(taskid-1)+1)}.jpg"
    id2 = f"images/img_{int(10*(taskid-1)+2)}.jpg"
    id3 = f"images/img_{int(10*(taskid-1)+3)}.jpg"
    id4 = f"images/img_{int(10*(taskid-1)+4)}.jpg"
    id5 = f"images/img_{int(10*(taskid-1)+5)}.jpg"
    id6 = f"images/img_{int(10*(taskid-1)+6)}.jpg"
    id7 = f"images/img_{int(10*(taskid-1)+7)}.jpg"
    id8 = f"images/img_{int(10*(taskid-1)+8)}.jpg"
    id9 = f"images/img_{int(10*(taskid-1)+9)}.jpg"
    id10 = f"images/img_{int(10*(taskid-1)+10)}.jpg"
    first_question = "How many dogs are there?"
    first_question_html = f"<div class='chatbot'><div class='msg bot'>{first_question}</div></div>"
    a.value = a.value+1
    return id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, [first_question], first_question_html

with gr.Blocks(css=css) as demo:

    with gr.Column() as img_block:
        with gr.Row():
            img1 = gr.Image()
            img2 = gr.Image()
            img3 = gr.Image()
            img4 = gr.Image()
            img5 = gr.Image()
        with gr.Row():
            img6 = gr.Image()
            img7 = gr.Image()
            img8 = gr.Image()
            img9 = gr.Image()
            img10 = gr.Image()
    conversation = gr.HTML()
    history_log = gr.State([])

    with gr.Column():
        with gr.Row():
            taskid = gr.Number(label="Task ID (Choose from [1,2,3])")
            btn1 = gr.Button("Enter")
        btn1.click(set_images, inputs=taskid, outputs=[img1, img2, img3, img4, img5, img6, img7, img8, img9, img10, history_log, conversation])
    answer = gr.inputs.Textbox(placeholder="Insert answer here.", label="Answer the given question.")
    submit = gr.Button("Submit")
    submit.click(fn=ask_a_question, inputs=[answer, taskid, history_log], outputs=[conversation, history_log])

demo.launch()