File size: 3,412 Bytes
1ae0896
 
 
cf47eda
1ae0896
 
 
 
 
 
 
 
 
cf47eda
1ae0896
 
 
 
 
 
 
 
 
 
 
cf47eda
1ae0896
cf47eda
1ae0896
 
 
 
cf47eda
 
10025ad
6cc59ea
 
cf47eda
 
1ae0896
cf47eda
 
 
 
 
1ae0896
cf47eda
 
 
 
1ae0896
cf47eda
 
 
1ae0896
cf47eda
 
1ae0896
cf47eda
 
90de956
cf47eda
ac52225
cf47eda
1ae0896
cf47eda
 
1ae0896
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90de956
1ae0896
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import random

# Chatbot demo with multimodal input (text, markdown, LaTeX, code blocks, image, audio, & video). Plus shows support for streaming text.

color_map = {
    "harmful": "crimson",
    "neutral": "gray",
    "beneficial": "green",
}

def html_src(harm_level):
    return f"""
<div style="display: flex; gap: 5px;padding: 2px 4px;margin-top: -40px">
  <div style="background-color: {color_map[harm_level]}; padding: 2px; border-radius: 5px;">
  {harm_level}
  </div>
</div>
"""

def print_like_dislike(x: gr.LikeData):
    print(x.index, x.value, x.liked)

def add_message(history, message):
    for x in message["files"]:
        history.append({"role": "user", "content": {"path": x}})
    if message["text"] is not None:
        history.append({"role": "user", "content": message['text']})
    return history, gr.MultimodalTextbox(value=None, interactive=False)

def bot(history, response_type):
    if response_type == "gallery":
        msg = {"role": "assistant",
               "content": gr.Gallery(
            [
                "https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/images/bus.png",
                "https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/images/bus.png",
            ])
        }
    elif response_type == "image":
        msg = {"role": "assistant",
               "content": gr.Image(
                   "https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/images/bus.png"
               )
        }
    elif response_type == "video":
        msg = {"role": "assistant",
               "content": gr.Video("https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/videos/world.mp4",
                                   label="test")
        }
    elif response_type == "audio":
        msg = {"role": "assistant",
               "content": gr.Audio("https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/audio/audio_sample.wav")
        }
    elif response_type == "html":
       msg = {"role": "assistant",
              "content": gr.HTML(
            html_src(random.choice(["harmful", "neutral", "beneficial"]))
            )
       }
    elif response_type == "model3d":
        msg = {"role": "assistant", "content": gr.Model3D(
           "https://github.com/gradio-app/gradio/raw/main/gradio/media_assets/models3d/Fox.gltf"
        )}
    else:
        msg = {"role": "assistant", "content": "Cool!"}
    history.append(msg)
    return history

with gr.Blocks(fill_height=True) as demo:
    chatbot = gr.Chatbot(
        elem_id="chatbot",
        scale=1,
    )
    response_type = gr.Radio(
        [
            "image",
            "text",
            "gallery",
            "video",
            "audio",
            "html",
            "model3d",
        ],
        value="text",
        label="Response Type",
    )

    chat_input = gr.MultimodalTextbox(
        interactive=True,
        placeholder="Enter message or upload file...",
        show_label=False,
    )

    chat_msg = chat_input.submit(
        add_message, [chatbot, chat_input], [chatbot, chat_input]
    )
    bot_msg = chat_msg.then(
        bot, [chatbot, response_type], chatbot, api_name="bot_response"
    )
    bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])

    chatbot.like(print_like_dislike, None, None)

if __name__ == "__main__":
    demo.launch()