比较提交

..

531 次代码提交

作者 SHA1 备注 提交日期
binary-husky
66bdf8b29a Delete 润色.gif 2023-04-14 15:53:01 +08:00
binary-husky
72a034a1ff Delete 公式.gif 2023-04-14 15:52:53 +08:00
binary-husky
faaa3bb1b6 Update README.md 2023-04-14 15:52:01 +08:00
binary-husky
0485d01d67 Update README.md 2023-04-14 15:41:44 +08:00
binary-husky
f48914f56d Update README.md 2023-04-14 15:38:06 +08:00
binary-husky
443f23521c Update README.md 2023-04-14 15:34:45 +08:00
qingxu fu
cd6a1fd399 当无法正常切割PDF文档时,强制切割 2023-04-14 13:52:56 +08:00
qingxu fu
f10ea20351 延长遇到Rate limit reached时的等待时间 2023-04-14 13:15:42 +08:00
qingxu fu
2e044d97c7 更新提示 2023-04-14 13:10:40 +08:00
qingxu fu
ea7fd53a97 OpenAI缩减了免费用户的请求速率限制 2023-04-14 13:08:19 +08:00
qingxu fu
b2fba01487 把函数插件并行数量限制放到config中 2023-04-14 12:52:47 +08:00
qingxu fu
fb3d0948a0 修改注释 2023-04-14 12:30:43 +08:00
qingxu fu
c8349e766b 削减默认的最大线程数到5 2023-04-14 12:28:25 +08:00
qingxu fu
de8d20bcc2 修改部分注释 2023-04-14 12:23:05 +08:00
qingxu fu
512e3f7a32 修改注释 2023-04-14 12:05:22 +08:00
qingxu fu
717fae8984 修改提示 2023-04-14 12:02:10 +08:00
qingxu fu
2b352de7df 修改提示 2023-04-14 12:01:49 +08:00
qingxu fu
bc3f3429a5 源代码文件数量限制 1024 个 2023-04-14 11:57:27 +08:00
binary-husky
7e14229229 Update issue templates 2023-04-14 11:45:25 +08:00
Your Name
2aab3acfea 2.68 2023-04-14 10:33:53 +08:00
505030475
dd648bd446 disallow special token + limit num of file < 512 2023-04-14 09:50:14 +08:00
binary-husky
a2002ebd85 Update README.md 2023-04-13 17:05:01 +08:00
binary-husky
ff50f30669 Update README.md 2023-04-13 17:01:47 +08:00
binary-husky
0ac7734c7d Delete Dockerfile+ChatGLM 2023-04-13 16:36:08 +08:00
binary-husky
23686bfc77 Update README.md 2023-04-13 15:41:47 +08:00
binary-husky
7e541a7229 Update README.md 2023-04-13 15:40:45 +08:00
binary-husky
5c251f03eb Update README.md 2023-04-13 15:29:27 +08:00
binary-husky
0c21b1edd9 Delete objdump.tmp 2023-04-13 15:26:40 +08:00
binary-husky
0c58795a5e Update README.md 2023-04-13 13:49:54 +08:00
qingxu fu
a70c08a3c4 更新readme 2023-04-13 13:43:05 +08:00
qingxu fu
2712d99d08 添加Markdown全文翻译插件,并用此插件翻译了本项目的README 2023-04-13 13:40:13 +08:00
qingxu fu
76ee4c2c55 Merge branch 'master' of https://github.com/binary-husky/chatgpt_academic into master 2023-04-13 12:46:34 +08:00
qingxu fu
fc222bf287 Lua工程解析+修正注释 2023-04-13 12:46:31 +08:00
binary-husky
eee5763b15 Update requirements.txt 2023-04-13 12:27:28 +08:00
binary-husky
ff55bbd498 Update README.md 2023-04-13 12:20:54 +08:00
binary-husky
703ff7f814 Update README.md 2023-04-13 12:17:59 +08:00
binary-husky
16f7a52207 Update 高级功能函数模板.py 2023-04-13 12:02:52 +08:00
binary-husky
7cad5fa594 Update README.md 2023-04-13 11:53:52 +08:00
binary-husky
0b1d833804 Merge pull request #436 from DDreame/patch-1
[fix]Update requirements.txt For fix
2023-04-13 11:47:19 +08:00
binary-husky
7d414f67f0 Merge pull request #439 from mrhblfx/patch-2
增加解析Lua项目
2023-04-13 11:45:42 +08:00
binary-husky
3e1cecd9f5 Merge pull request #438 from mrhblfx/patch-1
增加了解析Go项目匹配的文件: `go.mod`, `go.sum`, `go.work`
2023-04-13 11:44:03 +08:00
qingxu fu
98724cd395 更新注释 2023-04-13 11:18:44 +08:00
qingxu fu
8ac9b454e3 改善chatpdf的功能 2023-04-13 11:08:53 +08:00
mrhblfx
5e602cabf5 Update crazy_functional.py 2023-04-12 22:44:07 +08:00
mrhblfx
c6610b2aab 新增解析一个Lua项目 2023-04-12 22:39:31 +08:00
mrhblfx
7e53cf7c7e 增加了解析Go项目匹配的文件: go.mod, go.sum, go.work 2023-04-12 22:33:34 +08:00
无知之人
3d6e4ee3a7 [fix]Update requirements.txt For fix
Modify the version of Gradio, which does not support the color button when it is lower than version 3.24. On version 3.25, it fixes the issue https://github.com/gradio-app/gradio/issues/3716 and #371 .

修改一下gradio的版本,低于 3.24版本时不支持 color button,3.25则修复了 issue: #371https://github.com/gradio-app/gradio/issues/3716
2023-04-12 21:32:03 +08:00
fuqingxu
613be5509b 启动ChatGPT+ChatGLM 2023-04-12 17:41:33 +08:00
fuqingxu
d40fa20ce8 Merge branch 'master' of https://github.com/binary-husky/chatgpt_academic 2023-04-12 16:57:56 +08:00
fuqingxu
40bd857c70 UTF8 Ignore read file errors 2023-04-12 16:57:01 +08:00
binary-husky
6e1976d9b8 Update README.md 2023-04-12 12:04:57 +08:00
binary-husky
88a86635c6 Update README.md 2023-04-12 11:21:20 +08:00
binary-husky
acbeebd18d Update README.md 2023-04-12 02:46:04 +08:00
binary-husky
7515863503 Update README.md 2023-04-12 02:41:43 +08:00
binary-husky
a1af5a99e0 Update README.md 2023-04-12 02:27:55 +08:00
binary-husky
84f6ee2fb7 Update README.md 2023-04-12 02:27:10 +08:00
binary-husky
c090df34fa Update README.md 2023-04-12 00:12:42 +08:00
binary-husky
3cb46534b6 Update README.md 2023-04-12 00:08:31 +08:00
Your Name
c41eb0e997 移除故障代码说明 2023-04-11 21:19:31 +08:00
binary-husky
c43a3e6f59 默认关闭share
注意,由于国内 Gradio 的网络访问较为缓慢,启用 demo.queue().launch(share=True, inbrowser=True) 时所有网络会经过 Gradio 服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False,如有需要公网访问的需求,可以重新修改为 share=True 启动。
2023-04-11 21:13:21 +08:00
binary-husky
a8399d2727 Merge pull request #413 from liyishuai/patch-1
Dockerfile: unbuffer stdout
2023-04-11 20:15:10 +08:00
binary-husky
d41d0db810 Update README.md 2023-04-11 20:00:33 +08:00
qingxu fu
19d6323801 Merge branch 'master' of https://github.com/binary-husky/chatgpt_academic into master 2023-04-11 19:59:09 +08:00
qingxu fu
929c0afc9b 2.67 修复typo 2023-04-11 19:59:06 +08:00
qingxu fu
3748979133 2.67 修复typo 2023-04-11 19:58:37 +08:00
binary-husky
6e8c5637aa Update README.md 2023-04-11 19:34:03 +08:00
qingxu fu
f336ba060d Merge branch 'master' of https://github.com/binary-husky/chatgpt_academic into master 2023-04-11 19:32:02 +08:00
qingxu fu
4fe4626608 修改功能说明 2023-04-11 19:31:57 +08:00
binary-husky
e6fbf13c67 Update README.md 2023-04-11 19:00:20 +08:00
binary-husky
6bc5cbce20 Update README.md 2023-04-11 18:58:16 +08:00
qingxu fu
3c9d63c37b UP 2023-04-11 18:50:56 +08:00
qingxu fu
93d5fc2f1a 修复 2023-04-11 18:49:22 +08:00
qingxu fu
2f2ad59823 2.62 BUG 修复 2023-04-11 18:47:51 +08:00
qingxu fu
b841d58a26 renew all 2023-04-11 18:36:38 +08:00
qingxu fu
3d66e3eb79 UP 2023-04-11 18:23:59 +08:00
Your Name
4dad114ce7 紧急bug修复 2023-04-11 18:16:33 +08:00
Your Name
f8d565c5a1 紧急BUG修复 2023-04-11 18:15:26 +08:00
Your Name
6bbc10f5b9 紧急bug修复 2023-04-11 18:12:31 +08:00
qingxu fu
8bf2956ff7 version 2.6 2023-04-11 17:55:30 +08:00
qingxu fu
270889a533 print change 2023-04-11 17:52:40 +08:00
qingxu fu
a72b95d2b9 Merge branch 'dev_grand' of https://github.com/binary-husky/chatgpt_academic into dev_grand 2023-04-11 17:42:59 +08:00
qingxu fu
7167c84394 修正解析源代码bug 2023-04-11 17:42:56 +08:00
qingxu fu
d587189ceb 更正bug 2023-04-11 17:40:50 +08:00
Yishuai Li
4a4fb661df Dockerfile: two-stage copy 2023-04-11 17:25:30 +08:00
qingxu fu
a7083873c0 界面重构 2023-04-11 15:31:46 +08:00
Yishuai Li
a13ed231d3 Dockerfile: unbuffer stdout 2023-04-11 15:30:40 +08:00
qingxu fu
0b960df309 add arxiv dependency 2023-04-11 15:20:04 +08:00
qingxu fu
42d366be94 修复chatbotwithcookies的对象传递问题 2023-04-11 15:17:00 +08:00
qingxu fu
fc331681b4 移除陈旧函数 2023-04-11 14:45:00 +08:00
qingxu fu
e965c36db3 Merge branch 'master' into dev_grand 2023-04-10 12:38:26 +08:00
binary-husky
ad208ff7cf Merge pull request #395 from HougeLangley/master
Added python-docx
2023-04-10 10:05:01 +08:00
HougeLangley
1256387488 Added python-docx
解决在使用批量导入 .docx 文件是提示需要 pip install --upgrade python-docx 的问题
2023-04-10 01:06:34 +08:00
binary-husky
88919db63e Merge pull request #388 from WangRongsheng/master
update en2ch prompt
2023-04-10 00:39:54 +08:00
qingxu fu
bc8415b905 翻译成地道的中文 2023-04-10 00:36:05 +08:00
qingxu fu
21a3519c50 Merge branch 'master' of https://github.com/WangRongsheng/chatgpt_academic into WangRongsheng-master 2023-04-10 00:33:16 +08:00
binary-husky
a3dd982159 Merge pull request #389 from Ljp66/master
Update toolbox.py
2023-04-10 00:31:24 +08:00
qingxu fu
f38929b149 +Latex全文中英互译插件 2023-04-10 00:29:53 +08:00
qingxu fu
c8a9069ee3 强调中文 2023-04-10 00:21:20 +08:00
qingxu fu
53b099e3a6 实验 2023-04-10 00:11:07 +08:00
qingxu fu
0d387fa699 UP 2023-04-10 00:05:46 +08:00
qingxu fu
acf0349215 更新提示 2023-04-10 00:00:03 +08:00
qingxu fu
869de46078 自动更新程序+自动pip包安装 2023-04-09 23:56:24 +08:00
qingxu fu
6ce9b724ec 修正prompt 2023-04-09 23:32:32 +08:00
qingxu fu
49a6ff6a7c Latex全文润色 2023-04-09 23:28:57 +08:00
qingxu fu
3725122de1 增加临时输入api-key的功能 2023-04-09 21:23:21 +08:00
qingxu fu
1f6defedfc UP 2023-04-09 20:50:33 +08:00
qingxu fu
0666fec86e 增扩框架的参数IO 2023-04-09 20:42:23 +08:00
qingxu fu
ea031ab05b st 2023-04-09 19:49:42 +08:00
qingxu fu
47445fdc90 declare depriction 2023-04-09 19:02:18 +08:00
qingxu fu
e6cf5532a9 提升稳定性 2023-04-09 18:59:43 +08:00
MPU王荣胜
d741f884c5 Delete core_functional.py 2023-04-09 11:55:27 +08:00
gbwyljp
58db0b04fa Update toolbox.py
remove duplicate "import importlib"
2023-04-09 11:55:00 +08:00
MPU王荣胜
c5ce25d581 update en2ch prompt 2023-04-09 11:45:34 +08:00
MPU王荣胜
53cfed89d5 update en2ch prompt 2023-04-09 11:38:37 +08:00
binary-husky
3592a0de11 Update version 2023-04-08 22:51:37 +08:00
qingxu fu
91d07c329a version 2.5 2023-04-08 22:27:02 +08:00
qingxu fu
ab373c5bf7 移动参数位置 2023-04-08 22:16:33 +08:00
qingxu fu
f714bfc59f 错别字 2023-04-08 22:15:33 +08:00
qingxu fu
09ab60c46d up 2023-04-08 22:14:05 +08:00
Your Name
6383113e85 加入自动更新协议 2023-04-08 02:48:35 +08:00
Your Name
d52b4d6dbb 显示版本 2023-04-08 02:39:54 +08:00
Your Name
2f9ec385c9 自动更新程序 2023-04-08 02:38:02 +08:00
Your Name
3249b31155 多种接口 2023-04-08 00:51:58 +08:00
Your Name
9cd15c6f88 新插件移动到插件菜单中 2023-04-08 00:42:54 +08:00
Your Name
300484f301 Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-04-08 00:41:46 +08:00
Your Name
476a174320 代码高亮开关 2023-04-08 00:41:39 +08:00
binary-husky
b475a4f32a Merge pull request #366 from Hanzoe/master
new function: 实现单篇PDF论文翻译理解
2023-04-08 00:41:03 +08:00
binary-husky
c07196698e Update README.md 2023-04-08 00:32:22 +08:00
Your Name
e371b82ea3 更新requirements.txt实现代码高亮必要 2023-04-08 00:23:26 +08:00
Your Name
3de941ee5e Fix dockerfile 2023-04-08 00:01:11 +08:00
Your Name
2120c074c1 version 2.45 2023-04-07 23:58:10 +08:00
Your Name
8dbae2c68a Merge branch 'master' into dev 2023-04-07 23:55:19 +08:00
Your Name
50dfccc010 新增谷歌学术统合小助手 2023-04-07 23:54:24 +08:00
Your Name
036bd93115 version 2.43 2023-04-07 22:08:05 +08:00
Your Name
b7dca67f6e 处理多线程中出现的网络问题 2023-04-07 22:06:08 +08:00
Hanzoe
33dcbf5093 Update crazy_functional.py 2023-04-07 21:35:36 +08:00
Hanzoe
a5785446c0 Add files via upload 2023-04-07 21:34:55 +08:00
Hanzoe
8a83f8315b Merge pull request #1 from binary-husky/master
单篇论文翻译理解
2023-04-07 21:34:11 +08:00
Your Name
9344c414b6 Merge branch 'dev' of github.com:binary-husky/chatgpt_academic into dev 2023-04-07 21:09:43 +08:00
Your Name
042d06846b highlight 2023-04-07 21:09:37 +08:00
Your Name
2a8d6e1d53 highlight 2023-04-07 21:08:34 +08:00
Your Name
ce1cf491b6 Merge branch 'dev' of github.com:binary-husky/chatgpt_academic into dev 2023-04-07 21:00:32 +08:00
Your Name
28a4188332 Merge branch 'master' into dev 2023-04-07 20:59:35 +08:00
qingxu fu
e2770fe37f 代码、公式高亮 2023-04-07 20:30:30 +08:00
qingxu fu
c2dcab0e12 Merge branch 'master' of https://github.com/binary-husky/chatgpt_academic into master 2023-04-07 19:26:20 +08:00
qingxu fu
8597dba5f2 修复小BUG 2023-04-07 19:26:17 +08:00
binary-husky
1f09afcb8f Update README.md 2023-04-07 19:09:18 +08:00
binary-husky
533359e19f Update README.md 2023-04-07 19:08:41 +08:00
qingxu fu
2e3f6b3126 正确显示列表序号 2023-04-07 18:33:46 +08:00
binary-husky
3d3d259125 Update toolbox.py 2023-04-07 18:27:52 +08:00
binary-husky
fffa536303 Update README.md 2023-04-07 18:21:13 +08:00
Your Name
2df4742815 修复公式显示错误 2023-04-07 18:14:27 +08:00
qingxu fu
9ca7a90590 fix equation 2023-04-07 17:55:24 +08:00
qingxu fu
d1a18d293a 更新requirements.txt 2023-04-07 12:45:47 +08:00
binary-husky
769f2fe7d7 Update README.md 2023-04-06 19:24:37 +08:00
binary-husky
991cd29395 Update README.md 2023-04-06 19:15:58 +08:00
binary-husky
9a12adf853 Update README.md 2023-04-06 18:55:16 +08:00
binary-husky
928bef8983 Update README.md 2023-04-06 18:49:49 +08:00
qingxu fu
f14aa4818a 改善提示 2023-04-06 18:45:24 +08:00
Your Name
a4d731b190 替换基础函数 2023-04-06 18:41:04 +08:00
qingxu fu
0079733bfd 主要代码规整化 2023-04-06 18:29:49 +08:00
qingxu fu
1055fdaab7 小问题修复 2023-04-06 18:26:46 +08:00
qingxu fu
0b3f7b8821 format file 2023-04-06 18:15:11 +08:00
qingxu fu
e8cf757dc0 修复完成后的文件显示问题 2023-04-06 18:13:16 +08:00
qingxu fu
06f8094a0a fix error 2023-04-06 17:23:26 +08:00
qingxu fu
d4ed4efa03 Merge branch 'dev_ui' of https://github.com/binary-husky/chatgpt_academic into dev_ui 2023-04-06 17:19:28 +08:00
qingxu fu
aa7574dcec change UI 2023-04-06 17:19:25 +08:00
qingxu fu
62a946e499 change UI 2023-04-06 17:18:30 +08:00
qingxu fu
0b2b0a83d6 change UI 2023-04-06 17:17:31 +08:00
qingxu fu
f8b2524aa3 恢复模板函数 2023-04-06 17:15:13 +08:00
qingxu fu
079916f56c 修正打印提示 2023-04-06 16:59:52 +08:00
qingxu fu
1da77af2a2 update self_analysis 2023-04-06 16:33:01 +08:00
qingxu fu
946481b774 2.4版本 2023-04-06 16:13:56 +08:00
Your Name
d32a52c8e9 End 2023-04-06 03:43:53 +08:00
Your Name
85d85d850a update 2023-04-06 03:30:02 +08:00
Your Name
dcaa7a1808 重命名一些函数 2023-04-06 02:02:04 +08:00
Your Name
785893b64f 修改文件命名 2023-04-05 16:19:35 +08:00
qingxu fu
8aa2b48816 Merge remote-tracking branch 'origin/master' into dev_ui 2023-04-05 14:35:46 +08:00
binary-husky
3269f430ff Update README.md 2023-04-05 14:34:43 +08:00
binary-husky
dad6a64194 Update README.md 2023-04-05 14:09:56 +08:00
binary-husky
2126a5ce74 Update README.md 2023-04-05 14:09:35 +08:00
binary-husky
7ee257a854 Update README.md 2023-04-05 14:07:59 +08:00
Your Name
ddb39453fd 处理没有文件返回的问题 2023-04-05 02:15:47 +08:00
qingxu fu
eda3c6d345 BUG FIX 2023-04-05 01:58:34 +08:00
qingxu fu
745734b601 改进效率 2023-04-05 00:25:53 +08:00
qingxu fu
2bb1f3dd30 Merge branch 'dev_ui' of https://github.com/binary-husky/chatgpt_academic into dev_ui 2023-04-05 00:15:09 +08:00
qingxu fu
82952882eb BUG FIX 2023-04-05 00:11:12 +08:00
qingxu fu
971b45f332 BUG FIX 2023-04-05 00:10:06 +08:00
qingxu fu
04504b1d99 Bug Fix: Hot Reload Wapper For All 2023-04-05 00:09:13 +08:00
qingxu fu
85e71f8a71 参数输入bug修复 2023-04-05 00:07:08 +08:00
qingxu fu
c96a253568 支持更多界面布局的切换 2023-04-04 23:46:47 +08:00
qingxu fu
24780ee628 merge 2023-04-04 22:56:06 +08:00
qingxu fu
b87bfeaddb check_new_version 2023-04-04 22:54:08 +08:00
binary-husky
effa1421b4 Update version 2023-04-04 22:34:28 +08:00
binary-husky
3d95e42dc8 Update version 2023-04-04 22:20:39 +08:00
binary-husky
602fbb08da Update version 2023-04-04 22:20:21 +08:00
binary-husky
7f0393b2b0 Update version 2023-04-04 22:17:47 +08:00
qingxu fu
79c617e437 规划版本号 2023-04-04 21:38:20 +08:00
binary-husky
e5bd6186d5 Update issue templates 2023-04-04 17:13:40 +08:00
binary-husky
2418c45159 Update README.md 2023-04-04 15:33:53 +08:00
qingxu fu
3aa446cf19 修复代码英文重构Bug 2023-04-04 15:23:42 +08:00
qingxu fu
23c1b14ca3 默认暗色护眼主题 2023-04-03 20:56:00 +08:00
binary-husky
f1b0e5f0f7 Merge pull request #290 from LiZheGuang/master
fix: 🐛 修复react解析项目不显示在下拉列表的问题
2023-04-03 17:58:28 +08:00
LiZheGuang
535525e9d5 fix: 🐛 修复react解析项目不显示在下拉列表的问题 2023-04-03 17:44:09 +08:00
binary-husky
c54be726bf Update issue templates 2023-04-03 17:00:51 +08:00
qingxu fu
858c40b0a5 update README 2023-04-03 09:32:01 +08:00
binary-husky
ed33bf5a15 Update README.md 2023-04-03 01:49:40 +08:00
binary-husky
1b793e3397 Update README.md 2023-04-03 01:47:49 +08:00
binary-husky
f58f4fbbf8 Update README.md 2023-04-03 01:39:17 +08:00
binary-husky
b1ed86ee7d Update README.md 2023-04-03 01:38:44 +08:00
binary-husky
5570b94ad1 Update README.md 2023-04-03 01:03:00 +08:00
binary-husky
5aab515bac Update README.md 2023-04-03 01:01:57 +08:00
binary-husky
9b45a66137 Update README.md 2023-04-02 22:15:12 +08:00
binary-husky
7658842bdd Update README.md 2023-04-02 22:04:33 +08:00
binary-husky
a96a865265 Update config.py 2023-04-02 22:02:41 +08:00
binary-husky
ad48645db9 Update README.md 2023-04-02 21:51:41 +08:00
binary-husky
80fed7135a Update README.md 2023-04-02 21:44:44 +08:00
binary-husky
5e003070cd Update README.md 2023-04-02 21:41:36 +08:00
binary-husky
a10a23e347 Update README.md 2023-04-02 21:39:28 +08:00
binary-husky
c2062c05cb Update README.md 2023-04-02 21:33:09 +08:00
binary-husky
2dd674b0b3 Update README.md 2023-04-02 21:31:44 +08:00
binary-husky
88e92bfd8c Update README.md 2023-04-02 21:28:59 +08:00
binary-husky
872888d957 Update README.md 2023-04-02 21:27:19 +08:00
Your Name
dcbfabf657 Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-04-02 20:35:16 +08:00
Your Name
75754718c1 #236 2023-04-02 20:35:09 +08:00
Your Name
97193065f6 remove verbose print 2023-04-02 20:22:11 +08:00
Your Name
a999487b8e CHATBOT_HEIGHT - 1 2023-04-02 20:20:37 +08:00
Your Name
c330fa6be1 return None instead of [] when no file is concluded 2023-04-02 20:18:58 +08:00
Your Name
5b9de09c11 +异常处理 2023-04-02 20:03:25 +08:00
Your Name
01265c5934 微调theme 2023-04-02 20:02:47 +08:00
binary-husky
4888656a72 Update README.md 2023-04-02 16:55:18 +08:00
Your Name
4556559e53 Merge branch 'CSS' of https://github.com/Keldos-Li/chatgpt_academic (#236) 2023-04-02 16:01:35 +08:00
Your Name
900b752e61 修改按钮提示 2023-04-02 15:48:54 +08:00
binary-husky
174146b5d7 Merge pull request #253 from RongkangXiong/dev
add crazy_functions 解析一个Java项目
2023-04-02 15:40:03 +08:00
Your Name
3387b5acb0 添加Golang、Java等项目的支持 2023-04-02 15:33:09 +08:00
Your Name
bf3eb0bfab 加入 arxiv 小助手插件 2023-04-02 15:19:21 +08:00
RongkangXiong
9540cf9448 add crazy_functions 解析一个Rect项目 2023-04-02 03:07:21 +08:00
RongkangXiong
55ef4acea9 add crazy_functions 解析一个Java项目 2023-04-02 02:59:03 +08:00
Your Name
8e0f401bf3 Merge branch 'master' into dev 2023-04-02 01:24:03 +08:00
Your Name
99e13e5895 update 2023-04-02 01:23:15 +08:00
Your Name
190b547373 stage llm model interface 2023-04-02 01:18:51 +08:00
Your Name
eee4cb361c q 2023-04-02 00:51:17 +08:00
Your Name
2420d62a33 接入TGUI 2023-04-02 00:40:05 +08:00
Your Name
3af0bbdbe4 成功借助tgui调用更多LLM 2023-04-02 00:22:41 +08:00
Your Name
bfa6661367 up 2023-04-01 23:46:32 +08:00
Your Name
d79dfe2fc7 wait new pr 2023-04-01 21:56:55 +08:00
Your Name
919b15b242 修改文件名 2023-04-01 21:45:58 +08:00
Keldos
a469d8714d fix: 修正CSS中的注释解决列表显示
- 同时使用.markdown-body缩限了css作用域
2023-04-01 20:34:18 +08:00
binary-husky
15d9d9a307 Update README.md 2023-04-01 20:21:31 +08:00
Your Name
a8bd564cd1 advanced theme 2023-04-01 19:48:14 +08:00
Your Name
a51cfbc625 新的arxiv论文插件 2023-04-01 19:43:56 +08:00
binary-husky
d10fec81fa Merge pull request #239 from ylsislove/golang-code-analysis
feat: add function to parse Golang projects
2023-04-01 19:42:06 +08:00
binary-husky
a0841c6e6c Update functional_crazy.py 2023-04-01 19:37:39 +08:00
wangyu
594f4b24f6 feat: add function to parse Golang projects
This commit adds a new function to parse Golang projects to the collection of crazy functions.
2023-04-01 19:19:36 +08:00
Your Name
629d022e8a fix bug 2023-04-01 19:07:58 +08:00
Your Name
c5355a9ca4 README 2023-04-01 18:07:26 +08:00
Your Name
0218efaae7 Typo in Prompt 2023-04-01 17:29:30 +08:00
Your Name
1533c4b604 python3.7 compat 2023-04-01 17:11:59 +08:00
Keldos
b64596de0e feat: 调整表格样式 2023-04-01 16:58:51 +08:00
Keldos
9752af934e feat: 使用CSS完善表格、列表、代码块、对话气泡显示样式
移植了 川虎ChatGPT 的CSS——但是川虎ChatGPT的CSS也是我写的~
2023-04-01 16:51:38 +08:00
Your Name
70d9300972 README up 2023-04-01 16:36:57 +08:00
Your Name
47ea28693a update README 2023-04-01 16:35:45 +08:00
Your Name
172eb4a977 Merge branch 'dev' 2023-04-01 16:31:57 +08:00
binary-husky
666a7448a0 Update README.md 2023-04-01 04:25:03 +08:00
binary-husky
9ce3497183 Update README.md 2023-04-01 04:19:02 +08:00
Your Name
2c963cc368 交互优化 2023-04-01 04:11:31 +08:00
Your Name
b0dfef48e9 将css样式移动到theme文件,减少main.py的代码行数 2023-04-01 03:39:43 +08:00
binary-husky
c85923b17b Merge pull request #209 from jr-shen/dev-1
(1)修改语法检查的prompt,确保输出格式统一。

