ChatGPT-gradio / server.py
freshield's picture
add files
9e0f524
raw
history blame contribute delete
No virus
4.71 kB
# coding=utf-8
"""
@Author: Freshield
@Contact: yangyufresh@163.com
@File: b2_try_gradio.py
@Time: 2023-03-03 16:06
@Last_update: 2023-03-03 16:06
@Desc: None
@==============================================@
@ _____ _ _ _ _ @
@ | __|___ ___ ___| |_|_|___| |_| | @
@ | __| _| -_|_ -| | | -_| | . | @
@ |__| |_| |___|___|_|_|_|___|_|___| @
@ Freshield @
@==============================================@
"""
import gradio as gr
from lib.OpenaiBot import OpenaiBot
from lib.MongdbClient import MongodbClient
openai_bot = OpenaiBot()
mongo_client = MongodbClient()
def check_auth(username, passowrd):
return mongo_client.check_user_exist(username, passowrd)
def ask_chatGPT(role, new_msg, state, request: gr.Request):
"""向chatGPT提问"""
# 获取access_token
access_token = request.request.cookies['access-token-unsecure']
res_content = '对不起,服务器出错了,请稍后再试。'
res = [(new_msg, res_content)]
try:
res_content = openai_bot.get_response(role, new_msg, state)
res = [(new_msg, res_content)]
except Exception as e:
print(e)
finally:
state += res
res = state
# 更新history
mongo_client.update_user_chat_history(access_token, new_msg, res_content)
history, _, _ = mongo_client.get_user_chat_history(access_token)
return res, state, history
def clean_question(question):
"""清除问题"""
return ''
def clean_history(history, request: gr.Request):
"""清除历史记录"""
access_token = request.request.cookies['access-token-unsecure']
mongo_client.delete_user_chat_history(access_token)
history, _, _ = mongo_client.get_user_chat_history(access_token)
return history
def update_role(role, request: gr.Request):
"""更新角色"""
access_token = request.request.cookies['access-token-unsecure']
mongo_client.update_role(access_token, role)
return role
if __name__ == '__main__':
with gr.Blocks(title="尝试chatGPT对话", css="#maxheight {max-height: 390px} ") as demo:
state = gr.State([])
with gr.Column(variant='panel'):
# title
with gr.Row():
gr.Markdown("## 尝试chatGPT对话")
with gr.Row():
# left part
with gr.Column():
role_b = gr.Textbox(
label='请输入你设定的chatGPT的角色', lines=2,
value='你是ChatGPT,OpenAI训练的大规模语言模型,简明的回答用户的问题。')
question_b = gr.Textbox(
label='请输入你想要问的问题',
placeholder='输入你想提问的内容...',
lines=3
)
with gr.Row():
role_btn = gr.Button('更新角色')
greet_btn = gr.Button('提交', variant="primary")
with gr.Row():
clean_history_btn = gr.Button('清除历史记录')
# right part
with gr.Column():
answer_b = gr.Chatbot(
label='chatGPT的问答', value=[(None, '请在这里提问')], elem_id='maxheight')
with gr.Row():
history_b = gr.TextArea(
label='历史记录', interactive=False)
role_btn.click(fn=update_role, inputs=[role_b], outputs=[role_b])
greet_btn.click(fn=ask_chatGPT, inputs=[role_b, question_b, state], outputs=[answer_b, state, history_b])
greet_btn.click(fn=clean_question, inputs=[question_b], outputs=[question_b])
clean_history_btn.click(fn=clean_history, inputs=[history_b], outputs=[history_b])
def demo_load(request: gr.Request):
"""第一次进入demo时候运行的"""
# 更新用户的access_token
token_dict = demo.server_app.tokens
access_token = request.request.cookies['access-token-unsecure']
username = token_dict[access_token]
mongo_client.update_user_access_token(username, access_token)
# 获取用户的历史记录
history_str, history_list, role = mongo_client.get_user_chat_history(access_token)
return history_str, history_list[-10:], role, history_list[-10:]
demo.load(demo_load, None, [history_b, state, role_b, answer_b])
demo.launch(
auth=check_auth, auth_message='请输入给定的用户名和密码', server_name='0.0.0.0', server_port=8081)
demo.close()