File size: 1,589 Bytes
f9a286f
6c842bf
f9a286f
f634d68
713a112
ccc7a73
85decc9
 
 
6c842bf
96b5219
cb4ac65
f6f76f5
 
 
 
cb4ac65
d11a769
713a112
4d7e1f3
6c842bf
 
 
 
 
 
 
4d7e1f3
713a112
6c842bf
cb4ac65
d11a769
6c842bf
 
 
 
 
483f904
6c842bf
 
 
 
 
d11a769
 
 
cb4ac65
85decc9
f9a286f
15ba887
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()