Update app.py
Browse files
app.py
CHANGED
@@ -10,8 +10,6 @@
|
|
10 |
|
11 |
import os
|
12 |
import re
|
13 |
-
import json
|
14 |
-
import time
|
15 |
import asyncio
|
16 |
import httpx
|
17 |
import gradio as gr
|
@@ -31,7 +29,11 @@ SIMSIMI_BAD_MAX = float(os.getenv("SIMSIMI_BAD_MAX", "0.30"))
|
|
31 |
# ---------------------------
|
32 |
# Load Qwen
|
33 |
# ---------------------------
|
34 |
-
dtype =
|
|
|
|
|
|
|
|
|
35 |
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
|
36 |
model = AutoModelForCausalLM.from_pretrained(
|
37 |
MODEL_ID,
|
@@ -174,13 +176,13 @@ async def hybrid_reply(history_messages, user_text, mode: str, lang: str, bad_ma
|
|
174 |
with gr.Blocks(css="""
|
175 |
#chatbot {height: 560px}
|
176 |
""") as demo:
|
177 |
-
gr.Markdown("## Qwen × SimSimi Hybrid Chat\n
|
178 |
|
179 |
-
#
|
180 |
mode_dd = gr.Dropdown(
|
181 |
-
choices=["
|
182 |
-
value="
|
183 |
-
label="
|
184 |
)
|
185 |
|
186 |
chatbox = gr.Chatbot(elem_id="chatbot")
|
@@ -191,23 +193,18 @@ with gr.Blocks(css="""
|
|
191 |
# 内部状态:存储 Qwen 用的 messages
|
192 |
state_msgs = gr.State([{"role": "system", "content": SYSTEM_PROMPT}])
|
193 |
|
194 |
-
async def respond(user_text, history, messages,
|
195 |
user_text = (user_text or "").strip()
|
196 |
if not user_text:
|
197 |
return gr.update(), messages, ""
|
198 |
-
|
199 |
-
# 将“对话模式”映射到内部“Auto 混合”
|
200 |
-
internal_mode = "Auto 混合"
|
201 |
-
|
202 |
-
# 使用环境变量/默认值作为 SimSimi 参数
|
203 |
lang = SIMSIMI_LANG
|
204 |
bad_max = SIMSIMI_BAD_MAX
|
205 |
|
206 |
-
# 更新 message 历史
|
207 |
messages = list(messages) if messages else [{"role": "system", "content": SYSTEM_PROMPT}]
|
208 |
messages.append({"role": "user", "content": user_text})
|
209 |
|
210 |
-
reply = await hybrid_reply(messages, user_text, mode=
|
211 |
|
212 |
messages.append({"role": "assistant", "content": reply})
|
213 |
history = (history or []) + [[user_text, reply]]
|
@@ -216,13 +213,12 @@ with gr.Blocks(css="""
|
|
216 |
def clear_all():
|
217 |
return [], [{"role": "system", "content": SYSTEM_PROMPT}]
|
218 |
|
219 |
-
#
|
220 |
submit_btn.click(
|
221 |
respond,
|
222 |
inputs=[user_in, chatbox, state_msgs, mode_dd],
|
223 |
outputs=[chatbox, state_msgs, user_in]
|
224 |
)
|
225 |
-
|
226 |
clear_btn.click(
|
227 |
clear_all,
|
228 |
inputs=None,
|
|
|
10 |
|
11 |
import os
|
12 |
import re
|
|
|
|
|
13 |
import asyncio
|
14 |
import httpx
|
15 |
import gradio as gr
|
|
|
29 |
# ---------------------------
|
30 |
# Load Qwen
|
31 |
# ---------------------------
|
32 |
+
dtype = (
|
33 |
+
torch.float16 if torch.cuda.is_available()
|
34 |
+
else torch.bfloat16 if torch.backends.mps.is_available()
|
35 |
+
else torch.float32
|
36 |
+
)
|
37 |
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
|
38 |
model = AutoModelForCausalLM.from_pretrained(
|
39 |
MODEL_ID,
|
|
|
176 |
with gr.Blocks(css="""
|
177 |
#chatbot {height: 560px}
|
178 |
""") as demo:
|
179 |
+
gr.Markdown("## Qwen × SimSimi Hybrid Chat\n")
|
180 |
|
181 |
+
# ✅ 页面只保留一个下拉框(含三种模式),以及提交/清空按钮
|
182 |
mode_dd = gr.Dropdown(
|
183 |
+
choices=["Auto 混合", "只用 Qwen", "只用 SimSimi"],
|
184 |
+
value="Auto 混合",
|
185 |
+
label="对话模式"
|
186 |
)
|
187 |
|
188 |
chatbox = gr.Chatbot(elem_id="chatbot")
|
|
|
193 |
# 内部状态:存储 Qwen 用的 messages
|
194 |
state_msgs = gr.State([{"role": "system", "content": SYSTEM_PROMPT}])
|
195 |
|
196 |
+
async def respond(user_text, history, messages, mode):
|
197 |
user_text = (user_text or "").strip()
|
198 |
if not user_text:
|
199 |
return gr.update(), messages, ""
|
200 |
+
# 使用环境变量作为 SimSimi 参数(不在页面暴露)
|
|
|
|
|
|
|
|
|
201 |
lang = SIMSIMI_LANG
|
202 |
bad_max = SIMSIMI_BAD_MAX
|
203 |
|
|
|
204 |
messages = list(messages) if messages else [{"role": "system", "content": SYSTEM_PROMPT}]
|
205 |
messages.append({"role": "user", "content": user_text})
|
206 |
|
207 |
+
reply = await hybrid_reply(messages, user_text, mode=mode, lang=lang, bad_max=bad_max)
|
208 |
|
209 |
messages.append({"role": "assistant", "content": reply})
|
210 |
history = (history or []) + [[user_text, reply]]
|
|
|
213 |
def clear_all():
|
214 |
return [], [{"role": "system", "content": SYSTEM_PROMPT}]
|
215 |
|
216 |
+
# 仅“提交”按钮触发发送;如需回车发送,可再加 user_in.submit(...)
|
217 |
submit_btn.click(
|
218 |
respond,
|
219 |
inputs=[user_in, chatbox, state_msgs, mode_dd],
|
220 |
outputs=[chatbox, state_msgs, user_in]
|
221 |
)
|
|
|
222 |
clear_btn.click(
|
223 |
clear_all,
|
224 |
inputs=None,
|