Merge branch 'dev' into Euclid-Jie-Euclid_Test

This commit is contained in:
Your Name 2023-03-31 21:03:43 +08:00
commit dcab956cff
6 changed files with 49 additions and 21 deletions

View File

@ -1,16 +1,15 @@
# API_KEY = "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" 此key无效 # [step 1]>> 例如: API_KEY = "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" 此key无效
API_KEY = "sk-此处填API密钥" API_KEY = "sk-此处填API密钥"
API_URL = "https://api.openai.com/v1/chat/completions"
# 改为True应用代理
# [step 2]>> 改为True应用代理如果直接在海外服务器部署此处不修改
USE_PROXY = False USE_PROXY = False
if USE_PROXY: if USE_PROXY:
# 填写格式是 [协议]:// [地址] :[端口]填写之前不要忘记把USE_PROXY改成True如果直接在海外服务器部署此处不修改
# 填写格式是 [协议]:// [地址] :[端口]
# 例如 "socks5h://localhost:11284" # 例如 "socks5h://localhost:11284"
# [协议] 常见协议无非socks5h/http,例如 v2*** 和 s** 的默认本地协议是socks5hcl**h 的默认本地协议是http # [协议] 常见协议无非socks5h/http; 例如 v2**y 和 ss* 的默认本地协议是socks5h; 而cl**h 的默认本地协议是http
# [地址] 懂的都懂不懂就填localhost或者127.0.0.1肯定错不了localhost意思是代理软件安装在本机上 # [地址] 懂的都懂不懂就填localhost或者127.0.0.1肯定错不了localhost意思是代理软件安装在本机上
# [端口] 在代理软件的设置里不同的代理软件界面不一样,但端口号都应该在最显眼的位置上 # [端口] 在代理软件的设置里找。虽然不同的代理软件界面不一样,但端口号都应该在最显眼的位置上
# 代理网络的地址,打开你的科学上网软件查看代理的协议(socks5/http)、地址(localhost)和端口(11284) # 代理网络的地址,打开你的科学上网软件查看代理的协议(socks5/http)、地址(localhost)和端口(11284)
proxies = { "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", } proxies = { "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", }
@ -19,6 +18,9 @@ else:
proxies = None proxies = None
print('网络代理状态:未配置。无代理状态下很可能无法访问。') print('网络代理状态:未配置。无代理状态下很可能无法访问。')
# [step 3]>> 以下配置可以优化体验,但大部分场合下并不需要修改
# 发送请求到OpenAI后等待多久判定为超时 # 发送请求到OpenAI后等待多久判定为超时
TIMEOUT_SECONDS = 25 TIMEOUT_SECONDS = 25
@ -28,9 +30,12 @@ WEB_PORT = -1
# 如果OpenAI不响应网络卡顿、代理失败、KEY失效重试的次数限制 # 如果OpenAI不响应网络卡顿、代理失败、KEY失效重试的次数限制
MAX_RETRY = 2 MAX_RETRY = 2
# 选择的OpenAI模型是gpt4现在只对申请成功的人开放 # OpenAI模型选择gpt4现在只对申请成功的人开放
LLM_MODEL = "gpt-3.5-turbo" LLM_MODEL = "gpt-3.5-turbo"
# OpenAI的API_URL
API_URL = "https://api.openai.com/v1/chat/completions"
# 设置并行使用的线程数 # 设置并行使用的线程数
CONCURRENT_COUNT = 100 CONCURRENT_COUNT = 100

View File

@ -5,7 +5,7 @@ import datetime
@CatchException @CatchException
def 高阶功能模板函数(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT): def 高阶功能模板函数(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT):
history = [] # 清空历史,以免输入溢出 history = [] # 清空历史,以免输入溢出
chatbot.append(("这是什么功能?", "[Local Message] 请注意,您正在调用一个函数模板该函数面向希望实现更多有趣功能的开发者它可以作为创建新功能函数的模板。为了做到简单易读该函数只有25行代码不会实时反馈文字流或心跳请耐心等待程序输出完成。另外您若希望分享新的功能模组请不吝PR")) chatbot.append(("这是什么功能?", "[Local Message] 请注意,您正在调用一个[函数插件]的模板该函数面向希望实现更多有趣功能的开发者它可以作为创建新功能函数的模板。为了做到简单易读该函数只有25行代码所以不会实时反馈文字流或心跳,请耐心等待程序输出完成。此外我们也提供可同步处理大量文件的多线程Demo供您参考。您若希望分享新的功能模组请不吝PR"))
yield chatbot, history, '正常' # 由于请求gpt需要一段时间我们先及时地做一次状态显示 yield chatbot, history, '正常' # 由于请求gpt需要一段时间我们先及时地做一次状态显示
for i in range(5): for i in range(5):

View File

