File size: 10,928 Bytes
a1f93e9 2fa4e4c 459fbe3 5799733 d72c532 241f191 2fa4e4c 241f191 7085eea b099d9e 2fa4e4c 241f191 2fa4e4c 241f191 2fa4e4c 241f191 2fa4e4c a1f93e9 7085eea 2e0b320 4e4c514 2e0b320 4e4c514 2e0b320 241f191 2e0b320 241f191 8988bbf 726a01e 241f191 3ac04fa f0929ee 2fa4e4c f0929ee 7085eea b6dd571 241f191 2fa4e4c f0929ee b70508d 726a01e 241f191 8607d84 241f191 b6dd571 241f191 b6dd571 241f191 b6dd571 241f191 b6dd571 726a01e 241f191 b6dd571 241f191 b6dd571 241f191 7085eea 2fa4e4c b6dd571 f0929ee 241f191 f0929ee 726a01e a752f35 f0929ee 5799733 8344bac 241f191 b099d9e e52ef2a d72c532 8344bac d89d143 8344bac 8607d84 8344bac 241f191 8344bac 8607d84 241f191 726a01e 459fbe3 f0929ee 459fbe3 8344bac 73119ac 2fa4e4c 459fbe3 |
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 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
"""
"""
import random
import config
from app_util import *
user_simulator_pre_doc = """\
You are a helpful assistant, and the agent acts as user.
"""
user_simulator_post_doc = """\
## How does it work?
There are maily two types of user simulator:
- prompt-based user-simulator (role-play)
- model-based user-simulator
This demo is a model-based user simulator.
"""
# In most cases, large language models (LLMs) are used to serve as assistant generator.
# Besides, it can also used as user simulator.
assistant_simulator_pre_doc = """\
You are a user, and the agent acts as assistant.
"""
assistant_simulator_post_doc = """\
"""
self_chat_pre_doc = """\
Self-chat is a demo which make the model talk to itself. Dual-agent.
"""
self_chat_post_doc = """\
## How does it work?
It is a combination of user simulator and response generator.
"""
survey = """\
## knowledge distillation 知识蒸馏
Essentially, it is a form of model compression.
## distilling knowledge != knowledge distillation
知识的形式可以是 QA纯文本,也可以是 QA+概率。
## 有不用概率的知识蒸馏吗?
"""
gr.set_static_paths(paths=["assets/"])
"""
<div class="avatar-container"><img src="file=assets/man.png" class="avatar-image" alt="user avatar"></div>
"""
css="""
.image_center {
display: block;
margin: auto;
}
"""
with gr.Blocks(head=None, css=css) as demo:
# Knowledge Distillation through Self Chatting
# Distilling the Knowledge from LLM through Self Chatting
# Generating Synthetic Data through Self Chat
gr.HTML("""<h1 align="center">Generating Synthetic Data via Self-Chatting</h1>""")
with gr.Row():
with gr.Column(scale=5):
system = gr.Dropdown(
choices=system_list,
# value=system_list[0],
allow_custom_value=True,
interactive=True,
label="System message",
scale=5,
)
chatbot = gr.Chatbot(show_copy_button=True,
show_share_button=True,
# avatar_images=("assets/man.png", "assets/bot.png"),
avatar_images=("assets/man.png", "assets/女客服.png"),
likeable=True)
# gr.Textbox("For faster inference, you can build locally with ")
# ss
with gr.Tab("Self Chat") as tab_dual_agent:
gr.Markdown(self_chat_pre_doc)
input_text_1 = gr.Textbox(show_label=False, placeholder="...", lines=10, visible=False)
generate_btn = gr.Button("🤖Self-Chat🤖", variant="primary")
with gr.Row():
retry_btn = gr.Button("🔄 Regenerate", variant="secondary", size="sm")
undo_btn = gr.Button("↩️ Undo", variant="secondary", size="sm")
# clear_btn = gr.Button("🗑️ Clear", variant="secondary", size="sm")
clear_btn = gr.Button("🧹 Clear History", variant="secondary", size="sm")
gr.Markdown(self_chat_post_doc)
# 也叫 chat-assistant, 🎧,🤖 ,💁,
with gr.Tab("Response Generator") as tab_assistant_agent:
gr.Markdown(assistant_simulator_pre_doc)
with gr.Row():
# gr.HTML(
# value='<div><img src="/file=./assets/man.png" alt="Big Boat" width="40px" height="40px"></div>',
# elem_classes=["image_center"]
# )
gr.Image("assets/man.png", interactive=False, show_download_button=False, width=40, height=40,
min_width=40,
show_share_button=False, show_fullscreen_button=False, container=False,
elem_classes=["image_center"])
input_text_2 = gr.Textbox(show_label=False, lines=2, placeholder="Please type user input",
container=False, scale=12)
generate_btn_2 = gr.Button("Send", variant="primary", min_width=80)
with gr.Row():
retry_btn_2 = gr.Button("🔄 Regenerate", variant="secondary", size="sm", )
undo_btn_2 = gr.Button("↩️ Undo", variant="secondary", size="sm", )
clear_btn_2 = gr.Button("🧹 Clear History", variant="secondary", size="sm")
gr.Markdown(assistant_simulator_post_doc)
#
with gr.Tab("User Simulator") as tab_user_agent: # 👨,🔊,
gr.Markdown(user_simulator_pre_doc)
with gr.Row():
# gr.HTML(value='<div class="avatar-container"><img src="file=assets/man.png" class="avatar-image" alt="user avatar"></div>')
# gr.Image("assets/女客服.jpg",
gr.Image("assets/女客服.png",
# gr.Image("assets/男客服.png",
interactive=False, show_download_button=False, width=40, height=40,
min_width=40,
show_share_button=False, show_fullscreen_button=False, container=False, elem_classes=["image_center"])
input_text_3 = gr.Textbox(show_label=False, lines=2, placeholder="Please type assistant response",
container=False, scale=12)
generate_btn_3 = gr.Button("Send", variant="primary", min_width=80)
with gr.Row():
retry_btn_3 = gr.Button("🔄 Regenerate", variant="secondary", size="sm")
undo_btn_3 = gr.Button("↩️ Undo", variant="secondary", size="sm")
# clear_btn_3 = gr.Button("🗑️ Clear", variant="secondary", size="sm")
clear_btn_3 = gr.Button("🧹 Clear History", variant="secondary", size="sm") # 🧹 Clear History (清除历史)
gr.Markdown(user_simulator_post_doc)
with gr.Column(variant="compact", scale=1, min_width=300):
# with gr.Column():
model = gr.Dropdown(
["Qwen2-0.5B-Instruct", "llama3.1", "gemini", "MiniCPM3-4B"],
value="Qwen2-0.5B-Instruct",
label="Model",
interactive=True,
# visible=False
)
with gr.Accordion(label="Parameters", open=True):
slider_max_new_tokens = gr.Slider(minimum=1, maximum=4096,
value=config.DEFAULT_MAX_NEW_TOKENS, step=1, label="Max New tokens")
slider_temperature = gr.Slider(minimum=0.1, maximum=10.0,
value=config.DEFAULT_TEMPERATURE, step=0.1, label="Temperature",
info="Larger temperature increase the randomness")
slider_top_p = gr.Slider(
minimum=0.1,
maximum=1.0,
value=config.DEFAULT_TOP_P,
step=0.05,
label="Top-p (nucleus sampling)",
)
slider_top_k = gr.Slider(
minimum=1,
maximum=200,
value=config.DEFAULT_TOP_K,
step=1,
label="Top-k",
)
# TODO: gr.State 不能通过API传参。
gr_false = gr.State(False)
history = gr.State([{"role": "system", "content": system_list[0]}]) # 有用信息只有个system,其他和chatbot内容重叠
system.change(reset_state, inputs=[system], outputs=[chatbot, history])
######## tab1: self-chat
generate_btn.click(chat, [chatbot, history], outputs=[chatbot, history],
show_progress="full")
retry_btn.click(undo_generate, [chatbot, history], outputs=[chatbot, history], show_api=False) \
.then(chat, [chatbot, history], outputs=[chatbot, history],
show_progress="full", show_api=False)
undo_btn.click(undo_generate, [chatbot, history], outputs=[chatbot, history], show_api=False)
clear_btn.click(reset_state, inputs=[system], outputs=[chatbot, history], show_api=False)
######## tab2: response-generator
generate_btn_2.click(append_user_to_history, [input_text_2, chatbot, history], outputs=[chatbot, history],
show_api=False) \
.then(generate_assistant_message, [chatbot, history], outputs=[chatbot, history],
show_progress="full", show_api=False)
retry_btn_2.click(undo_generate, [chatbot, history], outputs=[chatbot, history], show_api=False) \
.then(chat, [chatbot, history], outputs=[chatbot, history],
show_progress="full", show_api=False)
undo_btn_2.click(undo_generate, [chatbot, history], outputs=[chatbot, history], show_api=False)
clear_btn_2.click(reset_state, inputs=[system], outputs=[chatbot, history], show_api=False) \
.then(reset_user_input, outputs=[input_text_2], show_api=False)
tab_assistant_agent.select(generate_assistant_message, [chatbot, history, gr_false], outputs=[chatbot, history],
show_progress="full", show_api=False) # 点击tab,生成response (不warning)
######## tab3: user-simulator
generate_btn_3.click(append_assistant_to_history, [input_text_3, chatbot, history], outputs=[chatbot, history],
show_api=False) \
.then(generate_user_message, [chatbot, history], outputs=[chatbot, history],
show_progress="full", show_api=False)
retry_btn_3.click(undo_generate, [chatbot, history], outputs=[chatbot, history], show_api=False) \
.then(chat, [chatbot, history], outputs=[chatbot, history],
show_progress="full", show_api=False)
undo_btn_3.click(undo_generate, [chatbot, history], outputs=[chatbot, history], show_api=False)
clear_btn_3.click(reset_state, inputs=[system], outputs=[chatbot, history], show_api=False) \
.then(reset_user_input, outputs=[input_text_3], show_api=False)
tab_user_agent.select(generate_user_message, [chatbot, history, gr_false], outputs=[chatbot, history],
show_progress="full", show_api=False) # 点击tab,生成user-input
slider_max_new_tokens.change(set_max_new_tokens, inputs=[slider_max_new_tokens])
slider_temperature.change(set_temperature, inputs=[slider_temperature])
slider_top_p.change(set_top_p, inputs=[slider_top_p])
slider_top_k.change(set_top_k, inputs=[slider_top_k])
demo.load(lambda: gr.update(value=random.choice(system_list)), None, system, show_api=False)
# demo.queue().launch(share=False, server_name="0.0.0.0", debug=True)
# demo.queue().launch(concurrency_count=1, max_size=5)
demo.queue().launch()
|