Spaces:
Runtime error
Runtime error
File size: 7,573 Bytes
ce1e006 bca6c3c ce1e006 ad4d7e3 ce1e006 1a6fe15 ce1e006 227cc8d 1a6fe15 227cc8d 7d12d67 227cc8d ce1e006 de34c46 bca6c3c 9eec015 bca6c3c 9eec015 ce1e006 5fa2c5d de34c46 ce1e006 5fa2c5d ce1e006 de34c46 ce1e006 de34c46 ce1e006 bca6c3c ce1e006 5d7ee3a de34c46 ce1e006 9fb94d8 ce1e006 292531e 49fadfc 5fa2c5d 0e83748 8468805 ce1e006 49fadfc 0e83748 ce1e006 0e83748 ce1e006 1a6fe15 ce1e006 de34c46 ce1e006 6c375d8 1a6fe15 ce1e006 de34c46 ce1e006 5fa2c5d ce1e006 |
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 |
import gradio as gr
import mdtex2html
import pandas as pd
import random as rd
import os
import json
import time
import schedule
import openai
import requests
openai.api_key = os.environ.get('APIKEY')
rd.seed(time.time())
def postprocess(self, y):
if y is None:
return []
for i, (message, response) in enumerate(y):
y[i] = (
None if message is None else mdtex2html.convert((message)),
None if response is None else mdtex2html.convert(response),
)
return y
gr.Chatbot.postprocess = postprocess
def parse_text(text):
"""copy from https://github.com/GaiZhenbiao/ChuanhuChatGPT/"""
lines = text.split("\n")
lines = [line for line in lines if line != ""]
count = 0
for i, line in enumerate(lines):
if "```" in line:
count += 1
items = line.split('`')
if count % 2 == 1:
lines[i] = f'<pre><code class="language-{items[-1]}">'
else:
lines[i] = f'<br></code></pre>'
else:
if i > 0:
if count % 2 == 1:
line = line.replace("`", "\`")
line = line.replace("<", "<")
line = line.replace(">", ">")
line = line.replace(" ", " ")
line = line.replace("*", "*")
line = line.replace("_", "_")
line = line.replace("-", "-")
line = line.replace(".", ".")
line = line.replace("!", "!")
line = line.replace("(", "(")
line = line.replace(")", ")")
line = line.replace("$", "$")
lines[i] = "<br>"+line
text = "".join(lines)
return text
def showInput(input, chatbot):
chatbot.append((parse_text(input), ""))
return chatbot
def predict(input, chatbot, messages, idx, answer):
chatbot.append((parse_text(input), ""))
messages.append({"role": 'user', "content": input})
data = {'predict': messages, 'idx': idx, 'isfinished': False, 'answer': answer}
response=str(requests.post(os.environ.get("URL"), data=json.dumps(data, ensure_ascii=False).encode('utf-8')).content, encoding="utf-8")
if not response == 'timeout':
chatbot[-1] = (parse_text(input), parse_text(response))
messages.append({"role": "assistant", "content": response})
else:
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
logit_bias={42468: 10, 28938: 10}
)
response=completion.choices[0].message.content.strip()
messages.append({"role": "assistant", "content": response})
finish = False
# messages1 = messages + [{"role": 'user', "content": '我猜到汤底了吗?请回答是或否,注意仅出现“汤底”二字或者我并没有问到汤底相关细节时不能说明我猜到了汤底。'}]
# completion1 = openai.ChatCompletion.create(
# model="gpt-3.5-turbo",
# messages=messages1,
# )
# response1=completion1.choices[0].message.content.strip()
# if '不' in response1 or '否' in response1 or '没' in response1:
# response = response
# finish = False
# else:
# response += f'恭喜您已经猜到汤底,汤底是:{answer}\n点击“再来一局”按钮开始下一局游戏。'
# finish = True
data = {'predict': messages, 'idx': idx, 'isfinished': finish, 'answer': answer}
requests.post(os.environ.get("URL"), data=json.dumps(data, ensure_ascii=False).encode('utf-8'))
chatbot[-1] = (parse_text(input), parse_text(response))
return chatbot, messages
def reset_user_input():
return gr.update(value='')
def reset_state(request: gr.Request):
global host_cnt
host = request.client.host
if not host in host_cnt:
host_cnt[host] = time.time()
else:
elapse = time.time()-host_cnt[host]
if elapse < 10:
time.sleep(10-elapse)
host_cnt[host] = time.time()
data = {'refresh': ''}
data=requests.post(os.environ.get("URL"), data=json.dumps(data, ensure_ascii=False).encode('utf-8')).content
data = json.loads(str(data, encoding="utf-8"))
chatbot = data['chatbot']
messages = data['messages']
answer = data['answer']
idx = data['idx']
return chatbot, messages, gr.update(value=""), gr.update(value="显示答案"), answer, idx, gr.update(value=data['story'].strip()), False
def show_hide_answer(answer, show_ans):
if show_ans:
show_ans = False
return gr.update(value=""), gr.update(value="显示答案"), show_ans
else:
show_ans = True
return gr.update(value=answer), gr.update(value="隐藏答案"), show_ans
host_cnt = {}
with gr.Blocks() as demo:
gr.HTML("""<h1 align="center">海龟汤</h1>""")
with gr.Row():
rule = gr.Textbox(label='规则', value='海龟汤是一个推理类游戏,游戏开始时会给出一段隐去关键信息的叙述,即汤面,玩家根据汤面推理,提出能够通过“是”或“否”来回答的问题,通过提问不同可能性,缩小真相的范围,直到最终猜到真相(即汤底)的关键信息。玩家可以点击“再来一局”按钮随机一场新的游戏,点击“显示答案”可查看汤底。', lines=1, max_lines=3).style(container=False)
data = {'refresh': ''}
data=requests.post(os.environ.get("URL"), data=json.dumps(data, ensure_ascii=False).encode('utf-8')).content
data = json.loads(str(data, encoding="utf-8"))
chatbot = gr.Chatbot([(None, '点击“再来一局”开始游戏')])
answer = gr.State('点击“再来一局”开始游戏')
idx = gr.State(0)
show_ans = gr.State(False)
with gr.Row():
with gr.Column(scale=4):
question = gr.Textbox(label='汤面', value='点击“再来一局”开始游戏',
lines=1, max_lines=3).style(container=False)
with gr.Row():
user_input = gr.Textbox(show_label=False, placeholder="请输入你的猜测...", lines=1, max_lines=3).style(
container=False)
with gr.Row():
with gr.Column(scale=2):
submitBtn = gr.Button("发送", variant="primary")
with gr.Column(scale=2):
emptyBtn = gr.Button("再来一局")
with gr.Column(scale=1):
answer_output = gr.Textbox(show_label=False, lines=6, max_lines=6).style(
container=False)
answerBtn = gr.Button("显示答案")
messages = gr.State(data['messages'])
# submitBtn.click(showInput, [user_input, chatbot], [chatbot])
user_input.submit(predict, [user_input, chatbot, messages, idx, answer], [chatbot, messages],
show_progress=True)
user_input.submit(reset_user_input, [], [user_input])
submitBtn.click(predict, [user_input, chatbot, messages, idx, answer], [chatbot, messages],
show_progress=True)
submitBtn.click(reset_user_input, [], [user_input])
emptyBtn.click(reset_state, outputs=[chatbot, messages, answer_output, answerBtn, answer, idx, question, show_ans], show_progress=True)
answerBtn.click(show_hide_answer, [answer, show_ans], outputs=[answer_output, answerBtn, show_ans])
demo.queue().launch()
|