File size: 3,098 Bytes
3ac04fa
5799733
 
12a161c
 
5799733
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e52ef2a
5799733
 
 
 
 
64e9b3c
e52ef2a
5799733
 
e52ef2a
 
5799733
 
e52ef2a
5799733
 
 
 
b099d9e
5799733
 
 
d89d143
5799733
64e9b3c
e52ef2a
5799733
e52ef2a
5799733
e52ef2a
5799733
 
e52ef2a
5799733
 
e52ef2a
75b1ba6
e4e3ccf
55b26f1
e52ef2a
55b26f1
e52ef2a
5799733
d89d143
e4e3ccf
 
 
5799733
 
e52ef2a
3ac04fa
 
 
 
 
 
 
 
 
e52ef2a
5799733
 
 
 
 
 
 
863617a
5799733
 
 
 
 
f0929ee
 
459fbe3
 
5799733
f0929ee
 
 
5799733
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
import json
import gradio as gr
from utils.logging_util import logger
from models.cpp_qwen2 import bot
# from models.hf_qwen2 import bot


#
# def postprocess(self, y):
#     if y is None:
#         return []
#     for i, (message, response) in enumerate(y):
#         y[i] = (
#             None if message is None else mdtex2html.convert((message)),
#             None if response is None else mdtex2html.convert(response),
#         )
#     return y
#
# gr.Chatbot.postprocess = postprocess


def generate_query(chatbot, history):
    if history and history[-1]["role"] == "user":
        gr.Warning('You should generate assistant-response.')
        yield None, chatbot, history
    else:
        chatbot.append(None)
        streamer = bot.generate(history, stream=True)
        for query, query_tokens in streamer:
            chatbot[-1] = (query, None)
            yield query, chatbot, history
        history.append({"role": "user", "content": query, "tokens": query_tokens})
        yield query, chatbot, history


def generate_response(chatbot, history):
    """
    auto-mode:query is None
    manual-mode:query 是用户输入
    """
    logger.info(f"generating {json.dumps(history, ensure_ascii=False)}")
    query = history[-1]["content"]
    if history[-1]["role"] != "user":
        gr.Warning('You should generate or type user-input first.')
        yield None, chatbot, history
    else:
        streamer = bot.generate(history, stream=True)
        for response, response_tokens in streamer:
            chatbot[-1] = (query, response)
            yield response, chatbot, history

        history.append({"role": "assistant", "content": response, "tokens": response_tokens})
        print(f"chatbot is {chatbot}")
        print(f"history is {history}")
        yield response, chatbot, history


def generate(chatbot, history):
    logger.info(f"chatbot: {chatbot}; history: {history}")
    streamer = None
    if history[-1]["role"] in ["assistant", "system"]:
        streamer = generate_query(chatbot, history)
    elif history[-1]["role"] == "user":
        streamer = generate_response(chatbot, history)
    else:
        gr.Warning("bug")

    for out in streamer:
        yield out


def undo_generate(chatbot, history):
    if history[-1]["role"] == "user":
        history = history[:-1]
        chatbot = chatbot[:-1]
    elif history[-1]["role"] == "assistant":
        history = history[:-1]
        chatbot[-1] = (chatbot[-1][0], None)
    else:
        pass
    logger.info(f"after undo, {json.dumps(chatbot, ensure_ascii=False)}, {json.dumps(history, ensure_ascii=False)}")
    return "", chatbot, history


def reset_user_input():
    return gr.update(value='')


def reset_state(system):
    return [], [{"role": "system", "content": system}]


def set_max_tokens(max_tokens):
    bot.generation_kwargs["max_tokens"] = max_tokens

def set_temperature(temperature):
    bot.generation_kwargs["temperature"] = temperature
def set_top_p(top_p):
    bot.generation_kwargs["top_p"] = top_p

def set_top_k(top_k):
    bot.generation_kwargs["top_k"] = top_k