Your Name commited on
Commit
666dde9
2 Parent(s): 167be41 87c0936

Merge branch 'dev' into Euclid-Jie-Euclid_Test

Browse files
config.py CHANGED
@@ -1,16 +1,15 @@
1
- # API_KEY = "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" key无效
2
  API_KEY = "sk-此处填API密钥"
3
- API_URL = "https://api.openai.com/v1/chat/completions"
4
 
5
- # 改为True应用代理
 
6
  USE_PROXY = False
7
  if USE_PROXY:
8
-
9
- # 填写格式是 [协议]:// [地址] :[端口] ,
10
  # 例如 "socks5h://localhost:11284"
11
- # [协议] 常见协议无非socks5h/http,例如 v2***s** 的默认本地协议是socks5hcl**h 的默认本地协议是http
12
  # [地址] 懂的都懂,不懂就填localhost或者127.0.0.1肯定错不了(localhost意思是代理软件安装在本机上)
13
- # [端口] 在代理软件的设置里,不同的代理软件界面不一样,但端口号都应该在最显眼的位置上
14
 
15
  # 代理网络的地址,打开你的科学上网软件查看代理的协议(socks5/http)、地址(localhost)和端口(11284)
16
  proxies = { "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", }
@@ -19,6 +18,9 @@ else:
19
  proxies = None
20
  print('网络代理状态:未配置。无代理状态下很可能无法访问。')
21
 
 
 
 
22
  # 发送请求到OpenAI后,等待多久判定为超时
23
  TIMEOUT_SECONDS = 25
24
 
@@ -28,9 +30,12 @@ WEB_PORT = -1
28
  # 如果OpenAI不响应(网络卡顿、代理失败、KEY失效),重试的次数限制
29
  MAX_RETRY = 2
30
 
31
- # 选择的OpenAI模型是(gpt4现在只对申请成功的人开放)
32
  LLM_MODEL = "gpt-3.5-turbo"
33
 
 
 
 
34
  # 设置并行使用的线程数
35
  CONCURRENT_COUNT = 100
36
 
 
1
+ # [step 1]>> 例如: API_KEY = "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" (此key无效)
2
  API_KEY = "sk-此处填API密钥"
 
3
 
4
+
5
+ # [step 2]>> 改为True应用代理,如果直接在海外服务器部署,此处不修改
6
  USE_PROXY = False
7
  if USE_PROXY:
8
+ # 填写格式是 [协议]:// [地址] :[端口],填写之前不要忘记把USE_PROXY改成True,如果直接在海外服务器部署,此处不修改
 
9
  # 例如 "socks5h://localhost:11284"
10
+ # [协议] 常见协议无非socks5h/http; 例如 v2**yss* 的默认本地协议是socks5h; 而cl**h 的默认本地协议是http
11
  # [地址] 懂的都懂,不懂就填localhost或者127.0.0.1肯定错不了(localhost意思是代理软件安装在本机上)
12
+ # [端口] 在代理软件的设置里找。虽然不同的代理软件界面不一样,但端口号都应该在最显眼的位置上
13
 
14
  # 代理网络的地址,打开你的科学上网软件查看代理的协议(socks5/http)、地址(localhost)和端口(11284)
15
  proxies = { "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", }
 
18
  proxies = None
19
  print('网络代理状态:未配置。无代理状态下很可能无法访问。')
20
 
21
+
22
+ # [step 3]>> 以下配置可以优化体验,但大部分场合下并不需要修改
23
+
24
  # 发送请求到OpenAI后,等待多久判定为超时
25
  TIMEOUT_SECONDS = 25
26
 
 
30
  # 如果OpenAI不响应(网络卡顿、代理失败、KEY失效),重试的次数限制
31
  MAX_RETRY = 2
32
 
33
+ # OpenAI模型选择是(gpt4现在只对申请成功的人开放)
34
  LLM_MODEL = "gpt-3.5-turbo"
35
 
36
+ # OpenAI的API_URL
37
+ API_URL = "https://api.openai.com/v1/chat/completions"
38
+
39
  # 设置并行使用的线程数
40
  CONCURRENT_COUNT = 100
41
 
crazy_functions/高级功能函数模板.py CHANGED
@@ -5,7 +5,7 @@ import datetime
5
  @CatchException
6
  def 高阶功能模板函数(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT):
7
  history = [] # 清空历史,以免输入溢出
8
- chatbot.append(("这是什么功能?", "[Local Message] 请注意,您正在调用一个函数模板,该函数面向希望实现更多有趣功能的开发者,它可以作为创建新功能函数的模板。为了做到简单易读,该函数只有25行代码,不会实时反馈文字流或心跳,请耐心等待程序输出完成。另外您若希望分享新的功能模组,请不吝PR!"))
9
  yield chatbot, history, '正常' # 由于请求gpt需要一段时间,我们先及时地做一次状态显示