之前使用时经常发现输出没有把修改的部分加粗,或者在表格中把整段文字输出了,影响阅读。因此在之前的prompt基础上增加了一个example,确保输出格式统一。

(2)表格内增加了边框线,使行/列之间的分隔更清楚。

使用时发现没有边框的表格在里面文字较多时难以区分。因此增加表格内边框线。
2023-04-01 03:37:02 +08:00
Your Name
5e8eb6253c 优化Token溢出时的处理 2023-04-01 03:36:05 +08:00
Your Name
833d136fb9 隐藏、显示功能区 2023-04-01 00:21:27 +08:00
Your Name
753f9d50ff 更清朗些的UI 2023-03-31 23:54:25 +08:00
Your Name
9ad21838fe 更清朗的UI 2023-03-31 23:51:17 +08:00
Junru Shen
7b8de7884f add markdown table border line to make text boundary more clear 2023-03-31 23:40:21 +08:00
Junru Shen
b5b0f6a3ce make grammar correction prompt more clear 2023-03-31 23:38:49 +08:00
Your Name
44a605e766 对word和pdf进行简易的支持 2023-03-31 23:18:45 +08:00
Your Name
939dfa6ac9 Merge branch 'master' into dev 2023-03-31 23:08:30 +08:00
Your Name
8c3a8a2e3b Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-31 22:49:45 +08:00
Your Name
d58802af01 修复bug 2023-03-31 22:49:39 +08:00
Your Name
9593b0d09d 优化自译解功能 2023-03-31 22:36:46 +08:00
binary-husky
f7d50cd9fa Update README.md 2023-03-31 21:48:45 +08:00
Your Name
14a7d00037 移动函数到调用模组 2023-03-31 21:46:47 +08:00
binary-husky
94e75d2718 Merge pull request #204 from Eralien/dev-clean_pdf
feat: clean pdf fitz text
2023-03-31 21:42:18 +08:00
binary-husky
6fc2423ae3 add contributor 2023-03-31 21:41:17 +08:00
binary-husky
da8cb77314 Merge pull request #147 from JasonGuo1/master
feat(toolbox.py,总结word文档.py): 支持rar格式与7z格式解压;word读取
2023-03-31 21:39:05 +08:00
Your Name
a87ce5bb77 JasonGuo1 2023-03-31 21:37:46 +08:00
Your Name
a098d08750 Merge branch 'master' of https://github.com/JasonGuo1/chatgpt_academic into JasonGuo1-master 2023-03-31 21:31:31 +08:00
Siyuan Feng
ab879ca4b7 feat: clean pdf fitz text 2023-03-31 21:26:55 +08:00
binary-husky
dde672c63d Merge pull request #117 from XMB-7/better_prompt
feat: better prompt
2023-03-31 21:19:25 +08:00
Your Name
030bfb4568 Merge branch 'better_prompt' of https://github.com/XMB-7/chatgpt_academic into XMB-7-better_prompt 2023-03-31 21:18:28 +08:00
binary-husky
149ef28071 Merge pull request #174 from Euclid-Jie/Euclid_Test
feature(read pdf paper then write summary)
2023-03-31 21:06:02 +08:00
Your Name
16caf34800 整合 2023-03-31 21:05:18 +08:00
Your Name
666dde9f74 Merge branch 'dev' into Euclid-Jie-Euclid_Test 2023-03-31 21:03:43 +08:00
Your Name
167be41621 pdfminer整合到一个文件中 2023-03-31 21:03:12 +08:00
Your Name
a71edeea95 Merge branch 'Euclid_Test' of https://github.com/Euclid-Jie/chatgpt_academic into Euclid-Jie-Euclid_Test 2023-03-31 20:26:59 +08:00
Your Name
87c09368da 修改文本 2023-03-31 20:12:27 +08:00
Your Name
72f23cbbef fix import error 2023-03-31 20:05:31 +08:00
Your Name
a3952be1cb Merge branch 'dev' of github.com:binary-husky/chatgpt_academic into dev 2023-03-31 20:04:11 +08:00
Your Name
fa7464ae44 config新增说明 2023-03-31 20:02:12 +08:00
binary-husky
e5cc1eacd7 Merge pull request #194 from fulyaec/enhance-chataca
修改AUTHENTICATION的判断,使得AUTHENTICATION为None/[]/""时都可以正确判断
2023-03-31 19:49:40 +08:00
Your Name
60506eff9f revert toolbox 2023-03-31 19:46:01 +08:00
Your Name
b655feedde Merge branch 'enhance-chataca' of https://github.com/fulyaec/chatgpt_academic into fulyaec-enhance-chataca 2023-03-31 19:45:23 +08:00
binary-husky
e04d57cddd Merge pull request #198 from oneLuckyman/feature-match-API_KEY
一个小改进:更精准的 API_KEY 确认机制
2023-03-31 19:28:21 +08:00
Your Name
739cec9ab9 Merge remote-tracking branch 'origin/hot-reload-test' 2023-03-31 19:21:15 +08:00
Jia Xinglong
0b03c797bc 使用 re 模块的 match 函数可以更精准的匹配和确认 API_KEY 是否正确 2023-03-31 17:38:39 +08:00
fulyaec
cec44805a5 refactor and enhance 2023-03-31 16:24:40 +08:00
binary-husky
a88a42799f Update main.py 2023-03-31 13:33:03 +08:00
binary-husky
36890a14bf Update README.md 2023-03-31 13:29:37 +08:00
binary-husky
dca98d404b Update README.md 2023-03-31 13:11:10 +08:00
欧玮杰
db8c8afd74 fix(the ".PDF" file can not be recognized): 2023-03-31 10:26:40 +08:00
欧玮杰
125fa7c378 fix(fix "gbk" encode error in 批量总结PDF文档 line14):
由于不可编码字符,导致报错,添加软解码,处理原始文本。
2023-03-31 10:03:10 +08:00
欧玮杰
285fa4690c feature(read pdf paper then write summary):
add a func called readPdf in toolbox, which can read pdf paper to str. then use bs4.BeautifulSoup to clean content.
2023-03-31 00:54:01 +08:00
binary-husky
380bfe6984 Merge pull request #171 from RoderickChan/add-deploy-instruction
在README中添加远程部署的指导
2023-03-31 00:00:35 +08:00
binary-husky
badf4090c5 Update README.md 2023-03-30 23:59:01 +08:00
binary-husky
a3d179c2fa Update README.md 2023-03-30 23:34:17 +08:00
RoderickChan
9564a5e113 在README中添加远程部署的指导方案 2023-03-30 23:31:44 +08:00
JasonGuo1
ac4fce05cf feat(总结word文档):增加读取docx、doc格式的功能 2023-03-30 23:23:41 +08:00
binary-husky
fda48fd37d 添加Wiki链接 2023-03-30 23:09:45 +08:00
JasonGuo1
44e77dc741 feat(toolbox):调整了空格的问题 2023-03-30 20:28:15 +08:00
binary-husky
5d03dd37d2 Merge pull request #151 from SadPencil/patch-1
Fix a typo
2023-03-30 19:14:48 +08:00
qingxu fu
ba0c17ba53 自译解报告 2023-03-30 18:21:17 +08:00
qingxu fu
cd421d8074 Merge branch 'hot-reload-test' of https://github.com/binary-husky/chatgpt_academic into hot-reload-test 2023-03-30 18:05:03 +08:00
qingxu fu
363e45508b 新增热更新功能 2023-03-30 18:04:20 +08:00
qingxu fu
b073477905 新增热更新功能 2023-03-30 18:01:06 +08:00
Sad Pencil
743d18cd98 Fix a typo 2023-03-30 15:55:46 +08:00
JasonGuo1
80e0c4e388 feat(toolbox): 支持rar格式与7z格式解压,修改了下注释 2023-03-30 15:48:55 +08:00
JasonGuo1
6d8c8cd3f0 feat(toolbox): 支持rar格式与7z格式解压,修改了下注释 2023-03-30 15:48:00 +08:00
JasonGuo1
d57d529aa1 feat(toolbox): 支持rar格式与7z格式解压,修改了下注释 2023-03-30 15:47:18 +08:00
JasonGuo1
e470ee1f7f feat(toolbox): 支持rar格式与7z格式解压,修改了下注释 2023-03-30 15:45:58 +08:00
JasonGuo1
a360cd7e74 feat(支持rar格式与7z格式解压) 2023-03-30 15:24:01 +08:00
binary-husky
16ce033d86 Update README.md 2023-03-30 14:48:46 +08:00
binary-husky
81b0118730 Update README.md 2023-03-30 14:48:20 +08:00
binary-husky
35847e4ec4 Update README.md 2023-03-30 14:47:19 +08:00
binary-husky
1f7f71c6b9 Update README.md 2023-03-30 14:08:24 +08:00
binary-husky
06a04f14d8 Update README.md 2023-03-30 13:24:30 +08:00
binary-husky
c21bdaae52 Merge pull request #124 from Freddd13/master
feat: 添加wsl2使用windows proxy的方法
2023-03-30 12:56:13 +08:00
qingxu fu
44155bcc24 查找语法错误之前先清除换行符 2023-03-30 12:52:28 +08:00
qingxu fu
4d02ea9863 语法错误查找prompt更新 2023-03-30 12:16:18 +08:00
qingxu fu
82742f3ea5 up 2023-03-30 11:51:55 +08:00
qingxu fu
6dd83fb1b4 标准化代码格式 2023-03-30 11:50:11 +08:00
qingxu fu
2bf30d8a1e 修改配置的读取方式 2023-03-30 11:05:38 +08:00
Freddd13
0b1f351cba update: 修改readme 2023-03-30 02:00:15 +08:00
Freddd13
0975b60c72 Merge remote-tracking branch 'upstream/master' 2023-03-30 01:58:39 +08:00
Freddd13
e3d763acff feat: 支持wsl2使用windows proxy 2023-03-30 01:47:39 +08:00
Your Name
51c612920d Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-30 00:15:37 +08:00
Your Name
bfdc2dee9a change UI layout 2023-03-30 00:15:31 +08:00
binary-husky
3c5122b529 Update README.md 2023-03-30 00:09:58 +08:00
Xiaoming Bai
97cd98d5a2 better prompt 2023-03-30 00:06:02 +08:00
binary-husky
bd4bf71c4b Update README.md 2023-03-29 23:53:33 +08:00
binary-husky
9598029620 Update README.md 2023-03-29 23:50:20 +08:00
binary-husky
d6e4fc27ad Update README.md 2023-03-29 23:48:58 +08:00
binary-husky
e4b3523947 Update README.md 2023-03-29 23:44:37 +08:00
binary-husky
ad75886941 Update README.md 2023-03-29 23:44:01 +08:00
binary-husky
83fef07f58 Merge pull request #108 from sjiang95/condainstall
readme: update
2023-03-29 23:22:44 +08:00
Your Name
3134e13d87 Merge branch 'dev' 2023-03-29 23:15:29 +08:00
binary-husky
48cc477e48 Merge pull request #102 from ValeriaWong/master
feat(读文章写摘要):支持pdf文件批量阅读及总结 #101
2023-03-29 23:14:12 +08:00
Your Name
77e34565e6 change UI layout 2023-03-29 23:04:37 +08:00
Your Name
dc4fe3f8c2 change ui layout 2023-03-29 23:00:16 +08:00
Your Name
4698ec6b98 Merge https://github.com/ValeriaWong/chatgpt_academic into ValeriaWong-master 2023-03-29 21:49:56 +08:00
Your Name
a6c4b8d764 add pip package check 2023-03-29 21:47:56 +08:00
Your Name
92d4400d19 Merge branch 'master' of https://github.com/ValeriaWong/chatgpt_academic 2023-03-29 21:44:59 +08:00
Shengjiang Quan
11c641748f readme: update
Re-format a part of the markdown content
and add conda instruction for installation.