@ -1,9 +1,12 @@
from toolbox import HotReload # HotReload 的意思是热更新,修改函数插件后,不需要重启程序,代码直接生效
# UserVisibleLevel是过滤器参数。 # UserVisibleLevel是过滤器参数。
# 由于UI界面空间有限所以通过这种方式决定UI界面中显示哪些插件 # 由于UI界面空间有限所以通过这种方式决定UI界面中显示哪些插件
# 默认函数插件 VisibleLevel 是 0 # 默认函数插件 VisibleLevel 是 0
# 当 UserVisibleLevel >= 函数插件的 VisibleLevel 时,该函数插件才会被显示出来 # 当 UserVisibleLevel >= 函数插件的 VisibleLevel 时,该函数插件才会被显示出来
UserVisibleLevel = 1 UserVisibleLevel = 1
def get_crazy_functionals(): def get_crazy_functionals():
from crazy_functions.读文章写摘要 import 读文章写摘要 from crazy_functions.读文章写摘要 import 读文章写摘要
from crazy_functions.生成函数注释 import 批量生成函数注释 from crazy_functions.生成函数注释 import 批量生成函数注释
@ -16,6 +19,7 @@ def get_crazy_functionals():
function_plugins = { function_plugins = {
"请解析并解构此项目本身": { "请解析并解构此项目本身": {
# HotReload 的意思是热更新,修改函数插件后,不需要重启程序,代码直接生效
"Function": 解析项目本身 "Function": 解析项目本身
}, },
"解析整个py项目": { "解析整个py项目": {
@ -39,10 +43,12 @@ def get_crazy_functionals():
"Function": 批量生成函数注释 "Function": 批量生成函数注释
}, },
"[多线程demo] 把本项目源代码切换成全英文": { "[多线程demo] 把本项目源代码切换成全英文": {
"Function": 全项目切换英文 # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
"Function": HotReload(全项目切换英文)
}, },
"[函数插件模板demo] 历史上的今天": { "[函数插件模板demo] 历史上的今天": {
"Function": 高阶功能模板函数 # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
"Function": HotReload(高阶功能模板函数)
}, },
} }
@ -52,7 +58,8 @@ def get_crazy_functionals():
function_plugins.update({ function_plugins.update({
"[仅供开发调试] 批量总结PDF文档": { "[仅供开发调试] 批量总结PDF文档": {
"Color": "stop", "Color": "stop",
"Function": 批量总结PDF文档 # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
"Function": HotReload(批量总结PDF文档)
}, },
}) })
from crazy_functions.批量总结PDF文档pdfminer import 批量总结PDF文档pdfminer from crazy_functions.批量总结PDF文档pdfminer import 批量总结PDF文档pdfminer

View File

@ -10,7 +10,7 @@ proxies, WEB_PORT, LLM_MODEL, CONCURRENT_COUNT, AUTHENTICATION = \
# 如果WEB_PORT是-1, 则随机选取WEB端口 # 如果WEB_PORT是-1, 则随机选取WEB端口
PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT
AUTHENTICATION = None if AUTHENTICATION == [] else AUTHENTICATION if not AUTHENTICATION: AUTHENTICATION = None
initial_prompt = "Serve me as a writing and programming assistant." initial_prompt = "Serve me as a writing and programming assistant."
title_html = """<h1 align="center">ChatGPT 学术优化</h1>""" title_html = """<h1 align="center">ChatGPT 学术优化</h1>"""
@ -105,8 +105,7 @@ def auto_opentab_delay():
def open(): def open():
time.sleep(2) time.sleep(2)
webbrowser.open_new_tab(f'http://localhost:{PORT}') webbrowser.open_new_tab(f'http://localhost:{PORT}')
t = threading.Thread(target=open) threading.Thread(target=open, name="open-browser", daemon=True).start()
t.daemon = True; t.start()
auto_opentab_delay() auto_opentab_delay()
demo.title = "ChatGPT 学术优化" demo.title = "ChatGPT 学术优化"

View File

@ -1,5 +1,5 @@
# chatgpt-academic项目分析报告 # chatgpt-academic项目自译解报告
Author补充以下分析均由本项目调用ChatGPT一键生成如果有不准确的地方全怪GPT Author补充以下分析均由本项目调用ChatGPT一键生成如果有不准确的地方全怪GPT😄
## [0/10] 程序摘要: check_proxy.py ## [0/10] 程序摘要: check_proxy.py

View File

@ -1,6 +1,7 @@
import markdown, mdtex2html, threading, importlib, traceback import markdown, mdtex2html, threading, importlib, traceback, importlib, inspect
from show_math import convert as convert_math from show_math import convert as convert_math
from functools import wraps from functools import wraps
import re
def predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[], sys_prompt=''): def predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[], sys_prompt=''):
""" """
@ -88,6 +89,17 @@ def CatchException(f):
yield chatbot, history, f'异常 {e}' yield chatbot, history, f'异常 {e}'
return decorated return decorated
def HotReload(f):
"""
装饰器函数实现函数插件热更新
"""
@wraps(f)
def decorated(*args, **kwargs):
fn_name = f.__name__
f_hot_reload = getattr(importlib.reload(inspect.getmodule(f)), fn_name)
yield from f_hot_reload(*args, **kwargs)
return decorated
def report_execption(chatbot, history, a, b): def report_execption(chatbot, history, a, b):
""" """
向chatbot中添加错误信息 向chatbot中添加错误信息
@ -226,9 +238,14 @@ def get_conf(*args):
except: r = getattr(importlib.import_module('config'), arg) except: r = getattr(importlib.import_module('config'), arg)
res.append(r) res.append(r)
# 在读取API_KEY时检查一下是不是忘了改config # 在读取API_KEY时检查一下是不是忘了改config
if arg=='API_KEY' and len(r) != 51: if arg=='API_KEY':
assert False, "正确的API_KEY密钥是51位请在config文件中修改API密钥, 添加海外代理之后再运行。" + \ # 正确的 API_KEY 是 "sk-" + 48 位大小写字母数字的组合
"如果您刚更新过代码请确保旧版config_private文件中没有遗留任何新增键值" API_MATCH = re.match(r"sk-[a-zA-Z0-9]{48}$", r)
if API_MATCH:
print("您的 API_KEY 是: ", r, "\nAPI_KEY 导入成功")
else:
assert False, "正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合请在config文件中修改API密钥, 添加海外代理之后再运行。" + \
"如果您刚更新过代码请确保旧版config_private文件中没有遗留任何新增键值"
return res return res
def clear_line_break(txt): def clear_line_break(txt):