File size: 4,099 Bytes
f215879
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e89886d
f215879
 
 
 
 
 
 
 
 
 
 
 
 
be3619c
e57e9d3
 
 
f73242a
 
 
fa8ab40
 
f73242a
 
 
e57e9d3
f73242a
e3c1459
 
376fb29
e57e9d3
 
376fb29
 
e57e9d3
 
 
 
 
 
be3619c
376fb29
f215879
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
be3619c
85ccecf
f215879
be3619c
f215879
85ccecf
 
 
 
be3619c
85ccecf
e57e9d3
f215879
be3619c
f215879
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import gradio as gr
import random
import time

import chatglm_cpp
from pathlib import Path

model_file_path = "chatglm3-ggml_q4_0.bin"
#model_file_path = "../../Downloads1/chatglm3-ggml_q4_0.bin"
chatglm_llm = chatglm_cpp.Pipeline(Path(model_file_path))

def predict(message, history):
    flatten_history = []
    for a, b in history:
        flatten_history.append(a)
        flatten_history.append(b)

    streamer = chatglm_llm.chat(
        history= flatten_history + [message], do_sample=False,
        stream = True
        )

    response = ""
    for new_text in streamer:
        response += new_text
        yield response

with gr.Blocks(css = "custom.css") as demo:
    title = gr.HTML(
            """<h1 align="center"> <font size="+3"> ChatGLM3 Chatbot ☔️🐼 </font> </h1>""",
            elem_id="title",
    )

    gr.HTML(
            """<h1 align="left"> <font size="+0"> 与人工智能助手 ChatGLM3 进行对话 </font> </h1>""",
            #elem_id="title",
    )

    chatbot = gr.Chatbot()

    def user(user_message, history):
        return "", history + [[user_message, None]]

    '''
    def bot_api(user_message):
        l = user_message.split("[SEP]")
        history = []
        for ele in l:
            if not history:
                history.append(
                        [ele]
                    )
            else:
                if len(history[-1]) == 2:
                    history.append([ele])
                else:
                    history[-1].append(ele)
        if len(history[-1]) <= 1:
            return ""
        history[-1][1] = ""
        user_message_ = history[-1][0]
        pred_iter = predict(user_message_ ,history)
        for ele in pred_iter:
            history[-1][1] = ele
        user_message_out = []
        for ele in history:
            for e in ele:
                user_message_out.append(e)
        user_message_out = "[SEP]".join(user_message_out)
        return user_message_out
    '''

    def bot(history):
        '''
        bot_message = random.choice(["How are you?", "I love you", "I'm very hungry"])
        history[-1][1] = ""
        for character in bot_message:
            history[-1][1] += character
            time.sleep(0.05)
            yield history
        '''
        history[-1][1] = ""
        user_message = history[-1][0]
        pred_iter = predict(user_message ,history)
        for ele in pred_iter:
            history[-1][1] = ele
            yield history

    '''
    msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, chatbot, chatbot
    )
    '''
    with gr.Row():
        msg = gr.Textbox(
            #label="与人工智能助手 ChatGLM3 进行对话",
            show_label=True, lines=1, max_lines=20,
            min_width = 1024,
            placeholder="你好 人工智能助手 ChatGLM3,我可以问你一些问题吗?",
            elem_id="prompt",
            interactive=True,
            #info = "Generate by Click, and can edit by yourself, look up Examples below"
        )
        #msg_out = gr.Textbox(visible = False)
        sub_button = gr.Button("Submit")
    clear = gr.Button("Clear")
    #api_button = gr.Button("api", visible = False)

    sub_button.click(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, chatbot, chatbot
    )

    '''
    api_button.click(
        bot_api, msg, msg_out
    )
    '''

    clear.click(lambda: None, None, chatbot, queue=False)

    gr.Examples(
        ["你听说过马克思吗?", "如何进行经济建设?", "明朝内阁制度的特点是什么?",
        "请解释下面的emoji符号描述的情景👨👩🔥❄️",
        ],
        inputs = msg
    )

demo.queue()
demo.launch()

'''
from gradio_client import Client
client = Client("http://localhost:7860/")
result = client.predict(
		[["诸葛亮是哪个朝代的人?", "诸葛亮是三国时期的人。"],
         ["为什么说明朝是一个好的时代?", "因为出了王阳明。"],
         ["我之前问了哪些问题?", None]],
		api_name="/bot"
)
print(result)
'''