10
 
11
  for i in range(5):
 
5
  @CatchException
6
  def 高阶功能模板函数(txt, top_p, temperature, chatbot, history, systemPromptTxt, WEB_PORT):
7
  history = [] # 清空历史,以免输入溢出
8
+ chatbot.append(("这是什么功能?", "[Local Message] 请注意,您正在调用一个[函数插件]的模板,该函数面向希望实现更多有趣功能的开发者,它可以作为创建新功能函数的模板。为了做到简单易读,该函数只有25行代码,所以不会实时反馈文字流或心跳,请耐心等待程序输出完成。此外我们也提供可同步处理大量文件的多线程Demo供您参考。您若希望分享新的功能模组,请不吝PR!"))
9
  yield chatbot, history, '正常' # 由于请求gpt需要一段时间,我们先及时地做一次状态显示
10
 
11
  for i in range(5):
functional_crazy.py CHANGED
@@ -1,9 +1,12 @@
 
 
1
  # UserVisibleLevel是过滤器参数。
2
  # 由于UI界面空间有限,所以通过这种方式决定UI界面中显示哪些插件
3
  # 默认函数插件 VisibleLevel 是 0
4
  # 当 UserVisibleLevel >= 函数插件的 VisibleLevel 时,该函数插件才会被显示出来
5
  UserVisibleLevel = 1
6
 
 
7
  def get_crazy_functionals():
8
  from crazy_functions.读文章写摘要 import 读文章写摘要
9
  from crazy_functions.生成函数注释 import 批量生成函数注释
@@ -16,6 +19,7 @@ def get_crazy_functionals():
16
 
17
  function_plugins = {
18
  "请解析并解构此项目本身": {
 
19
  "Function": 解析项目本身
20
  },
21
  "解析整个py项目": {
@@ -39,10 +43,12 @@ def get_crazy_functionals():
39
  "Function": 批量生成函数注释
40
  },
41
  "[多线程demo] 把本项目源代码切换成全英文": {
42
- "Function": 全项目切换英文
 
43
  },
44
  "[函数插件模板demo] 历史上的今天": {
45
- "Function": 高阶功能模板函数
 
46
  },
47
  }
48
 
@@ -52,7 +58,8 @@ def get_crazy_functionals():
52
  function_plugins.update({
53
  "[仅供开发调试] 批量总结PDF文档": {
54
  "Color": "stop",
55
- "Function": 批量总结PDF文档
 
56
  },
57
  })
58
  from crazy_functions.批量总结PDF文档pdfminer import 批量总结PDF文档pdfminer
 
1
+ from toolbox import HotReload # HotReload 的意思是热更新,修改函数插件后,不需要重启程序,代码直接生效
2
+
3
  # UserVisibleLevel是过滤器参数。
4
  # 由于UI界面空间有限,所以通过这种方式决定UI界面中显示哪些插件
5
  # 默认函数插件 VisibleLevel 是 0
6
  # 当 UserVisibleLevel >= 函数插件的 VisibleLevel 时,该函数插件才会被显示出来
7
  UserVisibleLevel = 1
8
 
9
+
10
  def get_crazy_functionals():
11
  from crazy_functions.读文章写摘要 import 读文章写摘要
12
  from crazy_functions.生成函数注释 import 批量生成函数注释
 
19
 
20
  function_plugins = {
21
  "请解析并解构此项目本身": {
22
+ # HotReload 的意思是热更新,修改函数插件后,不需要重启程序,代码直接生效
23
  "Function": 解析项目本身
24
  },
25
  "解析整个py项目": {
 
43
  "Function": 批量生成函数注释
44
  },
45
  "[多线程demo] 把本项目源代码切换成全英文": {
46
+ # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
47
+ "Function": HotReload(全项目切换英文)
48
  },
49
  "[函数插件模板demo] 历史上的今天": {
50
+ # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
51
+ "Function": HotReload(高阶功能模板函数)
52
  },
53
  }
54
 
 
58
  function_plugins.update({
59
  "[仅供开发调试] 批量总结PDF文档": {
60
  "Color": "stop",
61
+ # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
62
+ "Function": HotReload(批量总结PDF文档)
63
  },
64
  })
65
  from crazy_functions.批量总结PDF文档pdfminer import 批量总结PDF文档pdfminer
main.py CHANGED
@@ -10,7 +10,7 @@ proxies, WEB_PORT, LLM_MODEL, CONCURRENT_COUNT, AUTHENTICATION = \
10
 
11
  # 如果WEB_PORT是-1, 则随机选取WEB端口
12
  PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT
13
- AUTHENTICATION = None if AUTHENTICATION == [] else AUTHENTICATION
14
 