Signed-off-by: Shengjiang Quan <qsj287068067@126.com>
2023-03-29 22:36:15 +09:00
ValeriaWong
6867c5eed4 Merge branch 'master' of https://github.com/ValeriaWong/chatgpt_academic 2023-03-29 21:05:25 +08:00
ValeriaWong
5c6d272950 Merge branch 'binary-husky:master' into master 2023-03-29 20:57:07 +08:00
ValeriaWong
0f28564fea feat(读文章写摘要):支持pdf文件批量阅读及总结 #101 2023-03-29 20:55:13 +08:00
binary-husky
403dd2fa59 Update main.py 2023-03-29 20:47:34 +08:00
Your Name
3ac330dff1 bug quick fix 2023-03-29 20:41:07 +08:00
binary-husky
cbcdd39239 Merge pull request #82 from Okabe-Rintarou-0/master
支持暂停按钮 #53
2023-03-29 20:38:06 +08:00
Your Name
e79b0c0835 提交后不清空输入栏,添加停止键 2023-03-29 20:36:58 +08:00
Your Name
730cd1e0e3 Merge branch 'master' of https://github.com/Okabe-Rintarou-0/chatgpt_academic into Okabe-Rintarou-0-master 2023-03-29 20:26:13 +08:00
Your Name
c78254cd86 Merge branch 'master' of https://github.com/Okabe-Rintarou-0/chatgpt_academic into Okabe-Rintarou-0-master 2023-03-29 20:07:38 +08:00
Your Name
23776b90b9 handle ip location lookup error 2023-03-29 19:37:39 +08:00
binary-husky
8849095776 Merge pull request #87 from Okabe-Rintarou-0/fix-markdown-display
正确显示多行输入的 markdown #84
2023-03-29 19:32:19 +08:00
binary-husky
8f60e962de Merge pull request #96 from eltociear/patch-1
fix typo in predict.py
2023-03-29 18:47:51 +08:00
Your Name
b100680f72 新增代理配置说明 2023-03-29 18:07:33 +08:00
Ikko Eltociear Ashimine
5d22785e5a fix typo in predict.py
refleshing -> refreshing
2023-03-29 18:57:37 +09:00
ValeriaWong
3f635bc4aa feat(读文章写摘要):支持pdf文件批量阅读及总结 2023-03-29 17:57:17 +08:00
Your Name
17abd29d50 error message change 2023-03-29 16:50:37 +08:00
Your Name
4699395425 dev 2023-03-29 16:47:15 +08:00
okabe
33adfc35df fix: markdown display bug #84 2023-03-29 15:29:40 +08:00
okabe
4b21ebdba6 feat: support stop generate button (#53) 2023-03-29 14:53:53 +08:00
Your Name
17d9a060d8 fix directory return bug 2023-03-29 14:28:57 +08:00
Your Name
7d5aaa5aee update comments 2023-03-29 14:16:59 +08:00
505030475
67215bcec5 修复变量名 2023-03-29 13:58:30 +08:00
505030475
e381dce78c Merge remote-tracking branch 'origin/test-3-29' 2023-03-29 13:44:57 +08:00
505030475
4d70bc0288 config comments 2023-03-29 13:43:07 +08:00
binary-husky
c90391a902 Update README.md 2023-03-29 13:38:43 +08:00
binary-husky
4e06c350bf Merge pull request #57 from GaiZhenbiao/master
Adding a bunch of nice-to-have features
2023-03-29 13:37:58 +08:00
Your Name
3981555466 Merge branch 'test-3-29' of github.com:binary-husky/chatgpt_academic into test-3-29 2023-03-29 12:29:52 +08:00
Your Name
403d66c3c2 优化Unsplash API的使用 2023-03-29 12:28:45 +08:00
Your Name
6ed2b259db 优化Unsplash API的使用 2023-03-29 12:27:47 +08:00
Your Name
2bedba2e17 历史上的今天,带图片 2023-03-29 12:21:47 +08:00
Your Name
ebf365841e 更新一个更有意思的模板函数 2023-03-29 11:36:55 +08:00
Your Name
e76d8cfbc2 [实验] 历史上的今天(高级函数demo) 2023-03-29 11:34:03 +08:00
Your Name
71d2f01685 bug fix 2023-03-29 01:42:11 +08:00
Your Name
6f1e9b63c2 change description 2023-03-29 01:39:15 +08:00
Your Name
d0e3ca7671 更好的多线程交互性 2023-03-29 01:32:28 +08:00
Your Name
61b4ea6d1b introduce project self-translation 2023-03-29 01:11:53 +08:00
Tuchuanhuhuhu
1805f081d3 增加“重置”按钮,提交之后自动清空输入框 2023-03-28 23:33:19 +08:00
Tuchuanhuhuhu
17c6524b8d temprature的取值范围为[0, 2] 2023-03-28 23:20:54 +08:00
Tuchuanhuhuhu
c7e1b86b52 增加并行处理与权限控制 2023-03-28 23:17:12 +08:00
Your Name
51bde973a1 simplify codes 2023-03-28 23:09:25 +08:00
Chuan Hu
954bc36d76 Improve the way to open webbrowser 2023-03-28 22:47:30 +08:00
Your Name
c06c60b977 界面色彩自定义 2023-03-28 22:35:55 +08:00
Your Name
b9f1a89812 explain color and theme 2023-03-28 22:31:43 +08:00
Your Name
67d1d88ebd Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-28 22:25:27 +08:00
Your Name
9ac1068f56 remove .vscode from git 2023-03-28 22:24:59 +08:00
Your Name
9a1d4a0d72 update todo 2023-03-28 22:10:22 +08:00
Your Name
043a9ea068 fix unicode bug 2023-03-28 20:31:44 +08:00
binary-husky
256e61b64d Merge pull request #46 from mambaHu/master
Markdown analysis report garbled issue
2023-03-28 20:04:01 +08:00
luca hu
b9f2792983 improving garbled words issue with utf8 2023-03-28 19:34:18 +08:00
binary-husky
28cd1dbf98 Delete jpeg-compressor.tps 2023-03-28 17:21:14 +08:00
binary-husky
e1ee65eb66 Delete JpegLibrary.tps 2023-03-28 17:21:06 +08:00
binary-husky
d19127b5a9 Delete UElibJPG.Build.cs 2023-03-28 17:20:54 +08:00
505030475
2cb1effd45 theme 2023-03-28 12:59:31 +08:00
505030475
7b48bdf880 o 2023-03-28 12:53:05 +08:00
binary-husky
8f7d9ad2d7 Update README.md 2023-03-28 01:36:15 +08:00
binary-husky
6ef2280281 Update README.md 2023-03-28 01:13:55 +08:00
Your Name
d26fa46b27 http post error show 2023-03-27 18:25:07 +08:00
Your Name
da19fa1992 bug fix 2023-03-27 15:16:50 +08:00
Your Name
ab05cf6a01 Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-27 15:14:12 +08:00
Your Name
d08edf7801 Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-27 15:14:05 +08:00
binary-husky
fab0c5dd63 Update README.md 2023-03-27 15:09:02 +08:00
binary-husky
cefd025700 Update README.md 2023-03-27 15:01:49 +08:00
binary-husky
e0aa6389cf Update README.md 2023-03-27 15:01:07 +08:00
binary-husky
e2618a0d3e Update README.md 2023-03-27 14:57:12 +08:00
binary-husky
39dde3b803 Update README.md 2023-03-27 14:56:32 +08:00
binary-husky
ec41c1e9f3 Update README.md 2023-03-27 14:56:20 +08:00
binary-husky
098eff8c68 Update README.md 2023-03-27 14:56:03 +08:00
Your Name
127588c624 Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-27 14:53:46 +08:00
Your Name
e341596d4b up 2023-03-27 14:51:05 +08:00
binary-husky
84dd6084cf Update README.md 2023-03-27 14:47:52 +08:00
binary-husky
5ab4ba2db2 Update README.md 2023-03-27 14:45:32 +08:00
binary-husky
d9686ef25e Update README.md 2023-03-27 13:47:08 +08:00
binary-husky
01e42acfe4 Update README.md 2023-03-27 13:45:08 +08:00
Your Name
9de97da5e3 UI change 2023-03-27 13:24:29 +08:00
Your Name
81741bc3f6 file IO 2023-03-27 13:01:22 +08:00
qingxu fu
9c5cf2b1f7 localFileToRemote 2023-03-27 11:29:11 +08:00
Your Name
6bc7f95633 Merge branch 'test-3-26' 2023-03-26 20:21:39 +08:00
binary-husky
29c1c898ba Merge pull request #10 from ifyz/patch-1
Update main.py
2023-03-26 20:21:14 +08:00
Your Name
79914bb6aa fix dockerfile 2023-03-26 20:18:55 +08:00
binary-husky
56bf460c97 Update main.py 2023-03-26 20:11:44 +08:00
Your Name
c22b4c39a2 UI 2023-03-26 20:10:14 +08:00
Your Name
6d55c4fbe1 调整样式 2023-03-26 20:04:59 +08:00
Your Name
f76ec644bf up 2023-03-26 19:32:04 +08:00
Your Name
66dfd11efe Merge branch 'ifyz-patch-1' into test-3-26 2023-03-26 19:14:49 +08:00
Your Name
d4a3566b21 Merge branch 'patch-1' of https://github.com/ifyz/chatgpt_academic into ifyz-patch-1 2023-03-26 19:14:27 +08:00
Your Name
f04d9755bf add comments 2023-03-26 19:13:58 +08:00
ifyz
bb8b0567ac Update main.py
使用全局变量,禁用Gradio 的分析功能。解决国内用户因调用GoogleAnalytics导致的加载缓慢。
使用本地字体,修改Gradio默认从Googleapis调用字体。从而解决用户由于国内网络环境打开首页缓慢的问题。
2023-03-26 17:11:58 +08:00
ifyz
dc58745f4c Update main.py
使用本地字体,修改Gradio默认从Googleapis调用字体。从而解决用户由于国内网络环境打开首页缓慢的问题。
2023-03-26 15:48:16 +08:00
qingxu fu
6505fea0b7 Merge branch 'master' of https://github.com/binary-husky/chatgpt_academic into master 2023-03-24 21:03:33 +08:00
binary-husky
652a153b3c Update README.md 2023-03-24 21:03:09 +08:00
binary-husky
877283ec05 Update README.md 2023-03-24 21:02:02 +08:00
qingxu fu
5772fae7c5 trim button text 2023-03-24 20:56:34 +08:00
binary-husky
d6ced8bfac Update predict.py 2023-03-24 19:54:52 +08:00
binary-husky
f138b13024 Update .gitattributes 2023-03-24 19:51:52 +08:00
binary-husky
c31f63cf6c Update .gitattributes 2023-03-24 19:50:54 +08:00
binary-husky
922fdc3c50 Create .gitattributes 2023-03-24 19:49:58 +08:00
Your Name
6e593fd678 测试实验性功能 使用说明 2023-03-24 19:47:37 +08:00
Your Name
57996bf005 update readme 2023-03-24 19:42:21 +08:00
binary-husky
7cb01f2379 Update README.md 2023-03-24 19:38:33 +08:00
Your Name
1def3cecfa source 2023-03-24 19:37:47 +08:00
Your Name
8f739cfcdd remote additional file 2023-03-24 19:35:13 +08:00
Your Name
54cd677d27 move images 2023-03-24 19:34:21 +08:00
binary-husky
7f3b7221fd Update README.md 2023-03-24 19:20:43 +08:00
Your Name
667cefe391 push 2023-03-24 19:10:34 +08:00
binary-husky
e32ae33965 Update README.md 2023-03-24 19:04:55 +08:00
binary-husky
1f9c90f0e0 Update README.md 2023-03-24 19:03:03 +08:00
Your Name
b017a3d167 fix count down error 2023-03-24 18:53:43 +08:00
Your Name
8b4b30a846 beta 2023-03-24 18:47:45 +08:00
Your Name
d29f72ce10 bug fix 2023-03-24 18:08:48 +08:00
Your Name
7186d9b17e 模块化封装 2023-03-24 18:04:59 +08:00
Your Name
86924fffa5 up 2023-03-24 16:34:48 +08:00
Your Name
fedc748e17 用gpt给自己生成注释 2023-03-24 16:25:40 +08:00
Your Name
273e8f38d9 muban 2023-03-24 16:22:26 +08:00
Your Name
7187f079c8 易读性+ 2023-03-24 16:17:01 +08:00
Your Name
77408f795e 批量生成函数注释 2023-03-24 16:14:25 +08:00
Your Name
32f36a609e 生成文本报告 2023-03-24 15:42:09 +08:00
Your Name
93c13aa97a better traceback 2023-03-24 15:25:14 +08:00
Your Name
f238a34bb0 增加读latex文章的功能,添加测试样例 2023-03-24 14:56:57 +08:00
Your Name
644c287a24 Merge remote-tracking branch 'origin/master' into test-3-24 2023-03-24 13:29:37 +08:00
Your Name
abd9077cd2 设置及时响应 2023-03-24 13:28:12 +08:00
Your Name
fa22df9cb6 update 2023-03-24 13:12:25 +08:00
binary-husky
3f559ec4cb Update functional_crazy.py 2023-03-24 13:11:41 +08:00
binary-husky
c9abcef3e5 Update functional_crazy.py 2023-03-24 13:06:42 +08:00
binary-husky
36b3c70b25 Update functional_crazy.py 2023-03-24 13:06:34 +08:00
binary-husky
1ac203195f Update functional_crazy.py 2023-03-24 13:02:47 +08:00
qingxu fu
1c937edcb1 Merge branch 'master' of github.com:binary-husky/chatgpt_academic into master 2023-03-24 11:43:24 +08:00
qingxu fu
248e18e2ba auto retry 2023-03-24 11:42:39 +08:00
binary-husky
86cd069ca7 Update README.md 2023-03-24 00:43:33 +08:00
binary-husky
2e67b516d9 Update README.md 2023-03-23 22:15:31 +08:00
binary-husky
7c20e79c01 Update predict.py 2023-03-23 22:13:09 +08:00
binary-husky
4a2c3eec10 Update README.md 2023-03-23 17:03:08 +08:00
Your Name
09ae862403 Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-23 00:35:01 +08:00
Your Name
ac2c8cab1f 正确地显示requests错误 2023-03-23 00:34:55 +08:00
binary-husky
1f0c4b1454 Update README.md 2023-03-23 00:20:39 +08:00
binary-husky
b1a6cfb799 Update README.md 2023-03-23 00:15:44 +08:00
binary-husky
b3a67b84b9 Update README.md 2023-03-22 22:52:15 +08:00
Your Name
513d62570f Merge branch 'master' of github.com:binary-husky/chatgpt_academic 2023-03-22 22:42:56 +08:00
Your Name
5a9aa65f49 bug fix 2023-03-22 22:42:50 +08:00
Your Name
e39c511444 程序自解析功能 2023-03-22 22:37:14 +08:00
binary-husky
6781279019 Update README.md 2023-03-22 22:34:15 +08:00
binary-husky
3f6ddf85e9 Update README.md 2023-03-22 20:47:28 +08:00
binary-husky
1a301e0133 Update README.md 2023-03-22 20:06:09 +08:00
binary-husky
32824f3736 Update README.md 2023-03-22 20:02:03 +08:00
binary-husky
604ba40bdb Update README.md 2023-03-22 19:58:10 +08:00
binary-husky
889b719b09 私密配置
# config_private.py放自己的秘密如API和代理网址
# 读取时首先看是否存在私密的config_private配置文件(不受git管控),如果有,则覆盖原config文件
2023-03-22 19:49:45 +08:00
binary-husky
a5c122b309 借鉴github.com/GaiZhenbiao/ChuanhuChatGPT项目 2023-03-22 19:47:49 +08:00
binary-husky
e5b7613fc5 from github.com/polarwinkel/mdtex2html 2023-03-22 19:46:08 +08:00
binary-husky
1c4e853484 Update README.md 2023-03-22 19:39:02 +08:00
binary-husky
adbcc22a64 Update README.md 2023-03-22 19:36:39 +08:00
binary-husky
d4434219cd Update README.md 2023-03-22 19:35:34 +08:00
binary-husky
3ea231ee5d Update README.md 2023-03-22 19:33:26 +08:00
binary-husky
2881e080f7 修复gradio不吃代理的问题 2023-03-22 19:22:42 +08:00
qingxu fu
a287230baa add private conf 2023-03-22 17:54:15 +08:00
qingxu fu
37f4544e0f upload 2023-03-22 17:48:25 +08:00
qingxu fu
2a6b17ed5e 代理位置 2023-03-22 17:45:10 +08:00
qingxu fu
98f37e9ea7 upload 2023-03-22 17:35:23 +08:00
qingxu fu
85ff193e53 logging 2023-03-22 17:32:48 +08:00
qingxu fu
54914358c7 fix logging encoding 2023-03-22 17:30:30 +08:00
qingxu fu
1fa9a79c3d add proxy debug funtion 2023-03-22 17:25:37 +08:00
binary-husky
dfa76157c8 Update README.md 2023-03-22 16:09:37 +08:00
binary-husky
0382ae2c72 Update predict.py 2023-03-21 21:24:38 +08:00
binary-husky
8ce9266733 Update README.md 2023-03-21 17:53:40 +08:00
binary-husky
7103ffcdf3 Update README.md 2023-03-21 17:53:04 +08:00
binary-husky
3a2511ec1a Update README.md 2023-03-21 15:49:52 +08:00
505030475
787b5be7af ok 2023-03-21 13:53:24 +08:00
binary-husky
2f94951996 Update README.md 2023-03-21 13:45:08 +08:00
505030475
5066fc8757 add deploy method for windows 2023-03-21 13:35:53 +08:00
binary-husky
4afc7b3dda Update README.md 2023-03-20 18:56:09 +08:00
binary-husky
1faffeca49 Update README.md 2023-03-20 18:55:06 +08:00
Your Name
5092e710c5 readme 2023-03-20 18:39:48 +08:00
共有 24 个文件被更改,包括 878 次插入439 次删除

查看文件

@@ -7,11 +7,17 @@ assignees: ''
---
**Describe the bug 简述**
- **(1) Describe the bug 简述**
**Screen Shot 截图**
**Terminal Traceback 终端traceback如果有**
- **(2) Screen Shot 截图**
- **(3) Terminal Traceback 终端traceback如有**
- **(4) Material to Help Reproduce Bugs 帮助我们复现的测试材料样本(如有)**
Before submitting an issue 提交issue之前

查看文件

@@ -1,23 +1,15 @@
> **Note**
>
> 紧急很抱歉2.60版本的一部分代码重构出错,目前2.67及以上版本已经解决,请您及时更新。
>
# ChatGPT 学术优化
**如果喜欢这个项目,请给它一个Star;如果你发明了更好用的快捷键或函数插件,欢迎发issue或者pull requestsdev分支**
**如果喜欢这个项目,请给它一个Star;如果你发明了更好用的快捷键或函数插件,欢迎发issue或者pull requests**
If you like this project, please give it a Star. If you've come up with more useful academic shortcuts or functional plugins, feel free to open an issue or pull request to `dev` branch.
If you like this project, please give it a Star. If you've come up with more useful academic shortcuts or functional plugins, feel free to open an issue or pull request. We also have a [README in English](img/README_EN.md) translated by this project itself.
> **Note**
>
> 1.请注意只有红颜色标识的函数插件(按钮)才支持读取文件。目前对pdf/word格式文件的支持插件正在逐步完善中,需要更多developer的帮助。
> 1.请注意只有**红颜色**标识的函数插件(按钮)才支持读取文件,部分插件位于插件区的**下拉菜单**中。另外我们以**最高优先级**欢迎和处理任何新插件的PR
>
> 2.本项目中每个文件的功能都在自译解[`self_analysis.md`](https://github.com/binary-husky/chatgpt_academic/wiki/chatgpt-academic%E9%A1%B9%E7%9B%AE%E8%87%AA%E8%AF%91%E8%A7%A3%E6%8A%A5%E5%91%8A)详细说明。随着版本的迭代,您也可以随时自行点击相关函数插件,调用GPT重新生成项目的自我解析报告。常见问题汇总在[`wiki`](https://github.com/binary-husky/chatgpt_academic/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)当中。
>
> 3.如果您不太习惯部分中文命名的函数、注释或者界面,您可以随时点击相关函数插件,调用ChatGPT一键生成纯英文的项目源代码。
>
<div align="center">
@@ -30,46 +22,40 @@ If you like this project, please give it a Star. If you've come up with more use
[自定义快捷键](https://www.bilibili.com/video/BV14s4y1E7jN) | 支持自定义快捷键
[配置代理服务器](https://www.bilibili.com/video/BV1rc411W7Dr) | 支持配置代理服务器
模块化设计 | 支持自定义高阶的实验性功能与[函数插件],插件支持[热更新](https://github.com/binary-husky/chatgpt_academic/wiki/%E5%87%BD%E6%95%B0%E6%8F%92%E4%BB%B6%E6%8C%87%E5%8D%97)
[自我程序剖析](https://www.bilibili.com/video/BV1cj411A7VW) | [函数插件] 一键读懂本项目的源代码
[程序剖析](https://www.bilibili.com/video/BV1cj411A7VW) | [函数插件] 一键可以剖析其他Python/C/C++/Java项目树
[自我程序剖析](https://www.bilibili.com/video/BV1cj411A7VW) | [函数插件] [一键读懂](https://github.com/binary-husky/chatgpt_academic/wiki/chatgpt-academic%E9%A1%B9%E7%9B%AE%E8%87%AA%E8%AF%91%E8%A7%A3%E6%8A%A5%E5%91%8A)本项目的源代码
[程序剖析](https://www.bilibili.com/video/BV1cj411A7VW) | [函数插件] 一键可以剖析其他Python/C/C++/Java/Lua/...项目树
读论文 | [函数插件] 一键解读latex论文全文并生成摘要
Latex全文翻译、润色 | [函数插件] 一键翻译或润色latex论文
批量注释生成 | [函数插件] 一键批量生成函数注释
chat分析报告生成 | [函数插件] 运行后自动生成总结汇报
[arxiv小助手](https://www.bilibili.com/video/BV1LM4y1279X) | [函数插件] 输入arxiv文章url即可一键翻译摘要+下载PDF
[PDF论文全文翻译功能](https://www.bilibili.com/video/BV1KT411x7Wn) | [函数插件] PDF论文提取题目&摘要+翻译全文(多线程)
[谷歌学术统合小助手](https://www.bilibili.com/video/BV19L411U7ia) (Version>=2.45) | [函数插件] 给定任意谷歌学术搜索页面URL,让gpt帮你选择有趣的文章
公式显示 | 可以同时显示公式的tex形式和渲染形式
图片显示 | 可以在markdown中显示图片
[谷歌学术统合小助手](https://www.bilibili.com/video/BV19L411U7ia) | [函数插件] 给定任意谷歌学术搜索页面URL,让gpt帮你选择有趣的文章
公式/图片/表格显示 | 可以同时显示公式的tex形式和渲染形式,支持公式、代码高亮
多线程函数插件支持 | 支持多线调用chatgpt,一键处理海量文本或程序
支持GPT输出的markdown表格 | 可以输出支持GPT的markdown表格
启动暗色gradio[主题](https://github.com/binary-husky/chatgpt_academic/issues/173) | 在浏览器url后面添加```/?__dark-theme=true```可以切换dark主题
[多LLM模型](https://www.bilibili.com/video/BV1EM411K7VH/)支持([v3.0分支](https://github.com/binary-husky/chatgpt_academic/tree/v3.0) | 同时被ChatGPT和[清华ChatGLM](https://github.com/THUDM/ChatGLM-6B)伺候的感觉一定会很不错吧?
兼容[TGUI](https://github.com/oobabooga/text-generation-webui)接入更多样的语言模型 | 接入opt-1.3b, galactica-1.3b等模型([v3.0分支](https://github.com/binary-husky/chatgpt_academic/tree/v3.0)测试中)
huggingface免科学上网[在线体验](https://huggingface.co/spaces/qingxu98/gpt-academic) | 登陆huggingface后复制[此空间](https://huggingface.co/spaces/qingxu98/gpt-academic)
…… | ……
</div>
<!-- - 新界面master主分支, 右dev开发前沿 -->
- 新界面
- 新界面修改config.py中的LAYOUT选项即可实现“左右布局”和“上下布局”的切换
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/230361456-61078362-a966-4eb5-b49e-3c62ef18b860.gif" width="700" >
</div>
- 所有按钮都通过读取functional.py动态生成,可随意加自定义功能,解放粘贴板
<div align="center">
<img src="img/公式.gif" width="700" >
<img src="https://user-images.githubusercontent.com/96192199/231975334-b4788e91-4887-412f-8b43-2b9c5f41d248.gif" width="700" >
</div>
- 润色/纠错
<div align="center">
<img src="img/润色.gif" width="700" >
</div>
- 支持GPT输出的markdown表格
<div align="center">
<img src="img/demo2.jpg" width="500" >
<img src="https://user-images.githubusercontent.com/96192199/231980294-f374bdcb-3309-4560-b424-38ef39f04ebd.gif" width="700" >
</div>
- 如果输出包含公式,会同时以tex形式和渲染形式显示,方便复制和阅读
@@ -77,13 +63,18 @@ huggingface免科学上网[在线体验](https://huggingface.co/spaces/qingxu98/
<img src="https://user-images.githubusercontent.com/96192199/230598842-1d7fcddd-815d-40ee-af60-baf488a199df.png" width="700" >
</div>
- 懒得看项目代码?整个工程直接给chatgpt炫嘴里
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226935232-6b6a73ce-8900-4aee-93f9-733c7e6fef53.png" width="700" >
</div>
- 多种大语言模型混合调用([v3.0分支](https://github.com/binary-husky/chatgpt_academic/tree/v3.0)测试中)
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/231222778-34776885-a7f0-4f2c-b5f4-7cc2ef3ecb58.png" width="700" >
</div>
## 直接运行 (Windows, Linux or MacOS)
### 1. 下载项目
@@ -165,13 +156,13 @@ input区域 输入 ./crazy_functions/test_project/python/dqn , 然后点击 "[
```
## 其他部署方式
- 远程云服务器部署
请访问[部署wiki-2](https://github.com/binary-husky/chatgpt_academic/wiki/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%9C%E7%A8%8B%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97)
- 使用WSL2Windows Subsystem for Linux 子系统)
请访问[部署wiki-1](https://github.com/binary-husky/chatgpt_academic/wiki/%E4%BD%BF%E7%94%A8WSL2%EF%BC%88Windows-Subsystem-for-Linux-%E5%AD%90%E7%B3%BB%E7%BB%9F%EF%BC%89%E9%83%A8%E7%BD%B2)
- nginx远程部署
请访问[部署wiki-2](https://github.com/binary-husky/chatgpt_academic/wiki/%E8%BF%9C%E7%A8%8B%E9%83%A8%E7%BD%B2%E7%9A%84%E6%8C%87%E5%AF%BC)
## 自定义新的便捷按钮(学术快捷键自定义)
打开functional.py,添加条目如下,然后重启程序即可。如果按钮已经添加成功并可见,那么前缀、后缀都支持热修改,无需重启程序即可生效。
例如
@@ -264,13 +255,9 @@ python check_proxy.py
## Todo 与 版本规划:
- version 3 (Todo):
- - 支持gpt4和其他更多llm
- version 2.4+ (Todo):
- - 总结大工程源代码时文本过长、token溢出的问题
- - 实现项目打包部署
- - 函数插件参数接口优化
- - 自更新
- version 3.0 (Todo): 优化对chatglm和其他小型llm的支持
- version 2.6: 重构了插件结构,提高了交互性,加入更多插件
- version 2.5: 自更新,解决总结大工程源代码时文本过长、token溢出的问题
- version 2.4: (1)新增PDF全文翻译功能; (2)新增输入区切换位置的功能; (3)新增垂直布局选项; (4)多线程函数插件优化。
- version 2.3: 增强多线程交互性
- version 2.2: 函数插件支持热重载
@@ -287,8 +274,7 @@ python check_proxy.py
# 借鉴项目1借鉴了ChuanhuChatGPT中读取OpenAI json的方法、记录历史问询记录的方法以及gradio queue的使用技巧
https://github.com/GaiZhenbiao/ChuanhuChatGPT
# 借鉴项目2借鉴了mdtex2html中公式处理的方法
https://github.com/polarwinkel/mdtex2html
# 借鉴项目2
https://github.com/THUDM/ChatGLM-6B
```

查看文件

@@ -19,6 +19,11 @@ if USE_PROXY:
else:
proxies = None
# 多线程函数插件中,默认允许多少路线程同时访问OpenAI。
# Free trial users的限制是每分钟3次,Pay-as-you-go users的限制是每分钟3500次。提高限制请查询
# https://platform.openai.com/docs/guides/rate-limits/overview
DEFAULT_WORKER_NUM = 3
# [step 3]>> 以下配置可以优化体验,但大部分场合下并不需要修改
# 对话窗的高度

查看文件

@@ -16,7 +16,7 @@ def get_crazy_functions():
from crazy_functions.高级功能函数模板 import 高阶功能模板函数
from crazy_functions.代码重写为全英文_多线程 import 全项目切换英文
from crazy_functions.Latex全文润色 import Latex英文润色
from crazy_functions.解析项目源代码 import 解析一个Lua项目
function_plugins = {
"解析整个Python项目": {
@@ -47,6 +47,11 @@ def get_crazy_functions():
"AsButton": False, # 加入下拉菜单中
"Function": HotReload(解析一个Rect项目)
},
"解析整个Lua项目": {
"Color": "stop", # 按钮颜色
"AsButton": False, # 加入下拉菜单中
"Function": HotReload(解析一个Lua项目)
},
"读Tex论文写摘要": {
"Color": "stop", # 按钮颜色
"Function": HotReload(读文章写摘要)
@@ -76,11 +81,12 @@ def get_crazy_functions():
from crazy_functions.总结word文档 import 总结word文档
from crazy_functions.批量翻译PDF文档_多线程 import 批量翻译PDF文档
from crazy_functions.谷歌检索小助手 import 谷歌检索小助手
from crazy_functions.理解PDF文档内容 import 理解PDF文档内容
from crazy_functions.理解PDF文档内容 import 理解PDF文档内容标准文件输入
from crazy_functions.Latex全文润色 import Latex中文润色
from crazy_functions.Latex全文翻译 import Latex中译英
from crazy_functions.Latex全文翻译 import Latex英译中
from crazy_functions.批量Markdown翻译 import Markdown中译英
from crazy_functions.批量Markdown翻译 import Markdown英译中
function_plugins.update({
"批量翻译PDF文档多线程": {
@@ -108,12 +114,7 @@ def get_crazy_functions():
"Color": "stop",
"Function": HotReload(总结word文档)
},
# "[测试功能] 理解PDF文档内容Tk文件选择接口,仅本地": {
# # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
# "AsButton": False, # 加入下拉菜单中
# "Function": HotReload(理解PDF文档内容)
# },
"[测试功能] 理解PDF文档内容通用接口,读取文件输入区": {
"理解PDF文档内容 模仿ChatPDF": {
# HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
"Color": "stop",
"AsButton": False, # 加入下拉菜单中
@@ -131,7 +132,6 @@ def get_crazy_functions():
"AsButton": False, # 加入下拉菜单中
"Function": HotReload(Latex中文润色)
},
"[测试功能] Latex项目全文中译英输入路径或上传压缩包": {
# HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
"Color": "stop",
@@ -144,7 +144,18 @@ def get_crazy_functions():
"AsButton": False, # 加入下拉菜单中
"Function": HotReload(Latex英译中)
},
"[测试功能] 批量Markdown中译英输入路径或上传压缩包": {
# HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
"Color": "stop",
"AsButton": False, # 加入下拉菜单中
"Function": HotReload(Markdown中译英)
},
"[测试功能] 批量Markdown英译中输入路径或上传压缩包": {
# HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效
"Color": "stop",
"AsButton": False, # 加入下拉菜单中
"Function": HotReload(Markdown英译中)
},
})
@@ -162,6 +173,8 @@ def get_crazy_functions():
except Exception as err:
print(f'[下载arxiv论文并翻译摘要] 插件导入失败 {str(err)}')
###################### 第n组插件 ###########################
return function_plugins

查看文件

@@ -14,7 +14,7 @@ class PaperFileGroup():
import tiktoken
from toolbox import get_conf
enc = tiktoken.encoding_for_model(*get_conf('LLM_MODEL'))
def get_token_num(txt): return len(enc.encode(txt))
def get_token_num(txt): return len(enc.encode(txt, disallowed_special=()))
self.get_token_num = get_token_num
def run_file_split(self, max_token_limit=1900):
@@ -45,7 +45,7 @@ def 多文件润色(file_manifest, project_folder, llm_kwargs, plugin_kwargs, ch
pfg = PaperFileGroup()
for index, fp in enumerate(file_manifest):
with open(fp, 'r', encoding='utf-8') as f:
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
# 定义注释的正则表达式
comment_pattern = r'%.*'
@@ -92,7 +92,7 @@ def 多文件润色(file_manifest, project_folder, llm_kwargs, plugin_kwargs, ch
chatbot=chatbot,
history_array=[[""] for _ in range(n_split)],
sys_prompt_array=sys_prompt_array,
max_workers=10, # OpenAI所允许的最大并行过载
# max_workers=5, # 并行任务数量限制,最多同时执行5个,其他的排队等待
scroller_max_len = 80
)

查看文件

@@ -14,7 +14,7 @@ class PaperFileGroup():
import tiktoken
from toolbox import get_conf
enc = tiktoken.encoding_for_model(*get_conf('LLM_MODEL'))
def get_token_num(txt): return len(enc.encode(txt))
def get_token_num(txt): return len(enc.encode(txt, disallowed_special=()))
self.get_token_num = get_token_num
def run_file_split(self, max_token_limit=1900):
@@ -44,7 +44,7 @@ def 多文件翻译(file_manifest, project_folder, llm_kwargs, plugin_kwargs, ch
pfg = PaperFileGroup()
for index, fp in enumerate(file_manifest):
with open(fp, 'r', encoding='utf-8') as f:
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
# 定义注释的正则表达式
comment_pattern = r'%.*'
@@ -80,7 +80,7 @@ def 多文件翻译(file_manifest, project_folder, llm_kwargs, plugin_kwargs, ch
elif language == 'zh->en':
inputs_array = [f"Below is a section from a Chinese academic paper, translate it into English, do not modify any latex command such as \section, \cite and equations:" +
f"\n\n{frag}" for frag in pfg.sp_file_contents]
inputs_show_user_array = [f"润色 {f}" for f in pfg.sp_file_tag]
inputs_show_user_array = [f"翻译 {f}" for f in pfg.sp_file_tag]
sys_prompt_array = ["You are a professional academic paper translator." for _ in range(n_split)]
gpt_response_collection = yield from request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
@@ -90,7 +90,7 @@ def 多文件翻译(file_manifest, project_folder, llm_kwargs, plugin_kwargs, ch
chatbot=chatbot,
history_array=[[""] for _ in range(n_split)],
sys_prompt_array=sys_prompt_array,
max_workers=10, # OpenAI所允许的最大并行过载
# max_workers=5, # OpenAI所允许的最大并行过载
scroller_max_len = 80
)

查看文件

@@ -1,12 +1,11 @@
import traceback
from toolbox import update_ui
from toolbox import update_ui, get_conf
def input_clipping(inputs, history, max_token_limit):
import tiktoken
import numpy as np
from toolbox import get_conf
enc = tiktoken.encoding_for_model(*get_conf('LLM_MODEL'))
def get_token_num(txt): return len(enc.encode(txt))
def get_token_num(txt): return len(enc.encode(txt, disallowed_special=()))
mode = 'input-and-history'
# 当 输入部分的token占比 小于 全文的一半时,只裁剪历史
@@ -23,7 +22,7 @@ def input_clipping(inputs, history, max_token_limit):
while n_token > max_token_limit:
where = np.argmax(everything_token)
encoded = enc.encode(everything[where])
encoded = enc.encode(everything[where], disallowed_special=())
clipped_encoded = encoded[:len(encoded)-delta]
everything[where] = enc.decode(clipped_encoded)[:-1] # -1 to remove the may-be illegal char
everything_token[where] = get_token_num(everything[where])
@@ -65,7 +64,6 @@ def request_gpt_model_in_new_thread_with_ui_alive(
from request_llm.bridge_chatgpt import predict_no_ui_long_connection
# 用户反馈
chatbot.append([inputs_show_user, ""])
msg = '正常'
yield from update_ui(chatbot=chatbot, history=[]) # 刷新界面
executor = ThreadPoolExecutor(max_workers=16)
mutable = ["", time.time()]
@@ -73,6 +71,9 @@ def request_gpt_model_in_new_thread_with_ui_alive(
retry_op = retry_times_at_unknown_error
exceeded_cnt = 0
while True:
# watchdog error
if len(mutable) >= 2 and (time.time()-mutable[1]) > 5:
raise RuntimeError("检测到程序终止。")
try:
# 【第一种情况】:顺利完成
result = predict_no_ui_long_connection(
@@ -99,16 +100,20 @@ def request_gpt_model_in_new_thread_with_ui_alive(
except:
# 【第三种情况】:其他错误:重试几次
tb_str = '```\n' + traceback.format_exc() + '```'
print(tb_str)
mutable[0] += f"[Local Message] 警告,在执行过程中遭遇问题, Traceback\n\n{tb_str}\n\n"
if retry_op > 0:
if retry_op > 0:
retry_op -= 1
mutable[0] += f"[Local Message] 重试中 {retry_times_at_unknown_error-retry_op}/{retry_times_at_unknown_error}\n\n"
mutable[0] += f"[Local Message] 重试中,请稍等 {retry_times_at_unknown_error-retry_op}/{retry_times_at_unknown_error}\n\n"
if "Rate limit reached" in tb_str:
time.sleep(30)
time.sleep(5)
continue # 返回重试
else:
time.sleep(5)
return mutable[0] # 放弃
# 提交任务
future = executor.submit(_req_gpt, inputs, history, sys_prompt)
while True:
# yield一次以刷新前端页面
@@ -129,7 +134,7 @@ def request_gpt_model_in_new_thread_with_ui_alive(
def request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
inputs_array, inputs_show_user_array, llm_kwargs,
chatbot, history_array, sys_prompt_array,
refresh_interval=0.2, max_workers=10, scroller_max_len=30,
refresh_interval=0.2, max_workers=-1, scroller_max_len=30,
handle_token_exceed=True, show_user_at_complete=False,
retry_times_at_unknown_error=2,
):
@@ -150,7 +155,7 @@ def request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
history_array (list): List of chat history (历史对话输入,双层列表,第一层列表是子任务分解,第二层列表是对话历史)
sys_prompt_array (list): List of system prompts 系统输入,列表,用于输入给GPT的前提提示,比如你是翻译官怎样怎样
refresh_interval (float, optional): Refresh interval for UI (default: 0.2) 刷新时间间隔频率,建议低于1,不可高于3,仅仅服务于视觉效果
max_workers (int, optional): Maximum number of threads (default: 10) 最大线程数,如果子任务非常多,需要用此选项防止高频地请求openai导致错误
max_workers (int, optional): Maximum number of threads (default: see config.py) 最大线程数,如果子任务非常多,需要用此选项防止高频地请求openai导致错误
scroller_max_len (int, optional): Maximum length for scroller (default: 30)(数据流的显示最后收到的多少个字符,仅仅服务于视觉效果)
handle_token_exceed (bool, optional): (是否在输入过长时,自动缩减文本)
handle_token_exceed是否自动处理token溢出的情况,如果选择自动处理,则会在溢出时暴力截断,默认开启
@@ -165,21 +170,28 @@ def request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
from request_llm.bridge_chatgpt import predict_no_ui_long_connection
assert len(inputs_array) == len(history_array)
assert len(inputs_array) == len(sys_prompt_array)
if max_workers == -1: # 读取配置文件
try: max_workers, = get_conf('DEFAULT_WORKER_NUM')
except: max_workers = 8
if max_workers <= 0 or max_workers >= 20: max_workers = 8
executor = ThreadPoolExecutor(max_workers=max_workers)
n_frag = len(inputs_array)
# 用户反馈
chatbot.append(["请开始多线程操作。", ""])
msg = '正常'
yield from update_ui(chatbot=chatbot, history=[]) # 刷新界面
# 异步原子
# 跨线程传递
mutable = [["", time.time(), "等待中"] for _ in range(n_frag)]
# 子线程任务
def _req_gpt(index, inputs, history, sys_prompt):
gpt_say = ""
retry_op = retry_times_at_unknown_error
exceeded_cnt = 0
mutable[index][2] = "执行中"
while True:
# watchdog error
if len(mutable[index]) >= 2 and (time.time()-mutable[index][1]) > 5:
raise RuntimeError("检测到程序终止。")
try:
# 【第一种情况】:顺利完成
# time.sleep(10); raise RuntimeError("测试")
@@ -212,13 +224,21 @@ def request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
except:
# 【第三种情况】:其他错误
tb_str = '```\n' + traceback.format_exc() + '```'
print(tb_str)
gpt_say += f"[Local Message] 警告,线程{index}在执行过程中遭遇问题, Traceback\n\n{tb_str}\n\n"
if len(mutable[index][0]) > 0: gpt_say += "此线程失败前收到的回答:\n\n" + mutable[index][0]
if retry_op > 0:
retry_op -= 1
wait = random.randint(5, 20)
for i in range(wait):# 也许等待十几秒后,情况会好转
mutable[index][2] = f"等待重试 {wait-i}"; time.sleep(1)
if "Rate limit reached" in tb_str:
wait = wait * 3
fail_info = "OpenAI请求速率限制 "
else:
fail_info = ""
# 也许等待十几秒后,情况会好转
for i in range(wait):
mutable[index][2] = f"{fail_info}等待重试 {wait-i}"; time.sleep(1)
# 开始重试
mutable[index][2] = f"重试中 {retry_times_at_unknown_error-retry_op}/{retry_times_at_unknown_error}"
continue # 返回重试
else:
@@ -241,7 +261,6 @@ def request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
break
# 更好的UI视觉效果
observe_win = []
# print([mutable[thread_index][2] for thread_index, _ in enumerate(worker_done)])
# 每个线程都要“喂狗”(看门狗)
for thread_index, _ in enumerate(worker_done):
mutable[thread_index][1] = time.time()
@@ -251,49 +270,30 @@ def request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
replace('\n', '').replace('```', '...').replace(
' ', '.').replace('<br/>', '.....').replace('$', '.')+"`... ]"
observe_win.append(print_something_really_funny)
# 在前端打印些好玩的东西
stat_str = ''.join([f'`{mutable[thread_index][2]}`: {obs}\n\n'
if not done else f'`{mutable[thread_index][2]}`\n\n'
for thread_index, done, obs in zip(range(len(worker_done)), worker_done, observe_win)])
# 在前端打印些好玩的东西
chatbot[-1] = [chatbot[-1][0], f'多线程操作已经开始,完成情况: \n\n{stat_str}' + ''.join(['.']*(cnt % 10+1))]
msg = "正常"
yield from update_ui(chatbot=chatbot, history=[]) # 刷新界面
# 异步任务结束
gpt_response_collection = []
for inputs_show_user, f in zip(inputs_show_user_array, futures):
gpt_res = f.result()
gpt_response_collection.extend([inputs_show_user, gpt_res])
# 是否在结束时,在界面上显示结果
if show_user_at_complete:
for inputs_show_user, f in zip(inputs_show_user_array, futures):
gpt_res = f.result()
chatbot.append([inputs_show_user, gpt_res])
yield from update_ui(chatbot=chatbot, history=[]) # 刷新界面
time.sleep(1)
time.sleep(0.3)
return gpt_response_collection
def WithRetry(f):
"""
装饰器函数,用于自动重试。
"""
def decorated(retry, res_when_fail, *args, **kwargs):
assert retry >= 0
while True:
try:
res = yield from f(*args, **kwargs)
return res
except:
retry -= 1
if retry<0:
print("达到最大重试次数")
break
else:
print("重试中……")
continue
return res_when_fail
return decorated
def breakdown_txt_to_satisfy_token_limit(txt, get_token_fn, limit):
def cut(txt_tocut, must_break_at_empty_line): # 递归
if get_token_fn(txt_tocut) <= limit:
@@ -312,7 +312,6 @@ def breakdown_txt_to_satisfy_token_limit(txt, get_token_fn, limit):
if get_token_fn(prev) < limit:
break
if cnt == 0:
print('what the fuck ?')
raise RuntimeError("存在一行极长的文本!")
# print(len(post))
# 列表递归接龙
@@ -325,8 +324,18 @@ def breakdown_txt_to_satisfy_token_limit(txt, get_token_fn, limit):
return cut(txt, must_break_at_empty_line=False)
def force_breakdown(txt, limit, get_token_fn):
"""
当无法用标点、空行分割时,我们用最暴力的方法切割
"""
for i in reversed(range(len(txt))):
if get_token_fn(txt[:i]) < limit:
return txt[:i], txt[i:]
return "Tiktoken未知错误", "Tiktoken未知错误"
def breakdown_txt_to_satisfy_token_limit_for_pdf(txt, get_token_fn, limit):
def cut(txt_tocut, must_break_at_empty_line): # 递归
# 递归
def cut(txt_tocut, must_break_at_empty_line, break_anyway=False):
if get_token_fn(txt_tocut) <= limit:
return [txt_tocut]
else:
@@ -338,25 +347,215 @@ def breakdown_txt_to_satisfy_token_limit_for_pdf(txt, get_token_fn, limit):
if must_break_at_empty_line:
if lines[cnt] != "":
continue
print(cnt)
prev = "\n".join(lines[:cnt])
post = "\n".join(lines[cnt:])
if get_token_fn(prev) < limit:
break
if cnt == 0:
# print('what the fuck ? 存在一行极长的文本!')
raise RuntimeError("存在一行极长的文本!")
if break_anyway:
prev, post = force_breakdown(txt_tocut, limit, get_token_fn)
else:
raise RuntimeError(f"存在一行极长的文本!{txt_tocut}")
# print(len(post))
# 列表递归接龙
result = [prev]
result.extend(cut(post, must_break_at_empty_line))
result.extend(cut(post, must_break_at_empty_line, break_anyway=break_anyway))
return result
try:
# 第1次尝试,将双空行\n\n作为切分点
return cut(txt, must_break_at_empty_line=True)
except RuntimeError:
try:
# 第2次尝试,将单空行\n作为切分点
return cut(txt, must_break_at_empty_line=False)
except RuntimeError:
# 这个中文的句号是故意的,作为一个标识而存在
res = cut(txt.replace('.', '\n'), must_break_at_empty_line=False)
return [r.replace('\n', '.') for r in res]
try:
# 第3次尝试,将英文句号.)作为切分点
res = cut(txt.replace('.', '\n'), must_break_at_empty_line=False) # 这个中文的句号是故意的,作为一个标识而存在
return [r.replace('\n', '.') for r in res]
except RuntimeError as e:
try:
# 第4次尝试,将中文句号作为切分点
res = cut(txt.replace('', '。。\n'), must_break_at_empty_line=False)
return [r.replace('。。\n', '') for r in res]
except RuntimeError as e:
# 第5次尝试,没办法了,随便切一下敷衍吧
return cut(txt, must_break_at_empty_line=False, break_anyway=True)
def read_and_clean_pdf_text(fp):
"""
这个函数用于分割pdf,用了很多trick,逻辑较乱,效果奇好
**输入参数说明**
- `fp`需要读取和清理文本的pdf文件路径
**输出参数说明**
- `meta_txt`:清理后的文本内容字符串
- `page_one_meta`:第一页清理后的文本内容列表
**函数功能**
读取pdf文件并清理其中的文本内容,清理规则包括
- 提取所有块元的文本信息,并合并为一个字符串
- 去除短块字符数小于100并替换为回车符
- 清理多余的空行
- 合并小写字母开头的段落块并替换为空格
- 清除重复的换行
- 将每个换行符替换为两个换行符,使每个段落之间有两个换行符分隔
"""
import fitz, copy
import re
import numpy as np
from colorful import print亮黄, print亮绿
fc = 0 # Index 0 文本
fs = 1 # Index 1 字体
fb = 2 # Index 2 框框
REMOVE_FOOT_NOTE = True # 是否丢弃掉 不是正文的内容 (比正文字体小,如参考文献、脚注、图注等)
REMOVE_FOOT_FFSIZE_PERCENT = 0.95 # 小于正文的?时,判定为不是正文有些文章的正文部分字体大小不是100%统一的,有肉眼不可见的小变化)
def primary_ffsize(l):
"""
提取文本块主字体
"""
fsize_statiscs = {}
for wtf in l['spans']:
if wtf['size'] not in fsize_statiscs: fsize_statiscs[wtf['size']] = 0
fsize_statiscs[wtf['size']] += len(wtf['text'])
return max(fsize_statiscs, key=fsize_statiscs.get)
def ffsize_same(a,b):
"""
提取字体大小是否近似相等
"""
return abs((a-b)/max(a,b)) < 0.02
with fitz.open(fp) as doc:
meta_txt = []
meta_font = []
meta_line = []
meta_span = []
############################## <第 1 步,搜集初始信息> ##################################
for index, page in enumerate(doc):
# file_content += page.get_text()
text_areas = page.get_text("dict") # 获取页面上的文本信息
for t in text_areas['blocks']:
if 'lines' in t:
pf = 998
for l in t['lines']:
txt_line = "".join([wtf['text'] for wtf in l['spans']])
pf = primary_ffsize(l)
meta_line.append([txt_line, pf, l['bbox'], l])
for wtf in l['spans']: # for l in t['lines']:
meta_span.append([wtf['text'], wtf['size'], len(wtf['text'])])
# meta_line.append(["NEW_BLOCK", pf])
# 块元提取 for each word segment with in line for each line cross-line words for each block
meta_txt.extend([" ".join(["".join([wtf['text'] for wtf in l['spans']]) for l in t['lines']]).replace(
'- ', '') for t in text_areas['blocks'] if 'lines' in t])
meta_font.extend([np.mean([np.mean([wtf['size'] for wtf in l['spans']])
for l in t['lines']]) for t in text_areas['blocks'] if 'lines' in t])
if index == 0:
page_one_meta = [" ".join(["".join([wtf['text'] for wtf in l['spans']]) for l in t['lines']]).replace(
'- ', '') for t in text_areas['blocks'] if 'lines' in t]
############################## <第 2 步,获取正文主字体> ##################################
fsize_statiscs = {}
for span in meta_span:
if span[1] not in fsize_statiscs: fsize_statiscs[span[1]] = 0
fsize_statiscs[span[1]] += span[2]
main_fsize = max(fsize_statiscs, key=fsize_statiscs.get)
if REMOVE_FOOT_NOTE:
give_up_fize_threshold = main_fsize * REMOVE_FOOT_FFSIZE_PERCENT
############################## <第 3 步,切分和重新整合> ##################################
mega_sec = []
sec = []
for index, line in enumerate(meta_line):
if index == 0:
sec.append(line[fc])
continue
if REMOVE_FOOT_NOTE:
if meta_line[index][fs] <= give_up_fize_threshold:
continue
if ffsize_same(meta_line[index][fs], meta_line[index-1][fs]):
# 尝试识别段落
if meta_line[index][fc].endswith('.') and\
(meta_line[index-1][fc] != 'NEW_BLOCK') and \
(meta_line[index][fb][2] - meta_line[index][fb][0]) < (meta_line[index-1][fb][2] - meta_line[index-1][fb][0]) * 0.7:
sec[-1] += line[fc]
sec[-1] += "\n\n"
else:
sec[-1] += " "
sec[-1] += line[fc]
else:
if (index+1 < len(meta_line)) and \
meta_line[index][fs] > main_fsize:
# 单行 + 字体大
mega_sec.append(copy.deepcopy(sec))
sec = []
sec.append("# " + line[fc])
else:
# 尝试识别section
if meta_line[index-1][fs] > meta_line[index][fs]:
sec.append("\n" + line[fc])
else:
sec.append(line[fc])
mega_sec.append(copy.deepcopy(sec))
finals = []
for ms in mega_sec:
final = " ".join(ms)
final = final.replace('- ', ' ')
finals.append(final)
meta_txt = finals
############################## <第 4 步,乱七八糟的后处理> ##################################
def 把字符太少的块清除为回车(meta_txt):
for index, block_txt in enumerate(meta_txt):
if len(block_txt) < 100:
meta_txt[index] = '\n'
return meta_txt
meta_txt = 把字符太少的块清除为回车(meta_txt)
def 清理多余的空行(meta_txt):
for index in reversed(range(1, len(meta_txt))):
if meta_txt[index] == '\n' and meta_txt[index-1] == '\n':
meta_txt.pop(index)
return meta_txt
meta_txt = 清理多余的空行(meta_txt)
def 合并小写开头的段落块(meta_txt):
def starts_with_lowercase_word(s):
pattern = r"^[a-z]+"
match = re.match(pattern, s)
if match:
return True
else:
return False
for _ in range(100):
for index, block_txt in enumerate(meta_txt):
if starts_with_lowercase_word(block_txt):
if meta_txt[index-1] != '\n':
meta_txt[index-1] += ' '
else:
meta_txt[index-1] = ''
meta_txt[index-1] += meta_txt[index]
meta_txt[index] = '\n'
return meta_txt
meta_txt = 合并小写开头的段落块(meta_txt)
meta_txt = 清理多余的空行(meta_txt)
meta_txt = '\n'.join(meta_txt)
# 清除重复的换行
for _ in range(5):
meta_txt = meta_txt.replace('\n\n', '\n')
# 换行 -> 双换行
meta_txt = meta_txt.replace('\n', '\n\n')
############################## <第 5 步,展示分割效果> ##################################
for f in finals:
print亮黄(f)
print亮绿('***************************')
return meta_txt, page_one_meta

查看文件

@@ -49,7 +49,7 @@ def 全项目切换英文(txt, llm_kwargs, plugin_kwargs, chatbot, history, sys_
# 第4步随便显示点什么防止卡顿的感觉
for index, fp in enumerate(file_manifest):
# if 'test_project' in fp: continue
with open(fp, 'r', encoding='utf-8') as f:
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
i_say_show_user =f'[{index}/{len(file_manifest)}] 接下来请将以下代码中包含的所有中文转化为英文,只输出转化后的英文代码,请用代码块输出代码: {os.path.abspath(fp)}'
i_say_show_user_buffer.append(i_say_show_user)
@@ -62,7 +62,7 @@ def 全项目切换英文(txt, llm_kwargs, plugin_kwargs, chatbot, history, sys_
import tiktoken
from toolbox import get_conf
enc = tiktoken.encoding_for_model(*get_conf('LLM_MODEL'))
def get_token_fn(txt): return len(enc.encode(txt))
def get_token_fn(txt): return len(enc.encode(txt, disallowed_special=()))
# 第6步任务函数
@@ -72,7 +72,7 @@ def 全项目切换英文(txt, llm_kwargs, plugin_kwargs, chatbot, history, sys_
if index > 10:
time.sleep(60)
print('Openai 限制免费用户每分钟20次请求,降低请求频率中。')
with open(fp, 'r', encoding='utf-8') as f:
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
i_say_template = lambda fp, file_content: f'接下来请将以下代码中包含的所有中文转化为英文,只输出代码,文件名是{fp},文件代码是 ```{file_content}```'
try:

查看文件

@@ -0,0 +1,162 @@
from toolbox import update_ui
from toolbox import CatchException, report_execption, write_results_to_file
fast_debug = False
class PaperFileGroup():
def __init__(self):
self.file_paths = []
self.file_contents = []
self.sp_file_contents = []
self.sp_file_index = []
self.sp_file_tag = []
# count_token
import tiktoken
from toolbox import get_conf
enc = tiktoken.encoding_for_model(*get_conf('LLM_MODEL'))
def get_token_num(txt): return len(enc.encode(txt, disallowed_special=()))
self.get_token_num = get_token_num
def run_file_split(self, max_token_limit=1900):
"""
将长文本分离开来
"""
for index, file_content in enumerate(self.file_contents):
if self.get_token_num(file_content) < max_token_limit:
self.sp_file_contents.append(file_content)
self.sp_file_index.append(index)
self.sp_file_tag.append(self.file_paths[index])
else:
from .crazy_utils import breakdown_txt_to_satisfy_token_limit_for_pdf
segments = breakdown_txt_to_satisfy_token_limit_for_pdf(file_content, self.get_token_num, max_token_limit)
for j, segment in enumerate(segments):
self.sp_file_contents.append(segment)
self.sp_file_index.append(index)
self.sp_file_tag.append(self.file_paths[index] + f".part-{j}.md")
print('Segmentation: done')
def 多文件翻译(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, language='en'):
import time, os, re
from .crazy_utils import request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency
# <-------- 读取Markdown文件,删除其中的所有注释 ---------->
pfg = PaperFileGroup()
for index, fp in enumerate(file_manifest):
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
# 记录删除注释后的文本
pfg.file_paths.append(fp)
pfg.file_contents.append(file_content)
# <-------- 拆分过长的Markdown文件 ---------->
pfg.run_file_split(max_token_limit=2048)
n_split = len(pfg.sp_file_contents)
# <-------- 多线程润色开始 ---------->
if language == 'en->zh':
inputs_array = ["This is a Markdown file, translate it into Chinese, do not modify any existing Markdown commands:" +
f"\n\n{frag}" for frag in pfg.sp_file_contents]
inputs_show_user_array = [f"翻译 {f}" for f in pfg.sp_file_tag]
sys_prompt_array = ["You are a professional academic paper translator." for _ in range(n_split)]
elif language == 'zh->en':
inputs_array = [f"This is a Markdown file, translate it into English, do not modify any existing Markdown commands:" +
f"\n\n{frag}" for frag in pfg.sp_file_contents]
inputs_show_user_array = [f"翻译 {f}" for f in pfg.sp_file_tag]
sys_prompt_array = ["You are a professional academic paper translator." for _ in range(n_split)]
gpt_response_collection = yield from request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
inputs_array=inputs_array,
inputs_show_user_array=inputs_show_user_array,
llm_kwargs=llm_kwargs,
chatbot=chatbot,
history_array=[[""] for _ in range(n_split)],
sys_prompt_array=sys_prompt_array,
# max_workers=5, # OpenAI所允许的最大并行过载
scroller_max_len = 80
)
# <-------- 整理结果,退出 ---------->
create_report_file_name = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + f"-chatgpt.polish.md"
res = write_results_to_file(gpt_response_collection, file_name=create_report_file_name)
history = gpt_response_collection
chatbot.append((f"{fp}完成了吗?", res))
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
@CatchException
def Markdown英译中(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port):
# 基本信息:功能、贡献者
chatbot.append([
"函数插件功能?",
"对整个Markdown项目进行翻译。函数插件贡献者: Binary-Husky"])
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
# 尝试导入依赖,如果缺少依赖,则给出安装建议
try:
import tiktoken
except:
report_execption(chatbot, history,
a=f"解析项目: {txt}",
b=f"导入软件依赖失败。使用该模块需要额外依赖,安装方法```pip install --upgrade tiktoken```。")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
history = [] # 清空历史,以免输入溢出
import glob, os
if os.path.exists(txt):
project_folder = txt
else:
if txt == "": txt = '空空如也的输入栏'
report_execption(chatbot, history, a = f"解析项目: {txt}", b = f"找不到本地项目或无权访问: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
file_manifest = [f for f in glob.glob(f'{project_folder}/**/*.md', recursive=True)]
if len(file_manifest) == 0:
report_execption(chatbot, history, a = f"解析项目: {txt}", b = f"找不到任何.md文件: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
yield from 多文件翻译(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, language='en->zh')
@CatchException
def Markdown中译英(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port):
# 基本信息:功能、贡献者
chatbot.append([
"函数插件功能?",
"对整个Markdown项目进行翻译。函数插件贡献者: Binary-Husky"])
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
# 尝试导入依赖,如果缺少依赖,则给出安装建议
try:
import tiktoken
except:
report_execption(chatbot, history,
a=f"解析项目: {txt}",
b=f"导入软件依赖失败。使用该模块需要额外依赖,安装方法```pip install --upgrade tiktoken```。")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
history = [] # 清空历史,以免输入溢出
import glob, os
if os.path.exists(txt):
project_folder = txt
else:
if txt == "": txt = '空空如也的输入栏'
report_execption(chatbot, history, a = f"解析项目: {txt}", b = f"找不到本地项目或无权访问: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
if txt.endswith('.md'):
file_manifest = [txt]
else:
file_manifest = [f for f in glob.glob(f'{project_folder}/**/*.md', recursive=True)]
if len(file_manifest) == 0:
report_execption(chatbot, history, a = f"解析项目: {txt}", b = f"找不到任何.md文件: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
yield from 多文件翻译(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, language='zh->en')

查看文件

@@ -68,7 +68,7 @@ def 解析Paper(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbo
print('begin analysis on:', file_manifest)
for index, fp in enumerate(file_manifest):
if ".tex" in fp:
with open(fp, 'r', encoding='utf-8') as f:
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
if ".pdf" in fp.lower():
file_content = readPdf(fp)

查看文件

@@ -2,174 +2,9 @@ from toolbox import CatchException, report_execption, write_results_to_file
from toolbox import update_ui
from .crazy_utils import request_gpt_model_in_new_thread_with_ui_alive
from .crazy_utils import request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency
from .crazy_utils import read_and_clean_pdf_text
from colorful import *
def read_and_clean_pdf_text(fp):
"""
这个函数用于分割pdf,用了很多trick,逻辑较乱,效果奇好,不建议任何人去读这个函数
**输入参数说明**
- `fp`需要读取和清理文本的pdf文件路径
**输出参数说明**
- `meta_txt`:清理后的文本内容字符串
- `page_one_meta`:第一页清理后的文本内容列表
**函数功能**
读取pdf文件并清理其中的文本内容,清理规则包括
- 提取所有块元的文本信息,并合并为一个字符串
- 去除短块字符数小于100并替换为回车符
- 清理多余的空行
- 合并小写字母开头的段落块并替换为空格
- 清除重复的换行
- 将每个换行符替换为两个换行符,使每个段落之间有两个换行符分隔
"""
import fitz, copy
import re
import numpy as np
fc = 0
fs = 1
fb = 2
REMOVE_FOOT_NOTE = True
REMOVE_FOOT_FFSIZE_PERCENT = 0.95
def primary_ffsize(l):
fsize_statiscs = {}
for wtf in l['spans']:
if wtf['size'] not in fsize_statiscs: fsize_statiscs[wtf['size']] = 0
fsize_statiscs[wtf['size']] += len(wtf['text'])
return max(fsize_statiscs, key=fsize_statiscs.get)
def ffsize_same(a,b):
return abs((a-b)/max(a,b)) < 0.02
# file_content = ""
with fitz.open(fp) as doc:
meta_txt = []
meta_font = []
meta_line = []
meta_span = []
for index, page in enumerate(doc):
# file_content += page.get_text()
text_areas = page.get_text("dict") # 获取页面上的文本信息
for t in text_areas['blocks']:
if 'lines' in t:
pf = 998
for l in t['lines']:
txt_line = "".join([wtf['text'] for wtf in l['spans']])
pf = primary_ffsize(l)
meta_line.append([txt_line, pf, l['bbox'], l])
for wtf in l['spans']: # for l in t['lines']:
meta_span.append([wtf['text'], wtf['size'], len(wtf['text'])])
# meta_line.append(["NEW_BLOCK", pf])
# 块元提取 for each word segment with in line for each line cross-line words for each block
meta_txt.extend([" ".join(["".join([wtf['text'] for wtf in l['spans']]) for l in t['lines']]).replace(
'- ', '') for t in text_areas['blocks'] if 'lines' in t])
meta_font.extend([np.mean([np.mean([wtf['size'] for wtf in l['spans']])
for l in t['lines']]) for t in text_areas['blocks'] if 'lines' in t])
if index == 0:
page_one_meta = [" ".join(["".join([wtf['text'] for wtf in l['spans']]) for l in t['lines']]).replace(
'- ', '') for t in text_areas['blocks'] if 'lines' in t]
# 获取正文主字体
fsize_statiscs = {}
for span in meta_span:
if span[1] not in fsize_statiscs: fsize_statiscs[span[1]] = 0
fsize_statiscs[span[1]] += span[2]
main_fsize = max(fsize_statiscs, key=fsize_statiscs.get)
if REMOVE_FOOT_NOTE:
give_up_fize_threshold = main_fsize * REMOVE_FOOT_FFSIZE_PERCENT
# 切分和重新整合
mega_sec = []
sec = []
for index, line in enumerate(meta_line):
if index == 0:
sec.append(line[fc])
continue
if REMOVE_FOOT_NOTE:
if meta_line[index][fs] <= give_up_fize_threshold:
continue
if ffsize_same(meta_line[index][fs], meta_line[index-1][fs]):
# 尝试识别段落
if meta_line[index][fc].endswith('.') and\
(meta_line[index-1][fc] != 'NEW_BLOCK') and \
(meta_line[index][fb][2] - meta_line[index][fb][0]) < (meta_line[index-1][fb][2] - meta_line[index-1][fb][0]) * 0.7:
sec[-1] += line[fc]
sec[-1] += "\n\n"
else:
sec[-1] += " "
sec[-1] += line[fc]
else:
if (index+1 < len(meta_line)) and \
meta_line[index][fs] > main_fsize:
# 单行 + 字体大
mega_sec.append(copy.deepcopy(sec))
sec = []
sec.append("# " + line[fc])
else:
# 尝试识别section
if meta_line[index-1][fs] > meta_line[index][fs]:
sec.append("\n" + line[fc])
else:
sec.append(line[fc])
mega_sec.append(copy.deepcopy(sec))
finals = []
for ms in mega_sec:
final = " ".join(ms)
final = final.replace('- ', ' ')
finals.append(final)
meta_txt = finals
def 把字符太少的块清除为回车(meta_txt):
for index, block_txt in enumerate(meta_txt):
if len(block_txt) < 100:
meta_txt[index] = '\n'
return meta_txt
meta_txt = 把字符太少的块清除为回车(meta_txt)
def 清理多余的空行(meta_txt):
for index in reversed(range(1, len(meta_txt))):
if meta_txt[index] == '\n' and meta_txt[index-1] == '\n':
meta_txt.pop(index)
return meta_txt
meta_txt = 清理多余的空行(meta_txt)
def 合并小写开头的段落块(meta_txt):
def starts_with_lowercase_word(s):
pattern = r"^[a-z]+"
match = re.match(pattern, s)
if match:
return True
else:
return False
for _ in range(100):
for index, block_txt in enumerate(meta_txt):
if starts_with_lowercase_word(block_txt):
if meta_txt[index-1] != '\n':
meta_txt[index-1] += ' '
else:
meta_txt[index-1] = ''
meta_txt[index-1] += meta_txt[index]
meta_txt[index] = '\n'
return meta_txt
meta_txt = 合并小写开头的段落块(meta_txt)
meta_txt = 清理多余的空行(meta_txt)
meta_txt = '\n'.join(meta_txt)
# 清除重复的换行
for _ in range(5):
meta_txt = meta_txt.replace('\n\n', '\n')
# 换行 -> 双换行
meta_txt = meta_txt.replace('\n', '\n\n')
for f in finals:
print亮黄(f)
print亮绿('***************************')
return meta_txt, page_one_meta
@CatchException
def 批量翻译PDF文档(txt, llm_kwargs, plugin_kwargs, chatbot, history, sys_prompt, web_port):
import glob
@@ -235,7 +70,7 @@ def 解析PDF(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot,
from .crazy_utils import breakdown_txt_to_satisfy_token_limit_for_pdf
from toolbox import get_conf
enc = tiktoken.encoding_for_model(*get_conf('LLM_MODEL'))
def get_token_num(txt): return len(enc.encode(txt))
def get_token_num(txt): return len(enc.encode(txt, disallowed_special=()))
paper_fragments = breakdown_txt_to_satisfy_token_limit_for_pdf(
txt=file_content, get_token_fn=get_token_num, limit=TOKEN_LIMIT_PER_FRAGMENT)
page_one_fragments = breakdown_txt_to_satisfy_token_limit_for_pdf(
@@ -263,7 +98,7 @@ def 解析PDF(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot,
history_array=[[paper_meta] for _ in paper_fragments],
sys_prompt_array=[
"请你作为一个学术翻译,负责把学术论文的片段准确翻译成中文。" for _ in paper_fragments],
max_workers=16 # OpenAI所允许的最大并行过载
# max_workers=5 # OpenAI所允许的最大并行过载
)
# 整理报告的格式

查看文件

@@ -1,142 +1,68 @@
from toolbox import update_ui
from toolbox import CatchException, report_execption
import re
import unicodedata
from .crazy_utils import read_and_clean_pdf_text
from .crazy_utils import request_gpt_model_in_new_thread_with_ui_alive
fast_debug = False
def is_paragraph_break(match):
"""
根据给定的匹配结果来判断换行符是否表示段落分隔。
如果换行符前为句子结束标志(句号,感叹号,问号),且下一个字符为大写字母,则换行符更有可能表示段落分隔。
也可以根据之前的内容长度来判断段落是否已经足够长。
"""
prev_char, next_char = match.groups()
# 句子结束标志
sentence_endings = ".!?"
# 设定一个最小段落长度阈值
min_paragraph_length = 140
if prev_char in sentence_endings and next_char.isupper() and len(match.string[:match.start(1)]) > min_paragraph_length:
return "\n\n"
else:
return " "
def normalize_text(text):
"""
通过把连字ligatures等文本特殊符号转换为其基本形式来对文本进行归一化处理。
例如,将连字 "fi" 转换为 "f""i"
"""
# 对文本进行归一化处理,分解连字
normalized_text = unicodedata.normalize("NFKD", text)
# 替换其他特殊字符
cleaned_text = re.sub(r'[^\x00-\x7F]+', '', normalized_text)
return cleaned_text
def clean_text(raw_text):
"""
对从 PDF 提取出的原始文本进行清洗和格式化处理。
1. 对原始文本进行归一化处理。
2. 替换跨行的连词,例如 “Espe-\ncially” 转换为 “Especially”。
3. 根据 heuristic 规则判断换行符是否是段落分隔,并相应地进行替换。
"""
# 对文本进行归一化处理
normalized_text = normalize_text(raw_text)
# 替换跨行的连词
text = re.sub(r'(\w+-\n\w+)', lambda m: m.group(1).replace('-\n', ''), normalized_text)
# 根据前后相邻字符的特点,找到原文本中的换行符
newlines = re.compile(r'(\S)\n(\S)')
# 根据 heuristic 规则,用空格或段落分隔符替换原换行符
final_text = re.sub(newlines, lambda m: m.group(1) + is_paragraph_break(m) + m.group(2), text)
return final_text.strip()
def 解析PDF(file_name, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt):
import time, glob, os, fitz
import tiktoken
print('begin analysis on:', file_name)
with fitz.open(file_name) as doc:
file_content = ""
for page in doc:
file_content += page.get_text()
file_content = clean_text(file_content)
# print(file_content)
split_number = 10000
split_group = (len(file_content)//split_number)+1
for i in range(0,split_group):
if i==0:
prefix = "接下来请你仔细分析下面的论文,学习里面的内容(专业术语、公式、数学概念).并且注意:由于论文内容较多,将分批次发送,每次发送完之后,你只需要回答“接受完成”"
i_say = prefix + f'文件名是{file_name},文章内容第{i+1}部分是 ```{file_content[i*split_number:(i+1)*split_number]}```'
i_say_show_user = f'文件名是:\n{file_name},\n由于论文内容过长,将分批请求(共{len(file_content)}字符,将分为{split_group}批,每批{split_number}字符)。\n当前发送{i+1}/{split_group}部分'
elif i==split_group-1:
i_say = f'你只需要回答“所有论文接受完成,请进行下一步”。文章内容第{i+1}/{split_group}部分是 ```{file_content[i*split_number:]}```'
i_say_show_user = f'当前发送{i+1}/{split_group}部分'
else:
i_say = f'你只需要回答“接受完成”。文章内容第{i+1}/{split_group}部分是 ```{file_content[i*split_number:(i+1)*split_number]}```'
i_say_show_user = f'当前发送{i+1}/{split_group}部分'
chatbot.append((i_say_show_user, "[Local Message] waiting gpt response."))
gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive(i_say, i_say_show_user, llm_kwargs, chatbot, history=[], sys_prompt="") # 带超时倒计时
while "完成" not in gpt_say:
i_say = f'你只需要回答“接受完成”。文章内容第{i+1}/{split_group}部分是 ```{file_content[i*split_number:(i+1)*split_number]}```'
i_say_show_user = f'出现error,重新发送{i+1}/{split_group}部分'
gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive(i_say, i_say_show_user, llm_kwargs, chatbot, history=[], sys_prompt="") # 带超时倒计时
time.sleep(1)
chatbot[-1] = (i_say_show_user, gpt_say)
history.append(i_say_show_user); history.append(gpt_say)
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
time.sleep(2)
############################## <第 0 步,切割PDF> ##################################
# 递归地切割PDF文件,每一块尽量是完整的一个section,比如introduction,experiment等,必要时再进行切割
# 的长度必须小于 2500 个 Token
file_content, page_one = read_and_clean_pdf_text(file_name) # 尝试按照章节切割PDF
i_say = f'接下来,请你扮演一名专业的学术教授,利用你的所有知识并且结合这篇文章,回答我的问题。请牢记1.直到我说“退出”,你才能结束任务;2.所有问题需要紧密围绕文章内容;3.如果有公式,请使用tex渲染)'
chatbot.append((i_say, "[Local Message] waiting gpt response."))
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
TOKEN_LIMIT_PER_FRAGMENT = 2500
# ** gpt request **
gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive(i_say, i_say, llm_kwargs, chatbot, history=history, sys_prompt="") # 带超时倒计时
chatbot[-1] = (i_say, gpt_say)
history.append(i_say); history.append(gpt_say)
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
from .crazy_utils import breakdown_txt_to_satisfy_token_limit_for_pdf
from toolbox import get_conf
enc = tiktoken.encoding_for_model(*get_conf('LLM_MODEL'))
def get_token_num(txt): return len(enc.encode(txt, disallowed_special=()))
paper_fragments = breakdown_txt_to_satisfy_token_limit_for_pdf(
txt=file_content, get_token_fn=get_token_num, limit=TOKEN_LIMIT_PER_FRAGMENT)
page_one_fragments = breakdown_txt_to_satisfy_token_limit_for_pdf(
txt=str(page_one), get_token_fn=get_token_num, limit=TOKEN_LIMIT_PER_FRAGMENT//4)
# 为了更好的效果,我们剥离Introduction之后的部分如果有
paper_meta = page_one_fragments[0].split('introduction')[0].split('Introduction')[0].split('INTRODUCTION')[0]
############################## <第 1 步,从摘要中提取高价值信息,放到history中> ##################################
final_results = []
final_results.append(paper_meta)
############################## <第 2 步,迭代地历遍整个文章,提取精炼信息> ##################################
i_say_show_user = f'首先你在英文语境下通读整篇论文。'; gpt_say = "[Local Message] 收到。" # 用户提示
chatbot.append([i_say_show_user, gpt_say]); yield from update_ui(chatbot=chatbot, history=[]) # 更新UI
@CatchException
def 理解PDF文档内容(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port):
import glob, os
iteration_results = []
last_iteration_result = paper_meta # 初始值是摘要
MAX_WORD_TOTAL = 4096
n_fragment = len(paper_fragments)
if n_fragment >= 20: print('文章极长,不能达到预期效果')
for i in range(n_fragment):
NUM_OF_WORD = MAX_WORD_TOTAL // n_fragment
i_say = f"Read this section, recapitulate the content of this section with less than {NUM_OF_WORD} words: {paper_fragments[i]}"
i_say_show_user = f"[{i+1}/{n_fragment}] Read this section, recapitulate the content of this section with less than {NUM_OF_WORD} words: {paper_fragments[i][:200]}"
gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive(i_say, i_say_show_user, # i_say=真正给chatgpt的提问, i_say_show_user=给用户看的提问
llm_kwargs, chatbot,
history=["The main idea of the previous section is?", last_iteration_result], # 迭代上一次的结果
sys_prompt="Extract the main idea of this section." # 提示
)
iteration_results.append(gpt_say)
last_iteration_result = gpt_say
# 基本信息:功能、贡献者
chatbot.append([
"函数插件功能?",
"理解PDF论文内容,并且将结合上下文内容,进行学术解答。函数插件贡献者: Hanzoe。"])
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
txt = filedialog.askopenfilename()
# 尝试导入依赖,如果缺少依赖,则给出安装建议
try:
import fitz
except:
report_execption(chatbot, history,
a = f"解析项目: {txt}",
b = f"导入软件依赖失败。使用该模块需要额外依赖,安装方法```pip install --upgrade pymupdf```。")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
# 清空历史,以免输入溢出
history = []
# 开始正式执行任务
yield from 解析PDF(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt)
############################## <第 3 步,整理history> ##################################
final_results.extend(iteration_results)
final_results.append(f'接下来,你是一名专业的学术教授,利用以上信息,使用中文回答我的问题。')
# 接下来两句话只显示在界面上,不起实际作用
i_say_show_user = f'接下来,你是一名专业的学术教授,利用以上信息,使用中文回答我的问题。'; gpt_say = "[Local Message] 收到。"
chatbot.append([i_say_show_user, gpt_say])
############################## <第 4 步,设置一个token上限,防止回答时Token溢出> ##################################
from .crazy_utils import input_clipping
_, final_results = input_clipping("", final_results, max_token_limit=3200)
yield from update_ui(chatbot=chatbot, history=final_results) # 注意这里的历史记录被替代了
@CatchException
@@ -146,7 +72,7 @@ def 理解PDF文档内容标准文件输入(txt, llm_kwargs, plugin_kwargs, chat
# 基本信息:功能、贡献者
chatbot.append([
"函数插件功能?",
"理解PDF论文内容,并且将结合上下文内容,进行学术解答。函数插件贡献者: Hanzoe"])
"理解PDF论文内容,并且将结合上下文内容,进行学术解答。函数插件贡献者: Hanzoe, binary-husky"])
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
# 尝试导入依赖,如果缺少依赖,则给出安装建议

查看文件

@@ -7,7 +7,7 @@ def 生成函数注释(file_manifest, project_folder, llm_kwargs, plugin_kwargs,
import time, os
print('begin analysis on:', file_manifest)
for index, fp in enumerate(file_manifest):
with open(fp, 'r', encoding='utf-8') as f:
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
i_say = f'请对下面的程序文件做一个概述,并对文件中的所有函数生成注释,使用markdown表格输出结果,文件名是{os.path.relpath(fp, project_folder)},文件内容是 ```{file_content}```'

查看文件

@@ -11,10 +11,12 @@ def 解析源代码新(file_manifest, project_folder, llm_kwargs, plugin_kwargs,
history_array = []
sys_prompt_array = []
report_part_1 = []
assert len(file_manifest) <= 1024, "源文件太多超过1024个, 请缩减输入文件的数量。或者,您也可以选择删除此行警告,并修改代码拆分file_manifest列表,从而实现分批次处理。"
############################## <第一步,逐个文件分析,多线程> ##################################
for index, fp in enumerate(file_manifest):
with open(fp, 'r', encoding='utf-8') as f:
# 读取文件
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
prefix = "接下来请你逐文件分析下面的工程" if index==0 else ""
i_say = prefix + f'请对下面的程序文件做一个概述文件名是{os.path.relpath(fp, project_folder)},文件代码是 ```{file_content}```'
@@ -25,6 +27,7 @@ def 解析源代码新(file_manifest, project_folder, llm_kwargs, plugin_kwargs,
history_array.append([])
sys_prompt_array.append("你是一个程序架构分析师,正在分析一个源代码项目。你的回答必须简单明了。")
# 文件读取完成,对每一个源代码文件,生成一个请求线程,发送到chatgpt进行分析
gpt_response_collection = yield from request_gpt_model_multi_threads_with_very_awesome_ui_and_high_efficiency(
inputs_array = inputs_array,
inputs_show_user_array = inputs_show_user_array,
@@ -35,28 +38,13 @@ def 解析源代码新(file_manifest, project_folder, llm_kwargs, plugin_kwargs,
show_user_at_complete = True
)
# 全部文件解析完成,结果写入文件,准备对工程源代码进行汇总分析
report_part_1 = copy.deepcopy(gpt_response_collection)
history_to_return = report_part_1
res = write_results_to_file(report_part_1)
chatbot.append(("完成?", "逐个文件分析已完成。" + res + "\n\n正在开始汇总。"))
yield from update_ui(chatbot=chatbot, history=history_to_return) # 刷新界面
############################## <存储中间数据进行调试> ##################################
# def objdump(obj):
# import pickle
# with open('objdump.tmp', 'wb+') as f:
# pickle.dump(obj, f)
# return
# def objload():
# import pickle, os
# if not os.path.exists('objdump.tmp'):
# return
# with open('objdump.tmp', 'rb') as f:
# return pickle.load(f)
# objdump([report_part_1, gpt_response_collection, history_to_return, file_manifest, project_folder, fp, llm_kwargs, chatbot])
############################## <第二步,综合,单线程,分组+迭代处理> ##################################
batchsize = 16 # 10个文件为一组
report_part_2 = []
@@ -225,9 +213,34 @@ def 解析一个Golang项目(txt, llm_kwargs, plugin_kwargs, chatbot, history, s
report_execption(chatbot, history, a=f"解析项目: {txt}", b=f"找不到本地项目或无权访问: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
file_manifest = [f for f in glob.glob(f'{project_folder}/**/*.go', recursive=True)]
file_manifest = [f for f in glob.glob(f'{project_folder}/**/*.go', recursive=True)] + \
[f for f in glob.glob(f'{project_folder}/**/go.mod', recursive=True)] + \
[f for f in glob.glob(f'{project_folder}/**/go.sum', recursive=True)] + \
[f for f in glob.glob(f'{project_folder}/**/go.work', recursive=True)]
if len(file_manifest) == 0:
report_execption(chatbot, history, a=f"解析项目: {txt}", b=f"找不到任何golang文件: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
yield from 解析源代码新(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt)
@CatchException
def 解析一个Lua项目(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port):
history = [] # 清空历史,以免输入溢出
import glob, os
if os.path.exists(txt):
project_folder = txt
else:
if txt == "": txt = '空空如也的输入栏'
report_execption(chatbot, history, a = f"解析项目: {txt}", b = f"找不到本地项目或无权访问: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
file_manifest = [f for f in glob.glob(f'{project_folder}/**/*.lua', recursive=True)] + \
[f for f in glob.glob(f'{project_folder}/**/*.xml', recursive=True)] + \
[f for f in glob.glob(f'{project_folder}/**/*.json', recursive=True)] + \
[f for f in glob.glob(f'{project_folder}/**/*.toml', recursive=True)]
if len(file_manifest) == 0:
report_execption(chatbot, history, a = f"解析项目: {txt}", b = f"找不到任何lua文件: {txt}")
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
return
yield from 解析源代码新(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt)

查看文件

@@ -8,7 +8,7 @@ def 解析Paper(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbo
import time, glob, os
print('begin analysis on:', file_manifest)
for index, fp in enumerate(file_manifest):
with open(fp, 'r', encoding='utf-8') as f:
with open(fp, 'r', encoding='utf-8', errors='replace') as f:
file_content = f.read()
prefix = "接下来请你逐文件分析下面的论文文件,概括其内容" if index==0 else ""

查看文件

@@ -6,7 +6,7 @@ def 高阶功能模板函数(txt, llm_kwargs, plugin_kwargs, chatbot, history, s
"""
txt 输入栏用户输入的文本,例如需要翻译的一段话,再例如一个包含了待处理文件的路径
llm_kwargs gpt模型参数,如温度和top_p等,一般原样传递下去就行
plugin_kwargs 插件模型的参数,如温度和top_p等,一般原样传递下去就行
plugin_kwargs 插件模型的参数,暂时没有用武之地
chatbot 聊天显示框的句柄,用于显示给用户
history 聊天历史,前情提要
system_prompt 给gpt的静默提醒
@@ -26,4 +26,4 @@ def 高阶功能模板函数(txt, llm_kwargs, plugin_kwargs, chatbot, history, s
)
chatbot[-1] = (i_say, gpt_say)
history.append(i_say);history.append(gpt_say)
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 # 界面更新
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 # 界面更新

294
img/README_EN.md 普通文件
查看文件

@@ -0,0 +1,294 @@
# ChatGPT Academic Optimization
> **Note**
>
> This English readme is automatically generated by the markdown translation plugin in this project, and may not be 100% correct.
>
**If you like this project, please give it a star. If you have come up with more useful academic shortcuts or functional plugins, feel free to open an issue or pull request (to the `dev` branch).**
> **Note**
>
> 1. Please note that only function plugins (buttons) marked in **red** support reading files, and some plugins are located in the **dropdown menu** in the plugin area. Additionally, we welcome and process PRs for any new plugins with the **highest priority**!
>
> 2. The functions of each file in this project are detailed in the self-translation report [self_analysis.md](https://github.com/binary-husky/chatgpt_academic/wiki/chatgpt-academic%E9%A1%B9%E7%9B%AE%E8%87%AA%E8%AF%91%E8%A7%A3%E6%8A%A5%E5%91%8A). With the version iteration, you can click on a relevant function plugin at any time to call GPT to regenerate the self-analysis report for the project. Commonly asked questions are summarized in the [`wiki`](https://github.com/binary-husky/chatgpt_academic/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98).
>
> 3. If you are not used to the function, comments or interface with some Chinese names, you can click on the relevant function plugin at any time to call ChatGPT to generate the source code of the project in English.
<div align="center">
Function | Description
--- | ---
One-click refinement | Supports one-click refinement, one-click searching for grammatical errors in papers.
One-click translation between Chinese and English | One-click translation between Chinese and English.
One-click code interpretation | Can correctly display and interpret the code.
[Custom shortcuts](https://www.bilibili.com/video/BV14s4y1E7jN) | Supports custom shortcuts.
[Configure proxy server](https://www.bilibili.com/video/BV1rc411W7Dr) | Supports configuring proxy server.
Modular design | Supports custom high-order experimental features and [function plug-ins], and plug-ins support [hot update](https://github.com/binary-husky/chatgpt_academic/wiki/%E5%87%BD%E6%95%B0%E6%8F%92%E4%BB%B6%E6%8C%87%E5%8D%97).
[Self-program analysis](https://www.bilibili.com/video/BV1cj411A7VW) | [Function Plug-in] [One-Key Understanding](https://github.com/binary-husky/chatgpt_academic/wiki/chatgpt-academic%E9%A1%B9%E7%9B%AE%E8%87%AA%E8%AF%91%E8%A7%A3%E6%8A%A5%E5%91%8A) the source code of this project.
[Program analysis](https://www.bilibili.com/video/BV1cj411A7VW) | [Function Plug-in] One-click can analyze other Python/C/C++/Java/Golang/Lua/Rect project trees.
Read papers | [Function Plug-in] One-click reads the full text of a latex paper and generates an abstract.
Latex full-text translation/refinement | [Function Plug-in] One-click translates or refines a latex paper.
Batch annotation generation | [Function Plug-in] One-click generates function annotations in batches.
Chat analysis report generation | [Function Plug-in] Automatically generate summary reports after running.
[Arxiv assistant](https://www.bilibili.com/video/BV1LM4y1279X) | [Function Plug-in] Enter the arxiv paper url and you can translate the abstract and download the PDF with one click.
[PDF paper full-text translation function](https://www.bilibili.com/video/BV1KT411x7Wn) | [Function Plug-in] Extract title and abstract of PDF papers + translate full text (multi-threaded).
[Google Scholar integration assistant](https://www.bilibili.com/video/BV19L411U7ia) (Version>=2.45) | [Function Plug-in] Given any Google Scholar search page URL, let GPT help you choose interesting articles.
Formula display | Can simultaneously display the tex form and rendering form of formulas.
Image display | Can display images in Markdown.
Multithreaded function plug-in support | Supports multi-threaded calling of chatgpt, one-click processing of massive texts or programs.
Support for markdown tables output by GPT | Can output markdown tables that support GPT.
Start dark gradio theme [theme](https://github.com/binary-husky/chatgpt_academic/issues/173) | Add ```/?__dark-theme=true``` to the browser URL to switch to the dark theme.
Huggingface free scientific online experience](https://huggingface.co/spaces/qingxu98/gpt-academic) | After logging in to Huggingface, copy [this space](https://huggingface.co/spaces/qingxu98/gpt-academic).
[Mixed support for multiple LLM models](https://www.bilibili.com/video/BV1EM411K7VH/) ([v3.0 branch](https://github.com/binary-husky/chatgpt_academic/tree/v3.0) in testing) | It must feel great to be served by both ChatGPT and [Tsinghua ChatGLM](https://github.com/THUDM/ChatGLM-6B)!
Compatible with [TGUI](https://github.com/oobabooga/text-generation-webui) to access more language models | Access to opt-1.3b, galactica-1.3b and other models ([v3.0 branch](https://github.com/binary-husky/chatgpt_academic/tree/v3.0) under testing).
… | ...
</div>
<!-- - New interface (left: master branch, right: dev development frontier) -->
- New interface (modify the `LAYOUT` option in `config.py` to switch between "left and right layout" and "up and down layout").
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/230361456-61078362-a966-4eb5-b49e-3c62ef18b860.gif" width="700" >
</div>
- All buttons are dynamically generated by reading `functional.py`, and custom functions can be added freely, freeing up the clipboard.
<div align="center">
<img src="公式.gif" width="700" >
</div>
- Refinement/Correction
<div align="center">
<img src="润色.gif" width="700" >
</div>
- Supports markdown tables output by GPT.
<div align="center">
<img src="demo2.jpg" width="500" >
</div>
- If the output contains formulas, both the tex form and the rendering form are displayed simultaneously for easy copying and reading.
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/230598842-1d7fcddd-815d-40ee-af60-baf488a199df.png" width="700" >
</div>
- Don't want to read project code? Let chatgpt boast about the whole project.
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226935232-6b6a73ce-8900-4aee-93f9-733c7e6fef53.png" width="700" >
</div>
- Multiple large language models mixed calling. ([v3.0 branch](https://github.com/binary-husky/chatgpt_academic/tree/v3.0) in testing)
## Running Directly (Windows, Linux or MacOS)
### 1. Download the Project
```sh
git clone https://github.com/binary-husky/chatgpt_academic.git
cd chatgpt_academic
```
### 2. Configure API_KEY and Proxy Settings
In `config.py`, configure the overseas Proxy and OpenAI API KEY, as follows:
```
1. If you are in China, you need to set an overseas proxy to use the OpenAI API smoothly. Please read the instructions in config.py carefully (1. Modify the USE_PROXY to True; 2. Modify the proxies according to the instructions).
2. Configure OpenAI API KEY. You need to register on the OpenAI official website and obtain an API KEY. Once you get the API KEY, configure it in the config.py file.
3. Issues related to proxy network (network timeout, proxy not working) are summarized to https://github.com/binary-husky/chatgpt_academic/issues/1
```
(Note: When the program is running, it will first check whether there is a private configuration file named `config_private.py`, and use the configuration in it to overwrite the same name configuration in `config.py`. Therefore, if you can understand our configuration reading logic, we strongly recommend that you create a new configuration file next to `config.py` named `config_private.py` and transfer (copy) the configuration in `config.py` to `config_private.py`. `config_private.py` is not managed by Git, which can make your privacy information more secure.)
### 3. Install Dependencies
```sh
# (Option 1) Recommended
python -m pip install -r requirements.txt
# (Option 2) If you use anaconda, the steps are also similar:
# (Option 2.1) conda create -n gptac_venv python=3.11
# (Option 2.2) conda activate gptac_venv
# (Option 2.3) python -m pip install -r requirements.txt
# Note: Use the official pip source or the Ali pip source. Other pip sources (such as some university pips) may have problems. Temporary substitution method:
# python -m pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
```
### 4. Run
```sh
python main.py
```
### 5. Test Experimental Features
```
- Test C++ Project Header Analysis
In the input area, enter `./crazy_functions/test_project/cpp/libJPG` , and then click "[Experiment] Parse the entire C++ project (input inputs the root path of the project)"
- Test Writing Abstracts for Latex Projects
In the input area, enter `./crazy_functions/test_project/latex/attention` , and then click "[Experiment] Read the tex paper and write an abstract (input inputs the root path of the project)"
- Test Python Project Analysis
In the input area, enter `./crazy_functions/test_project/python/dqn` , and then click "[Experiment] Parse the entire py project (input inputs the root path of the project)"
- Test Self-code Interpretation
Click "[Experiment] Please analyze and deconstruct this project itself"
- Test Experimental Function Template (asking GPT what happened in history today), you can implement more complex functions based on this template function
Click "[Experiment] Experimental function template"
```
## Use Docker (Linux)
``` sh
# Download Project
git clone https://github.com/binary-husky/chatgpt_academic.git
cd chatgpt_academic
# Configure Overseas Proxy and OpenAI API KEY
Configure config.py with any text editor
# Installation
docker build -t gpt-academic .
# Run
docker run --rm -it --net=host gpt-academic
# Test Experimental Features
## Test Self-code Interpretation
Click "[Experiment] Please analyze and deconstruct this project itself"
## Test Experimental Function Template (asking GPT what happened in history today), you can implement more complex functions based on this template function
Click "[Experiment] Experimental function template"
## (Please note that when running in docker, you need to pay extra attention to file access rights issues of the program.)
## Test C++ Project Header Analysis
In the input area, enter ./crazy_functions/test_project/cpp/libJPG , and then click "[Experiment] Parse the entire C++ project (input inputs the root path of the project)"
## Test Writing Abstracts for Latex Projects
In the input area, enter ./crazy_functions/test_project/latex/attention , and then click "[Experiment] Read the tex paper and write an abstract (input inputs the root path of the project)"
## Test Python Project Analysis
In the input area, enter ./crazy_functions/test_project/python/dqn , and then click "[Experiment] Parse the entire py project (input inputs the root path of the project)"
```
## Other Deployment Methods
- Use WSL2 (Windows Subsystem for Linux subsystem)
Please visit [Deploy Wiki-1] (https://github.com/binary-husky/chatgpt_academic/wiki/%E4%BD%BF%E7%94%A8WSL2%EF%BC%88Windows-Subsystem-for-Linux-%E5%AD%90%E7%B3%BB%E7%BB%9F%EF%BC%89%E9%83%A8%E7%BD%B2)
- nginx remote deployment
Please visit [Deploy Wiki-2] (https://github.com/binary-husky/chatgpt_academic/wiki/%E8%BF%9C%E7%A8%8B%E9%83%A8%E7%BD%B2%E7%9A%84%E6%8C%87%E5%AF%BC)
## Customizing New Convenient Buttons (Academic Shortcut Key Customization)
Open functional.py and add the entry as follows, and then restart the program. (If the button has been successfully added and is visible, both the prefix and suffix support hot modification and take effect without restarting the program.)
For example,
```
"Super English to Chinese Translation": {
# Prefix, which will be added before your input. For example, it is used to describe your requirements, such as translation, code interpretation, polishing, etc.
"Prefix": "Please translate the following content into Chinese, and then use a markdown table to explain each proprietary term in the text:\n\n",
# Suffix, which will be added after your input. For example, in conjunction with the prefix, you can bracket your input in quotes.
"Suffix": "",
},
```
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226899272-477c2134-ed71-4326-810c-29891fe4a508.png" width="500" >
</div>
If you invent a more user-friendly academic shortcut key, welcome to post an issue or pull request!
## Configure Proxy
### Method 1: General Method
Modify the port and proxy software corresponding in ```config.py```
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226571294-37a47cd9-4d40-4c16-97a2-d360845406f7.png" width="500" >
<img src="https://user-images.githubusercontent.com/96192199/226838985-e5c95956-69c2-4c23-a4dd-cd7944eeb451.png" width="500" >
</div>
After configuring, you can use the following command to test whether the proxy works. If everything is normal, the code below will output the location of your proxy server:
```
python check_proxy.py
```
### Method Two: Pure Beginner Tutorial
[Pure Beginner Tutorial](https://github.com/binary-husky/chatgpt_academic/wiki/%E4%BB%A3%E7%90%86%E8%BD%AF%E4%BB%B6%E9%97%AE%E9%A2%98%E7%9A%84%E6%96%B0%E6%89%8B%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%EF%BC%88%E6%96%B9%E6%B3%95%E5%8F%AA%E9%80%82%E7%94%A8%E4%BA%8E%E6%96%B0%E6%89%8B%EF%BC%89)
## Compatibility Testing
### Image Display:
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/228737599-bf0a9d9c-1808-4f43-ae15-dfcc7af0f295.png" width="800" >
</div>
### If the program can read and analyze itself:
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226936850-c77d7183-0749-4c1c-9875-fd4891842d0c.png" width="800" >
</div>
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226936618-9b487e4b-ab5b-4b6e-84c6-16942102e917.png" width="800" >
</div>
### Any other Python/Cpp project analysis:
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226935232-6b6a73ce-8900-4aee-93f9-733c7e6fef53.png" width="800" >
</div>
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/226969067-968a27c1-1b9c-486b-8b81-ab2de8d3f88a.png" width="800" >
</div>
### Latex paper reading comprehension and abstract generation with one click
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/227504406-86ab97cd-f208-41c3-8e4a-7000e51cf980.png" width="800" >
</div>
### Automatic Report Generation
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/227503770-fe29ce2c-53fd-47b0-b0ff-93805f0c2ff4.png" height="300" >
<img src="https://user-images.githubusercontent.com/96192199/227504617-7a497bb3-0a2a-4b50-9a8a-95ae60ea7afd.png" height="300" >
<img src="https://user-images.githubusercontent.com/96192199/227504005-efeaefe0-b687-49d0-bf95-2d7b7e66c348.png" height="300" >
</div>
### Modular Function Design
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/229288270-093643c1-0018-487a-81e6-1d7809b6e90f.png" height="400" >
<img src="https://user-images.githubusercontent.com/96192199/227504931-19955f78-45cd-4d1c-adac-e71e50957915.png" height="400" >
</div>
### Translating source code to English
<div align="center">
<img src="https://user-images.githubusercontent.com/96192199/229720562-fe6c3508-6142-4635-a83d-21eb3669baee.png" height="400" >
</div>
## Todo and Version Planning:
- version 3 (Todo):
- - Support for gpt4 and other llm
- version 2.4+ (Todo):
- - Summary of long text and token overflow problems in large project source code
- - Implementation of project packaging and deployment
- - Function plugin parameter interface optimization
- - Self-updating
- version 2.4: (1) Added PDF full-text translation function; (2) Added input area switching function; (3) Added vertical layout option; (4) Optimized multi-threaded function plugin.
- version 2.3: Enhanced multi-threaded interactivity
- version 2.2: Function plug-in supports hot reloading
- version 2.1: Collapsible layout
- version 2.0: Introduction of modular function plugins
- version 1.0: Basic functions
## References and Learning
```
The code refers to the design of many other excellent projects, mainly including:
# Reference Project 1: Referenced the method of reading OpenAI json, recording historical inquiry records, and using gradio queue in ChuanhuChatGPT
https://github.com/GaiZhenbiao/ChuanhuChatGPT
# Reference Project 2:
https://github.com/THUDM/ChatGLM-6B
```

二进制
img/公式.gif

二进制文件未显示。

之前

宽度:  |  高度:  |  大小: 11 MiB

二进制
img/润色.gif

二进制文件未显示。

之前

宽度:  |  高度:  |  大小: 12 MiB

二进制
objdump.tmp

二进制文件未显示。

查看文件

@@ -1,4 +1,4 @@
# 如何使用其他大语言模型(dev分支测试中)
# 如何使用其他大语言模型(v3.0分支测试中)
## 1. 先运行text-generation
``` sh

查看文件

@@ -96,7 +96,7 @@ def predict_no_ui_long_connection(inputs, llm_kwargs, history=[], sys_prompt="",
# 看门狗,如果超过期限没有喂狗,则终止
if len(observe_window) >= 2:
if (time.time()-observe_window[1]) > watch_dog_patience:
raise RuntimeError("程序终止")
raise RuntimeError("用户取消了程序。")
else: raise RuntimeError("意外Json结构"+delta)
if json_data['finish_reason'] == 'length':
raise ConnectionAbortedError("正常结束,但显示Token不足,导致输出不完整,请削减单次输入的文本量。")

查看文件

@@ -1,4 +1,5 @@
gradio>=3.23
gradio>=3.25.0
tiktoken>=0.3.3
requests[socks]
transformers
python-markdown-math
@@ -7,10 +8,9 @@ latex2mathml
python-docx
mdtex2html
colorama
tiktoken
Markdown
pygments
pymupdf
openai
numpy
arxiv
arxiv

查看文件

@@ -1,5 +1,5 @@
{
"version": 2.67,
"version": 2.68,
"show_feature": true,
"new_feature": "现可通过输入区更新临时api-key <-> 增强多线程稳定性涉及代码解析、PDF翻译、自译解等 <-> 修复Token计数错误解决PDF翻译的分割不合理的问题 <-> 如果一键更新失败,可前往github手动更新"
"new_feature": "改善理解pdfchatpdf功能 <-> 修复读取罕见字符的BUG <-> 如果一键更新失败,可前往github手动更新"
}