Spaces:
Paused
Paused
增加临时输入api-key的功能
Browse files- colorful.py +91 -0
- crazy_functions/代码重写为全英文_多线程.py +3 -3
- main.py +3 -3
- request_llm/bridge_chatgpt.py +16 -3
- requirements.txt +1 -0
- show_math.py +0 -80
- toolbox.py +16 -10
colorful.py
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import platform
|
2 |
+
from sys import stdout
|
3 |
+
|
4 |
+
if platform.system()=="Linux":
|
5 |
+
pass
|
6 |
+
else:
|
7 |
+
from colorama import init
|
8 |
+
init()
|
9 |
+
|
10 |
+
# Do you like the elegance of Chinese characters?
|
11 |
+
def print红(*kw,**kargs):
|
12 |
+
print("\033[0;31m",*kw,"\033[0m",**kargs)
|
13 |
+
def print绿(*kw,**kargs):
|
14 |
+
print("\033[0;32m",*kw,"\033[0m",**kargs)
|
15 |
+
def print黄(*kw,**kargs):
|
16 |
+
print("\033[0;33m",*kw,"\033[0m",**kargs)
|
17 |
+
def print蓝(*kw,**kargs):
|
18 |
+
print("\033[0;34m",*kw,"\033[0m",**kargs)
|
19 |
+
def print紫(*kw,**kargs):
|
20 |
+
print("\033[0;35m",*kw,"\033[0m",**kargs)
|
21 |
+
def print靛(*kw,**kargs):
|
22 |
+
print("\033[0;36m",*kw,"\033[0m",**kargs)
|
23 |
+
|
24 |
+
def print亮红(*kw,**kargs):
|
25 |
+
print("\033[1;31m",*kw,"\033[0m",**kargs)
|
26 |
+
def print亮绿(*kw,**kargs):
|
27 |
+
print("\033[1;32m",*kw,"\033[0m",**kargs)
|
28 |
+
def print亮黄(*kw,**kargs):
|
29 |
+
print("\033[1;33m",*kw,"\033[0m",**kargs)
|
30 |
+
def print亮蓝(*kw,**kargs):
|
31 |
+
print("\033[1;34m",*kw,"\033[0m",**kargs)
|
32 |
+
def print亮紫(*kw,**kargs):
|
33 |
+
print("\033[1;35m",*kw,"\033[0m",**kargs)
|
34 |
+
def print亮靛(*kw,**kargs):
|
35 |
+
print("\033[1;36m",*kw,"\033[0m",**kargs)
|
36 |
+
|
37 |
+
|
38 |
+
|
39 |
+
def print亮红(*kw,**kargs):
|
40 |
+
print("\033[1;31m",*kw,"\033[0m",**kargs)
|
41 |
+
def print亮绿(*kw,**kargs):
|
42 |
+
print("\033[1;32m",*kw,"\033[0m",**kargs)
|
43 |
+
def print亮黄(*kw,**kargs):
|
44 |
+
print("\033[1;33m",*kw,"\033[0m",**kargs)
|
45 |
+
def print亮蓝(*kw,**kargs):
|
46 |
+
print("\033[1;34m",*kw,"\033[0m",**kargs)
|
47 |
+
def print亮紫(*kw,**kargs):
|
48 |
+
print("\033[1;35m",*kw,"\033[0m",**kargs)
|
49 |
+
def print亮靛(*kw,**kargs):
|
50 |
+
print("\033[1;36m",*kw,"\033[0m",**kargs)
|
51 |
+
|
52 |
+
print_red = print红
|
53 |
+
print_green = print绿
|
54 |
+
print_yellow = print黄
|
55 |
+
print_blue = print蓝
|
56 |
+
print_purple = print紫
|
57 |
+
print_indigo = print靛
|
58 |
+
|
59 |
+
print_bold_red = print亮红
|
60 |
+
print_bold_green = print亮绿
|
61 |
+
print_bold_yellow = print亮黄
|
62 |
+
print_bold_blue = print亮蓝
|
63 |
+
print_bold_purple = print亮紫
|
64 |
+
print_bold_indigo = print亮靛
|
65 |
+
|
66 |
+
if not stdout.isatty():
|
67 |
+
# redirection, avoid a fucked up log file
|
68 |
+
print红 = print
|
69 |
+
print绿 = print
|
70 |
+
print黄 = print
|
71 |
+
print蓝 = print
|
72 |
+
print紫 = print
|
73 |
+
print靛 = print
|
74 |
+
print亮红 = print
|
75 |
+
print亮绿 = print
|
76 |
+
print亮黄 = print
|
77 |
+
print亮蓝 = print
|
78 |
+
print亮紫 = print
|
79 |
+
print亮靛 = print
|
80 |
+
print_red = print
|
81 |
+
print_green = print
|
82 |
+
print_yellow = print
|
83 |
+
print_blue = print
|
84 |
+
print_purple = print
|
85 |
+
print_indigo = print
|
86 |
+
print_bold_red = print
|
87 |
+
print_bold_green = print
|
88 |
+
print_bold_yellow = print
|
89 |
+
print_bold_blue = print
|
90 |
+
print_bold_purple = print
|
91 |
+
print_bold_indigo = print
|
crazy_functions/代码重写为全英文_多线程.py
CHANGED
@@ -29,16 +29,16 @@ def 全项目切换英文(txt, llm_kwargs, plugin_kwargs, chatbot, history, sys_
|
|
29 |
|
30 |
# 第2步:尝试导入依赖,如果缺少依赖,则给出安装建议
|
31 |
try:
|
32 |
-
import
|
33 |
except:
|
34 |
report_execption(chatbot, history,
|
35 |
a = f"解析项目: {txt}",
|
36 |
-
b = f"导入软件依赖失败。使用该模块需要额外依赖,安装方法```pip install --upgrade
|
37 |
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
38 |
return
|
39 |
|
40 |
# 第3步:集合文件
|
41 |
-
import time, glob, os, shutil, re
|
42 |
os.makedirs('gpt_log/generated_english_version', exist_ok=True)
|
43 |
os.makedirs('gpt_log/generated_english_version/crazy_functions', exist_ok=True)
|
44 |
file_manifest = [f for f in glob.glob('./*.py') if ('test_project' not in f) and ('gpt_log' not in f)] + \
|
|
|
29 |
|
30 |
# 第2步:尝试导入依赖,如果缺少依赖,则给出安装建议
|
31 |
try:
|
32 |
+
import tiktoken
|
33 |
except:
|
34 |
report_execption(chatbot, history,
|
35 |
a = f"解析项目: {txt}",
|
36 |
+
b = f"导入软件依赖失败。使用该模块需要额外依赖,安装方法```pip install --upgrade tiktoken```。")
|
37 |
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
38 |
return
|
39 |
|
40 |
# 第3步:集合文件
|
41 |
+
import time, glob, os, shutil, re
|
42 |
os.makedirs('gpt_log/generated_english_version', exist_ok=True)
|
43 |
os.makedirs('gpt_log/generated_english_version/crazy_functions', exist_ok=True)
|
44 |
file_manifest = [f for f in glob.glob('./*.py') if ('test_project' not in f) and ('gpt_log' not in f)] + \
|
main.py
CHANGED
@@ -4,8 +4,8 @@ from request_llm.bridge_chatgpt import predict
|
|
4 |
from toolbox import format_io, find_free_port, on_file_uploaded, on_report_generated, get_conf, ArgsGeneralWrapper, DummyWith
|
5 |
|
6 |
# 建议您复制一个config_private.py放自己的秘密, 如API和代理网址, 避免不小心传github被别人看到
|
7 |
-
proxies, WEB_PORT, LLM_MODEL, CONCURRENT_COUNT, AUTHENTICATION, CHATBOT_HEIGHT, LAYOUT = \
|
8 |
-
get_conf('proxies', 'WEB_PORT', 'LLM_MODEL', 'CONCURRENT_COUNT', 'AUTHENTICATION', 'CHATBOT_HEIGHT', 'LAYOUT')
|
9 |
|
10 |
# 如果WEB_PORT是-1, 则随机选取WEB端口
|
11 |
PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT
|
@@ -52,7 +52,7 @@ if LAYOUT == "TOP-DOWN":
|
|
52 |
cancel_handles = []
|
53 |
with gr.Blocks(title="ChatGPT 学术优化", theme=set_theme, analytics_enabled=False, css=advanced_css) as demo:
|
54 |
gr.HTML(title_html)
|
55 |
-
cookies = gr.State({})
|
56 |
with gr_L1():
|
57 |
with gr_L2(scale=2):
|
58 |
chatbot = gr.Chatbot()
|
|
|
4 |
from toolbox import format_io, find_free_port, on_file_uploaded, on_report_generated, get_conf, ArgsGeneralWrapper, DummyWith
|
5 |
|
6 |
# 建议您复制一个config_private.py放自己的秘密, 如API和代理网址, 避免不小心传github被别人看到
|
7 |
+
proxies, WEB_PORT, LLM_MODEL, CONCURRENT_COUNT, AUTHENTICATION, CHATBOT_HEIGHT, LAYOUT, API_KEY = \
|
8 |
+
get_conf('proxies', 'WEB_PORT', 'LLM_MODEL', 'CONCURRENT_COUNT', 'AUTHENTICATION', 'CHATBOT_HEIGHT', 'LAYOUT', 'API_KEY')
|
9 |
|
10 |
# 如果WEB_PORT是-1, 则随机选取WEB端口
|
11 |
PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT
|
|
|
52 |
cancel_handles = []
|
53 |
with gr.Blocks(title="ChatGPT 学术优化", theme=set_theme, analytics_enabled=False, css=advanced_css) as demo:
|
54 |
gr.HTML(title_html)
|
55 |
+
cookies = gr.State({'api_key': API_KEY, 'llm_model': LLM_MODEL})
|
56 |
with gr_L1():
|
57 |
with gr_L2(scale=2):
|
58 |
chatbot = gr.Chatbot()
|
request_llm/bridge_chatgpt.py
CHANGED
@@ -145,6 +145,16 @@ def predict(inputs, llm_kwargs, plugin_kwargs, chatbot, history=[], system_promp
|
|
145 |
chatbot 为WebUI中显示的对话列表,修改它,然后yeild出去,可以直接修改对话界面内容
|
146 |
additional_fn代表点击的哪个按钮,按钮见functional.py
|
147 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
if additional_fn is not None:
|
149 |
import core_functional
|
150 |
importlib.reload(core_functional) # 热更新prompt
|
@@ -224,9 +234,12 @@ def generate_payload(inputs, llm_kwargs, history, system_prompt, stream):
|
|
224 |
"""
|
225 |
整合所有信息,选择LLM模型,生成http请求,为发送请求做准备
|
226 |
"""
|
|
|
|
|
|
|
227 |
headers = {
|
228 |
"Content-Type": "application/json",
|
229 |
-
"Authorization": f"Bearer {
|
230 |
}
|
231 |
|
232 |
conversation_cnt = len(history) // 2
|
@@ -254,7 +267,7 @@ def generate_payload(inputs, llm_kwargs, history, system_prompt, stream):
|
|
254 |
messages.append(what_i_ask_now)
|
255 |
|
256 |
payload = {
|
257 |
-
"model":
|
258 |
"messages": messages,
|
259 |
"temperature": llm_kwargs['temperature'], # 1.0,
|
260 |
"top_p": llm_kwargs['top_p'], # 1.0,
|
@@ -263,7 +276,7 @@ def generate_payload(inputs, llm_kwargs, history, system_prompt, stream):
|
|
263 |
"presence_penalty": 0,
|
264 |
"frequency_penalty": 0,
|
265 |
}
|
266 |
-
print(f" {
|
267 |
return headers,payload
|
268 |
|
269 |
|
|
|
145 |
chatbot 为WebUI中显示的对话列表,修改它,然后yeild出去,可以直接修改对话界面内容
|
146 |
additional_fn代表点击的哪个按钮,按钮见functional.py
|
147 |
"""
|
148 |
+
if inputs.startswith('sk-') and len(inputs) == 51:
|
149 |
+
chatbot._cookies['api_key'] = inputs
|
150 |
+
chatbot.append(("输入已识别为openai的api_key", "api_key已导入"))
|
151 |
+
yield from update_ui(chatbot=chatbot, history=history, msg="api_key已导入") # 刷新界面
|
152 |
+
return
|
153 |
+
elif len(chatbot._cookies['api_key']) != 51:
|
154 |
+
chatbot.append((inputs, "缺少api_key。\n\n1. 临时解决方案:直接在输入区键入api_key,然后回车提交。\n\n2. 长效解决方案:在config.py中配置。"))
|
155 |
+
yield from update_ui(chatbot=chatbot, history=history, msg="api_key已导入") # 刷新界面
|
156 |
+
return
|
157 |
+
|
158 |
if additional_fn is not None:
|
159 |
import core_functional
|
160 |
importlib.reload(core_functional) # 热更新prompt
|
|
|
234 |
"""
|
235 |
整合所有信息,选择LLM模型,生成http请求,为发送请求做准备
|
236 |
"""
|
237 |
+
if len(llm_kwargs['api_key']) != 51:
|
238 |
+
raise AssertionError("你提供了错误的API_KEY。\n\n1. 临时解决方案:直接在输入区键入api_key,然后回车提交。\n\n2. 长效解决方案:在config.py中配置。")
|
239 |
+
|
240 |
headers = {
|
241 |
"Content-Type": "application/json",
|
242 |
+
"Authorization": f"Bearer {llm_kwargs['api_key']}"
|
243 |
}
|
244 |
|
245 |
conversation_cnt = len(history) // 2
|
|
|
267 |
messages.append(what_i_ask_now)
|
268 |
|
269 |
payload = {
|
270 |
+
"model": llm_kwargs['llm_model'],
|
271 |
"messages": messages,
|
272 |
"temperature": llm_kwargs['temperature'], # 1.0,
|
273 |
"top_p": llm_kwargs['top_p'], # 1.0,
|
|
|
276 |
"presence_penalty": 0,
|
277 |
"frequency_penalty": 0,
|
278 |
}
|
279 |
+
print(f" {llm_kwargs['llm_model']} : {conversation_cnt} : {inputs[:100]}")
|
280 |
return headers,payload
|
281 |
|
282 |
|
requirements.txt
CHANGED
@@ -5,6 +5,7 @@ python-markdown-math
|
|
5 |
beautifulsoup4
|
6 |
latex2mathml
|
7 |
mdtex2html
|
|
|
8 |
tiktoken
|
9 |
Markdown
|
10 |
pygments
|
|
|
5 |
beautifulsoup4
|
6 |
latex2mathml
|
7 |
mdtex2html
|
8 |
+
colorama
|
9 |
tiktoken
|
10 |
Markdown
|
11 |
pygments
|
show_math.py
DELETED
@@ -1,80 +0,0 @@
|
|
1 |
-
# This program is written by: https://github.com/polarwinkel/mdtex2html
|
2 |
-
|
3 |
-
from latex2mathml.converter import convert as tex2mathml
|
4 |
-
import re
|
5 |
-
|
6 |
-
incomplete = '<font style="color:orange;" class="tooltip">⚠<span class="tooltiptext">formula incomplete</span></font>'
|
7 |
-
convError = '<font style="color:red" class="tooltip">⚠<span class="tooltiptext">LaTeX-convert-error</span></font>'
|
8 |
-
|
9 |
-
def convert(mdtex, extensions=[], splitParagraphs=True):
|
10 |
-
''' converts recursively the Markdown-LaTeX-mixture to HTML with MathML '''
|
11 |
-
found = False
|
12 |
-
# handle all paragraphs separately (prevents aftereffects)
|
13 |
-
if splitParagraphs:
|
14 |
-
parts = re.split("\n\n", mdtex)
|
15 |
-
result = ''
|
16 |
-
for part in parts:
|
17 |
-
result += convert(part, extensions, splitParagraphs=False)
|
18 |
-
return result
|
19 |
-
# find first $$-formula:
|
20 |
-
parts = re.split('\${2}', mdtex, 2)
|
21 |
-
if len(parts)>1:
|
22 |
-
found = True
|
23 |
-
result = convert(parts[0], extensions, splitParagraphs=False)+'\n'
|
24 |
-
try:
|
25 |
-
result += '<div class="blockformula">'+tex2mathml(parts[1])+'</div>\n'
|
26 |
-
except:
|
27 |
-
result += '<div class="blockformula">'+convError+'</div>'
|
28 |
-
if len(parts)==3:
|
29 |
-
result += convert(parts[2], extensions, splitParagraphs=False)
|
30 |
-
else:
|
31 |
-
result += '<div class="blockformula">'+incomplete+'</div>'
|
32 |
-
# else find first $-formulas:
|
33 |
-
else:
|
34 |
-
parts = re.split('\${1}', mdtex, 2)
|
35 |
-
if len(parts)>1 and not found:
|
36 |
-
found = True
|
37 |
-
try:
|
38 |
-
mathml = tex2mathml(parts[1])
|
39 |
-
except:
|
40 |
-
mathml = convError
|
41 |
-
if parts[0].endswith('\n\n') or parts[0]=='': # make sure textblock starts before formula!
|
42 |
-
parts[0]=parts[0]+'​'
|
43 |
-
if len(parts)==3:
|
44 |
-
result = convert(parts[0]+mathml+parts[2], extensions, splitParagraphs=False)
|
45 |
-
else:
|
46 |
-
result = convert(parts[0]+mathml+incomplete, extensions, splitParagraphs=False)
|
47 |
-
# else find first \[..\]-equation:
|
48 |
-
else:
|
49 |
-
parts = re.split(r'\\\[', mdtex, 1)
|
50 |
-
if len(parts)>1 and not found:
|
51 |
-
found = True
|
52 |
-
result = convert(parts[0], extensions, splitParagraphs=False)+'\n'
|
53 |
-
parts = re.split(r'\\\]', parts[1], 1)
|
54 |
-
try:
|
55 |
-
result += '<div class="blockformula">'+tex2mathml(parts[0])+'</div>\n'
|
56 |
-
except:
|
57 |
-
result += '<div class="blockformula">'+convError+'</div>'
|
58 |
-
if len(parts)==2:
|
59 |
-
result += convert(parts[1], extensions, splitParagraphs=False)
|
60 |
-
else:
|
61 |
-
result += '<div class="blockformula">'+incomplete+'</div>'
|
62 |
-
# else find first \(..\)-equation:
|
63 |
-
else:
|
64 |
-
parts = re.split(r'\\\(', mdtex, 1)
|
65 |
-
if len(parts)>1 and not found:
|
66 |
-
found = True
|
67 |
-
subp = re.split(r'\\\)', parts[1], 1)
|
68 |
-
try:
|
69 |
-
mathml = tex2mathml(subp[0])
|
70 |
-
except:
|
71 |
-
mathml = convError
|
72 |
-
if parts[0].endswith('\n\n') or parts[0]=='': # make sure textblock starts before formula!
|
73 |
-
parts[0]=parts[0]+'​'
|
74 |
-
if len(subp)==2:
|
75 |
-
result = convert(parts[0]+mathml+subp[1], extensions, splitParagraphs=False)
|
76 |
-
else:
|
77 |
-
result = convert(parts[0]+mathml+incomplete, extensions, splitParagraphs=False)
|
78 |
-
if not found:
|
79 |
-
result = mdtex
|
80 |
-
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
toolbox.py
CHANGED
@@ -12,7 +12,7 @@ from functools import wraps, lru_cache
|
|
12 |
############################### 插件输入输出接驳区 #######################################
|
13 |
class ChatBotWithCookies(list):
|
14 |
def __init__(self, cookie):
|
15 |
-
self.
|
16 |
|
17 |
def write_list(self, list):
|
18 |
for t in list:
|
@@ -22,7 +22,7 @@ class ChatBotWithCookies(list):
|
|
22 |
return [t for t in self]
|
23 |
|
24 |
def get_cookies(self):
|
25 |
-
return self.
|
26 |
|
27 |
def ArgsGeneralWrapper(f):
|
28 |
"""
|
@@ -37,10 +37,13 @@ def ArgsGeneralWrapper(f):
|
|
37 |
'temperature':temperature,
|
38 |
})
|
39 |
llm_kwargs = {
|
|
|
|
|
40 |
'top_p':top_p,
|
41 |
'temperature':temperature,
|
42 |
}
|
43 |
plugin_kwargs = {
|
|
|
44 |
}
|
45 |
chatbot_with_cookie = ChatBotWithCookies(cookies)
|
46 |
chatbot_with_cookie.write_list(chatbot)
|
@@ -473,27 +476,30 @@ def on_report_generated(files, chatbot):
|
|
473 |
chatbot.append(['汇总报告如何远程获取?', '汇总报告已经添加到右侧“文件上传区”(可能处于折叠状态),请查收。'])
|
474 |
return report_files, chatbot
|
475 |
|
|
|
|
|
|
|
|
|
476 |
|
477 |
@lru_cache(maxsize=128)
|
478 |
def read_single_conf_with_lru_cache(arg):
|
|
|
479 |
try:
|
480 |
r = getattr(importlib.import_module('config_private'), arg)
|
481 |
except:
|
482 |
r = getattr(importlib.import_module('config'), arg)
|
483 |
# 在读取API_KEY时,检查一下是不是忘了改config
|
484 |
if arg == 'API_KEY':
|
485 |
-
|
486 |
-
|
487 |
-
if API_MATCH:
|
488 |
-
print(f"[API_KEY] 您的 API_KEY 是: {r[:15]}*** API_KEY 导入成功")
|
489 |
else:
|
490 |
-
|
491 |
-
"(如果您刚更新过代码,请确保旧版config_private文件中没有遗留任何新增键值)"
|
492 |
if arg == 'proxies':
|
493 |
if r is None:
|
494 |
-
print('[PROXY] 网络代理状态:未配置。无代理状态下很可能无法访问。建议:检查USE_PROXY选项是否修改。')
|
495 |
else:
|
496 |
-
print('[PROXY] 网络代理状态:已配置。配置信息如下:', r)
|
497 |
assert isinstance(r, dict), 'proxies格式错误,请注意proxies选项的格式,不要遗漏括号。'
|
498 |
return r
|
499 |
|
|
|
12 |
############################### 插件输入输出接驳区 #######################################
|
13 |
class ChatBotWithCookies(list):
|
14 |
def __init__(self, cookie):
|
15 |
+
self._cookies = cookie
|
16 |
|
17 |
def write_list(self, list):
|
18 |
for t in list:
|
|
|
22 |
return [t for t in self]
|
23 |
|
24 |
def get_cookies(self):
|
25 |
+
return self._cookies
|
26 |
|
27 |
def ArgsGeneralWrapper(f):
|
28 |
"""
|
|
|
37 |
'temperature':temperature,
|
38 |
})
|
39 |
llm_kwargs = {
|
40 |
+
'api_key': cookies['api_key'],
|
41 |
+
'llm_model': cookies['llm_model'],
|
42 |
'top_p':top_p,
|
43 |
'temperature':temperature,
|
44 |
}
|
45 |
plugin_kwargs = {
|
46 |
+
# 目前还没有
|
47 |
}
|
48 |
chatbot_with_cookie = ChatBotWithCookies(cookies)
|
49 |
chatbot_with_cookie.write_list(chatbot)
|
|
|
476 |
chatbot.append(['汇总报告如何远程获取?', '汇总报告已经添加到右侧“文件上传区”(可能处于折叠状态),请查收。'])
|
477 |
return report_files, chatbot
|
478 |
|
479 |
+
def is_openai_api_key(key):
|
480 |
+
# 正确的 API_KEY 是 "sk-" + 48 位大小写字母数字的组合
|
481 |
+
API_MATCH = re.match(r"sk-[a-zA-Z0-9]{48}$", key)
|
482 |
+
return API_MATCH
|
483 |
|
484 |
@lru_cache(maxsize=128)
|
485 |
def read_single_conf_with_lru_cache(arg):
|
486 |
+
from colorful import print亮红, print亮绿
|
487 |
try:
|
488 |
r = getattr(importlib.import_module('config_private'), arg)
|
489 |
except:
|
490 |
r = getattr(importlib.import_module('config'), arg)
|
491 |
# 在读取API_KEY时,检查一下是不是忘了改config
|
492 |
if arg == 'API_KEY':
|
493 |
+
if is_openai_api_key(r):
|
494 |
+
print亮绿(f"[API_KEY] 您的 API_KEY 是: {r[:15]}*** API_KEY 导入成功")
|
|
|
|
|
495 |
else:
|
496 |
+
print亮红( "[API_KEY] 正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合,请在config文件中修改API密钥, 添加海外代理之后再运行。" + \
|
497 |
+
"(如果您刚更新过代码,请确保旧版config_private文件中没有遗留任何新增键值)")
|
498 |
if arg == 'proxies':
|
499 |
if r is None:
|
500 |
+
print亮红('[PROXY] 网络代理状态:未配置。无代理状态下很可能无法访问。建议:检查USE_PROXY选项是否修改。')
|
501 |
else:
|
502 |
+
print亮绿('[PROXY] 网络代理状态:已配置。配置信息如下:', r)
|
503 |
assert isinstance(r, dict), 'proxies格式错误,请注意proxies选项的格式,不要遗漏括号。'
|
504 |
return r
|
505 |
|