15
  initial_prompt = "Serve me as a writing and programming assistant."
16
  title_html = """<h1 align="center">ChatGPT 学术优化</h1>"""
@@ -105,8 +105,7 @@ def auto_opentab_delay():
105
  def open():
106
  time.sleep(2)
107
  webbrowser.open_new_tab(f'http://localhost:{PORT}')
108
- t = threading.Thread(target=open)
109
- t.daemon = True; t.start()
110
 
111
  auto_opentab_delay()
112
  demo.title = "ChatGPT 学术优化"
 
10
 
11
  # 如果WEB_PORT是-1, 则随机选取WEB端口
12
  PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT
13
+ if not AUTHENTICATION: AUTHENTICATION = None
14
 
15
  initial_prompt = "Serve me as a writing and programming assistant."
16
  title_html = """<h1 align="center">ChatGPT 学术优化</h1>"""
 
105
  def open():
106
  time.sleep(2)
107
  webbrowser.open_new_tab(f'http://localhost:{PORT}')
108
+ threading.Thread(target=open, name="open-browser", daemon=True).start()
 
109
 
110
  auto_opentab_delay()
111
  demo.title = "ChatGPT 学术优化"
project_self_analysis.md CHANGED
@@ -1,5 +1,5 @@
1
- # chatgpt-academic项目分析报告
2
- (Author补充:以下分析均由本项目调用ChatGPT一键生成,如果有不准确的地方全怪GPT
3
 
4
  ## [0/10] 程序摘要: check_proxy.py
5
 
 
1
+ # chatgpt-academic项目自译解报告
2
+ (Author补充:以下分析均由本项目调用ChatGPT一键生成,如果有不准确的地方,全怪GPT😄)
3
 
4
  ## [0/10] 程序摘要: check_proxy.py
5
 
toolbox.py CHANGED
@@ -1,6 +1,7 @@
1
- import markdown, mdtex2html, threading, importlib, traceback
2
  from show_math import convert as convert_math
3
  from functools import wraps
 
4
 
5
  def predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[], sys_prompt=''):
6
  """
@@ -88,6 +89,17 @@ def CatchException(f):
88
  yield chatbot, history, f'异常 {e}'
89
  return decorated
90
 
 
 
 
 
 
 
 
 
 
 
 
91
  def report_execption(chatbot, history, a, b):
92
  """
93
  向chatbot中添加错误信息
@@ -226,9 +238,14 @@ def get_conf(*args):
226
  except: r = getattr(importlib.import_module('config'), arg)
227
  res.append(r)
228
  # 在读取API_KEY时,检查一下是不是忘了改config
229
- if arg=='API_KEY' and len(r) != 51:
230
- assert False, "正确的API_KEY密钥是51位,请在config文件中修改API密钥, 添加海外代理之后再运行。" + \
231
- "(如果您刚更新过代码,请确保旧版config_private文件中没有遗留任何新增键值)"
 
 
 
 
 
232
  return res
233
 
234
  def clear_line_break(txt):
 
1
+ import markdown, mdtex2html, threading, importlib, traceback, importlib, inspect
2
  from show_math import convert as convert_math
3
  from functools import wraps
4
+ import re
5
 
6
  def predict_no_ui_but_counting_down(i_say, i_say_show_user, chatbot, top_p, temperature, history=[], sys_prompt=''):
7
  """
 
89
  yield chatbot, history, f'异常 {e}'
90
  return decorated
91
 
92
+ def HotReload(f):
93
+ """
94
+ 装饰器函数,实现函数插件热更新
95
+ """
96
+ @wraps(f)
97
+ def decorated(*args, **kwargs):
98
+ fn_name = f.__name__
99
+ f_hot_reload = getattr(importlib.reload(inspect.getmodule(f)), fn_name)
100
+ yield from f_hot_reload(*args, **kwargs)
101
+ return decorated
102
+
103
  def report_execption(chatbot, history, a, b):
104
  """
105
  向chatbot中添加错误信息
 
238
  except: r = getattr(importlib.import_module('config'), arg)
239
  res.append(r)
240
  # 在读取API_KEY时,检查一下是不是忘了改config
241
+ if arg=='API_KEY':
242
+ # 正确的 API_KEY "sk-" + 48 位大小写字母数字的组合
243
+ API_MATCH = re.match(r"sk-[a-zA-Z0-9]{48}$", r)
244
+ if API_MATCH:
245
+ print("您的 API_KEY 是: ", r, "\nAPI_KEY 导入成功")
246
+ else:
247
+ assert False, "正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合,请在config文件中修改API密钥, 添加海外代理之后再运行。" + \
248
+ "(如果您刚更新过代码,请确保旧版config_private文件中没有遗留任何新增键值)"
249
  return res
250
 
251
  def clear_line_break(txt):