File size: 1,589 Bytes
e3c695c
dcd93f8
e3c695c
02f2014
eab22be
0da90a5
ab104ea
 
 
dcd93f8
f60e3bf
1a651fb
92dcf46
 
 
 
1a651fb
2cd7e8d
eab22be
9eef9c6
dcd93f8
 
 
 
 
 
 
9eef9c6
eab22be
dcd93f8
1a651fb
2cd7e8d
dcd93f8
 
 
 
 
6b7a6f6
dcd93f8
 
 
 
 
2cd7e8d
 
 
1a651fb
ab104ea
e3c695c
b334bb7
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
import gradio as gr
import time

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


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


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


def bot(history: list):
    response = "**That's cool!**"
    history.append({"role": "assistant", "content": ""})
    for character in response:
        history[-1]["content"] += character
        time.sleep(0.05)
        yield history


with gr.Blocks() as demo:
    chatbot = gr.Chatbot(elem_id="chatbot", like_user_message=True)

    chat_input = gr.MultimodalTextbox(
        interactive=True,
        file_count="multiple",
        placeholder="Enter message or upload file...",
        show_label=False,
        sources=["microphone", "upload"],
    )

    chat_msg = chat_input.submit(
        add_message, [chatbot, chat_input], [chatbot, chat_input]
    )
    bot_msg = chat_msg.then(bot, chatbot, 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()