demo / app.py
Othesis's picture
Create app.py
1df8b69 verified
Raw
History Blame Contribute Delete
16.7 kB
import gradio as gr
# from demo.gpt_asyn_http import gpt_call_fn
# from gpt_syn_http import gpt_syn_http_fn
import time
import random
from call_theta import call_theta_message
from skillAgent import SkillAgent
skill_agent = SkillAgent()
messages = [{"role":"system","content":skill_agent.get_system_prompt()}]
def on_radio1_select(choice, chat_history, log_text):
tool_result = f"tool_result: 用户选择交易:{choice}"
messages.append({"role": "user", "content": tool_result})
chat_history.append({"role": "user", "content": choice})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
while True:
log_text += "\n" + "思考中...."
res = skill_agent.call(messages)
# print("*-" * 50)
# print(messages, res)
if res["type"] == "answer":
log_text += "\n" + "回复生成中...."
chat_history.append({"role": "assistant", "content": res["content"]})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "skill":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取skill({res["content"]})信息中...."
with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "Skill信息:" + reference
messages.append({"role": "user", "content": reference})
elif res["type"] == "md":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取markdown({res["content"]})信息中...."
if "红包资金撤回" in res["content"]:
with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "参考markdown信息:" + reference
messages.append({"role": "user", "content": reference})
else:
log_text += "\n" + f"读取失败"
chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
reference = "参考markdown信息:读取失败,信息缺失"
messages.append({"role": "user", "content": reference})
messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "tool":
log_text += "\n" + f"发送选项工具({res["content"]})"
if "bill_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"})
yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)
break
elif "red_envelope_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
break
elif "red_envelope_withdraw_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
break
def on_radio2_select(choice, chat_history, log_text):
tool_result = f"tool_result: 用户选择红包:{choice}"
messages.append({"role": "user", "content": tool_result})
chat_history.append({"role": "user", "content": choice})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
while True:
log_text += "\n" + "思考中...."
res = skill_agent.call(messages)
# print("*-" * 50)
# print(messages, res)
if res["type"] == "answer":
log_text += "\n" + "回复生成中...."
chat_history.append({"role": "assistant", "content": res["content"]})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "skill":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取skill({res["content"]})信息中...."
with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "Skill信息:" + reference
messages.append({"role": "user", "content": reference})
elif res["type"] == "md":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取markdown({res["content"]})信息中...."
if "红包资金撤回" in res["content"]:
with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "参考markdown信息:" + reference
messages.append({"role": "user", "content": reference})
else:
log_text += "\n" + f"读取失败"
chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
reference = "参考markdown信息:读取失败,信息缺失"
messages.append({"role": "user", "content": reference})
messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "tool":
log_text += "\n" + f"发送选项工具({res["content"]})"
if "bill_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"})
yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)
break
elif "red_envelope_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
break
elif "red_envelope_withdraw_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
break
def on_radio3_select(choice, chat_history, log_text):
tool_result = f"tool_result: 用户红包撤回结果:{choice}, 当前用户还有10个红包可撤回"
messages.append({"role": "user", "content": tool_result})
chat_history.append({"role": "user", "content": choice})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
while True:
log_text += "\n" + "思考中...."
res = skill_agent.call(messages)
# print("*-" * 50)
# print(messages, res)
if res["type"] == "answer":
log_text += "\n" + "回复生成中...."
chat_history.append({"role": "assistant", "content": res["content"]})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "skill":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取skill({res["content"]})信息中...."
with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "Skill信息:" + reference
messages.append({"role": "user", "content": reference})
elif res["type"] == "md":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取markdown({res["content"]})信息中...."
if "红包资金撤回" in res["content"]:
with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "参考markdown信息:" + reference
messages.append({"role": "user", "content": reference})
else:
log_text += "\n" + f"读取失败"
chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
reference = "参考markdown信息:读取失败,信息缺失"
messages.append({"role": "user", "content": reference})
messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "tool":
log_text += "\n" + f"发送选项工具({res["content"]})"
if "bill_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"})
yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)
break
elif "red_envelope_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
break
elif "red_envelope_withdraw_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
break
def clear_msg():
global messages
messages = [{"role":"system","content":skill_agent.get_system_prompt()}]
with gr.Blocks() as demo:
with gr.Row():
with gr.Column(scale=2):
chatbot = gr.Chatbot()
msg = gr.Textbox()
clear = gr.ClearButton([msg, chatbot])
radio1 = gr.Radio(choices=["红包交易1", "收钱码交易2", "余额提现交易3"], interactive=True, visible=False)
radio2 = gr.Radio(choices=["红包交易1,已撤回", "红包交易2,未撤回", "红包交易3,已领取"], interactive=True, visible=False)
radio3 = gr.Radio(choices=["红包撤回成功", "红包撤回失败"], interactive=True, visible=False)
with gr.Column(scale=1):
log_display = gr.Textbox(
label="执行日志",
interactive=False,
max_lines=20,
lines=20
)
def respond(message, chat_history, log_text):
chat_history.append({"role": "user", "content": message})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
messages.append({"role":"user","content":message})
while True:
log_text += "\n" + "思考中...."
res = skill_agent.call(messages)
# print("*-" * 50)
print(messages, res)
if res["type"] == "answer":
log_text += "\n" + "回复生成中...."
chat_history.append({"role": "assistant", "content": res["content"]})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "skill":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取skill({res["content"]})信息中...."
with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "Skill信息:" + reference
messages.append({"role": "user", "content": reference})
elif res["type"] == "md":
messages.append({"role": "assistant", "content": res["raw_content"]})
log_text += "\n" + f"读取markdown({res["content"]})信息中...."
if "红包资金撤回" in res["content"]:
with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f:
reference = f.read()
reference = "参考markdown信息:" + reference
messages.append({"role": "user", "content": reference})
else:
log_text += "\n" + f"读取失败"
chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
reference = "参考markdown信息:读取失败,信息缺失"
messages.append({"role": "user", "content": reference})
messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
break
elif res["type"] == "tool":
log_text += "\n" + f"发送选项工具({res["content"]})"
if "bill_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"})
yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)
break
elif "red_envelope_search_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
break
elif "red_envelope_withdraw_tool" in res["content"]:
chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"})
yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
break
# return "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
msg.submit(respond, [msg, chatbot, log_display], [msg, chatbot, log_display, radio1, radio2, radio3])
clear.click(clear_msg)
radio1.change(
on_radio1_select,
[radio1, chatbot, log_display],
[msg, chatbot, log_display, radio1, radio2, radio3],
queue=True
)
radio2.change(
on_radio2_select,
[radio2, chatbot, log_display],
[msg, chatbot, log_display, radio1, radio2, radio3],
# queue=True
)
radio3.change(
on_radio3_select,
[radio3, chatbot, log_display],
[msg, chatbot, log_display, radio1, radio2, radio3],
# queue=True
)
demo.launch(share=True)