Spaces:
Runtime error
Runtime error
import numpy as np | |
import os | |
import re | |
import datetime | |
import time | |
import openai, tenacity | |
import argparse | |
import configparser | |
import json | |
import tiktoken | |
from get_paper_from_pdf import Paper | |
import gradio | |
# 定义Response类 | |
class Response: | |
# 初始化方法,设置属性 | |
def __init__(self, api, api_base, comment, language): | |
self.api = api | |
self.api_base = api_base | |
self.comment = comment | |
self.language = language | |
self.max_token_num = 14096 | |
self.encoding = tiktoken.get_encoding("gpt2") | |
def chat_response(self, comment): | |
openai.api_key = self.api | |
openai.api_base = self.api_base | |
response_prompt_token = 1000 | |
text_token = len(self.encoding.encode(comment)) | |
input_text_index = int(len(comment)*(self.max_token_num-response_prompt_token)/text_token) | |
input_text = "This is the review comments:" + comment[:input_text_index] | |
messages=[ | |
{"role": "system", "content": """You are the author, you submitted a paper, and the reviewers gave the review comments. | |
Please reply with what we have done, not what we will do. | |
You need to extract questions from the review comments one by one, and then respond point-to-point to the reviewers’ concerns. | |
You need to determine for yourself how many reviewers there are and how many questions each reviewer has. | |
Must be output in {}. Follow the format of the output later: | |
- Response to reviewers | |
#1 reviewer | |
Concern #1: xxxx | |
Author response: xxxxx | |
Concern #2: xxxx | |
Author response: xxxxx | |
... | |
#2 reviewer | |
Concern #1: xxxx | |
Author response: xxxxx | |
Concern #2: xxxx | |
Author response: xxxxx | |
... | |
#3 reviewer | |
Concern #1: xxxx | |
Author response: xxxxx | |
Concern #2: xxxx | |
Author response: xxxxx | |
... | |
""".format(self.language) | |
}, | |
{"role": "user", "content": input_text}, | |
] | |
try: | |
response = openai.ChatCompletion.create( | |
model="gpt-3.5-turbo-16k", | |
messages=messages, | |
) | |
result = '' | |
for choice in response.choices: | |
result += choice.message.content | |
usage = response.usage.total_tokens | |
except Exception as e: | |
# 处理其他的异常 | |
result = "非常抱歉>_<,生了一个错误:"+ str(e) | |
usage = 'xxxxx' | |
print("********"*10) | |
print(result) | |
print("********"*10) | |
return result, usage | |
def main(api, api_base, comment, language): | |
start_time = time.time() | |
if not api or not comment: | |
return "请输入API-key以及审稿意见!" | |
else: | |
Response1 = Response(api,api_base, comment, language) | |
# 开始判断是路径还是文件: | |
response, total_token_used = Response1.chat_response(comment) | |
time_used = time.time() - start_time | |
output2 ="使用token数:"+ str(total_token_used)+"\n花费时间:"+ str(round(time_used, 2)) +"秒" | |
return response, output2 | |
######################################################################################################## | |
# 标题 | |
title = "🤖ChatResponse🤖" | |
# 描述 | |
description = '''<div align='left'> | |
<img align='right' src='http://i.imgtg.com/2023/03/22/94PLN.png' width="220"> | |
<strong>ChatResponse是一款根据审稿人的评论自动生成作者回复的AI助手。</strong>其用途为: | |
⭐️根据输入的审稿意见,ChatResponse会自动提取其中各个审稿人的问题和担忧,并生成点对点的回复。 | |
如果觉得很卡,可以点击右上角的Duplicate this Space,把ChatResponse复制到你自己的Space中! | |
本项目的[Github](https://github.com/nishiwen1214/ChatReviewer),欢迎Star和Fork,也欢迎大佬赞助让本项目快速成长!💗 | |
</div> | |
''' | |
# 创建Gradio界面 | |
inp = [gradio.inputs.Textbox(label="请输入你的API-key(sk开头的字符串)", | |
default="", | |
type='password'), | |
gradio.inputs.Textbox(label="请输入第三方中转网址(以/v1结尾,使用原始OpenAI的API请跳过这里)", | |
default="https://api.openai.com/v1"), | |
gradio.inputs.Textbox(lines=5, | |
label="请输入要回复的全部审稿意见", | |
default="" | |
), | |
gradio.inputs.Radio(choices=["English", "Chinese", "French", "German","Japenese"], | |
default="English", | |
label="选择输出语言"), | |
] | |
chat_Response_gui = gradio.Interface(fn=main, | |
inputs=inp, | |
outputs = [gradio.Textbox(lines=11, label="回复结果"), gradio.Textbox(lines=2, label="资源统计")], | |
title=title, | |
description=description) | |
# Start server | |
chat_Response_gui .launch(quiet=True, show_api=False) |