HMinions's picture
Update app.py
2c7a52b
import gradio as gr
import json
import asyncio
import os
from EdgeGPT import Chatbot, ConversationStyle
import re
#read cookie from local file
# with open('./cookies.json', 'r') as f:
# cookies = json.load(f)
#如果你是选择读取仓库内的cookie.json文件,那么不需要再向函数内传递cookies参数
# 也可以删去gr.Tab("Cookies"):这一界面对应的代码
async def get_model_reply(prompt,style,cookies,context=[]):
# combines the new question with a previous context
context += [prompt]
cookies = json.loads(cookies)
# given the most recent context (4096 characters)
# continue the text up to 2048 tokens ~ 8192 charaters
bot = Chatbot(cookies=cookies)
prompt2='\n\n'.join(context)[:4096]
raw_data = await bot.ask(prompt2, conversation_style=style)
await bot.close()
#print(raw_data)
try:
try:
response = raw_data["item"]["messages"][1]["text"]
except:
response = raw_data["item"]["messages"][1]["adaptiveCards"][0]["body"][0]["text"]
response = re.sub(r'\^', '', response)
response = response.rstrip()
context += [response]
# list of (user, bot) responses. We will use this format later
responses = [(u, b) for u, b in zip(context[::2], context[1::2])]
return responses, context
except:
try:
if raw_data["item"]["throttling"]["numUserMessagesInConversation"] > raw_data["item"]["throttling"]["maxNumUserMessagesInConversation"]:
response="> **Oops, I think we've reached the end of this conversation. Please reset the bot!**"
context += [response]
# list of (user, bot) responses. We will use this format later
responses = [(u, b) for u, b in zip(context[::2], context[1::2])]
return responses, context
except:
if raw_data["item"]["result"]["value"] == "Throttled":
response="> **Error: We're sorry, but you've reached the maximum number of messages you can send to Bing in a 24-hour period. Check back later!**"
context += [response]
# list of (user, bot) responses. We will use this format later
responses = [(u, b) for u, b in zip(context[::2], context[1::2])]
return responses, context
# query = 'Which is the largest country by area in the world?'
# style="precise"
# responses, context =asyncio.run(get_model_reply(query,style,context=[]))
#
# print(' ' + responses[-1][0])
# print(' ' + responses[-1][1])
with gr.Blocks() as dialog_app:
with gr.Tab("Cookies"):
cookies = gr.Textbox(lines=2, label="输入bing.com中的cookies")
with gr.Tab("New Bing Chat"):
gr.Markdown("# A Simple Web to use New Bing Without Magic")
chatbot = gr.Chatbot()
state = gr.State([])
markdown = gr.Markdown(label="Output")
with gr.Row():
inputs = gr.Textbox(
label="输入问题",
placeholder="Enter text and press enter"
)
style = gr.Dropdown(label="回答倾向", choices=["creative", "balanced", "precise"], multiselect=False,
value="balanced", type="value")
inputs.submit(get_model_reply, [inputs, style, cookies, state], [chatbot, state])
send = gr.Button("Send")
send.click(get_model_reply, [inputs, style, cookies, state], [chatbot, state])
# launches the app in a new local port
dialog_app.launch()
# 为网站设置密码防止滥用
# dialog_app.launch(auth=("admin", "pass1234"))