diff --git a/.github/workflows/build-image.yaml b/.github/workflows/build-image.yaml new file mode 100644 index 0000000..c1ea445 --- /dev/null +++ b/.github/workflows/build-image.yaml @@ -0,0 +1,38 @@ +name: Build Image + + +on: + workflow_dispatch: + inputs: + release_tag: + description: 'Tag for the images' + required: true + +env: + REGISTRY: registry.cn-hongkong.aliyuncs.com + NAMESPACE: chatwithpaper + IMAGE: academic + TAG: ${{ github.event.inputs.release_tag || github.event.client_payload.release_tag }} + +jobs: + build: + runs-on: ubuntu-latest + environment: production + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Login to Registry + uses: docker/login-action@v2.1.0 + with: + registry: "${{ env.REGISTRY }}" + username: "${{ secrets.ACR_USER }}" + password: "${{ secrets.ACR_PASSWORD }}" + + - name: Build and push image + uses: docker/build-push-action@v4 + with: + context: . + file: docs/Dockerfile+NoLocal+Latex + tags: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE }}:${{ env.TAG }} + push: true diff --git a/.github/workflows/build-with-chatglm.yml b/.github/workflows/build-with-chatglm.yml deleted file mode 100644 index f968bb9..0000000 --- a/.github/workflows/build-with-chatglm.yml +++ /dev/null @@ -1,44 +0,0 @@ -# https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#publishing-images-to-github-packages -name: Create and publish a Docker image for ChatGLM support - -on: - push: - branches: - - 'master' - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }}_chatglm_moss - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v2 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - - name: Build and push Docker image - uses: docker/build-push-action@v4 - with: - context: . - push: true - file: docs/GithubAction+ChatGLM+Moss - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/build-with-jittorllms.yml b/.github/workflows/build-with-jittorllms.yml deleted file mode 100644 index c0ce126..0000000 --- a/.github/workflows/build-with-jittorllms.yml +++ /dev/null @@ -1,44 +0,0 @@ -# https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#publishing-images-to-github-packages -name: Create and publish a Docker image for ChatGLM support - -on: - push: - branches: - - 'master' - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }}_jittorllms - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v2 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - - name: Build and push Docker image - uses: docker/build-push-action@v4 - with: - context: . - push: true - file: docs/GithubAction+JittorLLMs - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/build-without-local-llms.yml b/.github/workflows/build-without-local-llms.yml deleted file mode 100644 index b0aed7f..0000000 --- a/.github/workflows/build-without-local-llms.yml +++ /dev/null @@ -1,44 +0,0 @@ -# https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#publishing-images-to-github-packages -name: Create and publish a Docker image - -on: - push: - branches: - - 'master' - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }}_nolocal - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Log in to the Container registry - uses: docker/login-action@v2 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - - name: Build and push Docker image - uses: docker/build-push-action@v4 - with: - context: . - push: true - file: docs/GithubAction+NoLocal - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/crazy_functional.py b/crazy_functional.py index 03aaaf5..4c14c52 100644 --- a/crazy_functional.py +++ b/crazy_functional.py @@ -26,6 +26,7 @@ def get_crazy_functions(): from crazy_functions.对话历史存档 import 删除所有本地对话历史记录 from crazy_functions.批量Markdown翻译 import Markdown英译中 + function_plugins = { "解析整个Python项目": { "Color": "stop", # 按钮颜色 @@ -108,10 +109,10 @@ def get_crazy_functions(): "保存当前的对话": { "Function": HotReload(对话历史存档) }, - "[多线程Demo] 解析此项目本身(源码自译解)": { - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析项目本身) - }, + # "[多线程Demo] 解析此项目本身(源码自译解)": { + # "AsButton": False, # 加入下拉菜单中 + # "Function": HotReload(解析项目本身) + # }, # "[老旧的Demo] 把本项目源代码切换成全英文": { # # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 # "AsButton": False, # 加入下拉菜单中 @@ -137,15 +138,15 @@ def get_crazy_functions(): from crazy_functions.批量Markdown翻译 import Markdown中译英 function_plugins.update({ - "批量翻译PDF文档(多线程)": { + "本地PDF全文翻译": { "Color": "stop", "AsButton": True, # 加入下拉菜单中 "Function": HotReload(批量翻译PDF文档) }, - "询问多个GPT模型": { - "Color": "stop", # 按钮颜色 - "Function": HotReload(同时问询) - }, + # "询问多个GPT模型": { + # "Color": "stop", # 按钮颜色 + # "Function": HotReload(同时问询) + # }, "[测试功能] 批量总结PDF文档": { "Color": "stop", "AsButton": False, # 加入下拉菜单中 @@ -222,54 +223,57 @@ def get_crazy_functions(): }) except: print('Load function plugin failed') + from crazy_functions.Latex输出PDF结果 import Latex翻译中文并重新编译PDF + function_plugins.update({ + "ArXiv Latex一键翻译(输入arXiv ID)": { + "Color": "stop", + "AsButton": True, + "AdvancedArgs": True, + "ArgsReminder": + "如果有必要, 请在此处给出自定义翻译命令, 解决部分词汇翻译不准确的问题。 "+ + "例如当单词'agent'翻译不准确时, 请尝试把以下指令复制到高级参数区: " + 'If the term "agent" is used in this section, it should be translated to "智能体". ', + "Function": HotReload(Latex翻译中文并重新编译PDF) + } + }) + # try: + # from crazy_functions.联网的ChatGPT import 连接网络回答问题 + # function_plugins.update({ + # "连接网络回答问题(先输入问题,再点击按钮,需要访问谷歌)": { + # "Color": "stop", + # "AsButton": False, # 加入下拉菜单中 + # "Function": HotReload(连接网络回答问题) + # } + # }) + # except: + # print('Load function plugin failed') - try: - from crazy_functions.联网的ChatGPT import 连接网络回答问题 - function_plugins.update({ - "连接网络回答问题(输入问题后点击该插件,需要访问谷歌)": { - "Color": "stop", - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(连接网络回答问题) - } - }) - from crazy_functions.联网的ChatGPT_bing版 import 连接bing搜索回答问题 - function_plugins.update({ - "连接网络回答问题(中文Bing版,输入问题后点击该插件)": { - "Color": "stop", - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(连接bing搜索回答问题) - } - }) - except: - print('Load function plugin failed') + # try: + # from crazy_functions.解析项目源代码 import 解析任意code项目 + # function_plugins.update({ + # "解析项目源代码(手动指定和筛选源代码文件类型)": { + # "Color": "stop", + # "AsButton": False, + # "AdvancedArgs": True, # 调用时,唤起高级参数输入区(默认False) + # "ArgsReminder": "输入时用逗号隔开, *代表通配符, 加了^代表不匹配; 不输入代表全部匹配。例如: \"*.c, ^*.cpp, config.toml, ^*.toml\"", # 高级参数输入区的显示提示 + # "Function": HotReload(解析任意code项目) + # }, + # }) + # except: + # print('Load function plugin failed') - try: - from crazy_functions.解析项目源代码 import 解析任意code项目 - function_plugins.update({ - "解析项目源代码(手动指定和筛选源代码文件类型)": { - "Color": "stop", - "AsButton": False, - "AdvancedArgs": True, # 调用时,唤起高级参数输入区(默认False) - "ArgsReminder": "输入时用逗号隔开, *代表通配符, 加了^代表不匹配; 不输入代表全部匹配。例如: \"*.c, ^*.cpp, config.toml, ^*.toml\"", # 高级参数输入区的显示提示 - "Function": HotReload(解析任意code项目) - }, - }) - except: - print('Load function plugin failed') - - try: - from crazy_functions.询问多个大语言模型 import 同时问询_指定模型 - function_plugins.update({ - "询问多个GPT模型(手动指定询问哪些模型)": { - "Color": "stop", - "AsButton": False, - "AdvancedArgs": True, # 调用时,唤起高级参数输入区(默认False) - "ArgsReminder": "支持任意数量的llm接口,用&符号分隔。例如chatglm&gpt-3.5-turbo&api2d-gpt-4", # 高级参数输入区的显示提示 - "Function": HotReload(同时问询_指定模型) - }, - }) - except: - print('Load function plugin failed') + # try: + # from crazy_functions.询问多个大语言模型 import 同时问询_指定模型 + # function_plugins.update({ + # "询问多个GPT模型(手动指定询问哪些模型)": { + # "Color": "stop", + # "AsButton": False, + # "AdvancedArgs": True, # 调用时,唤起高级参数输入区(默认False) + # "ArgsReminder": "支持任意数量的llm接口,用&符号分隔。例如chatglm&gpt-3.5-turbo&api2d-gpt-4", # 高级参数输入区的显示提示 + # "Function": HotReload(同时问询_指定模型) + # }, + # }) + # except: + # print('Load function plugin failed') try: from crazy_functions.图片生成 import 图片生成 @@ -364,29 +368,18 @@ def get_crazy_functions(): "Function": HotReload(Latex英文纠错加PDF对比) } }) - from crazy_functions.Latex输出PDF结果 import Latex翻译中文并重新编译PDF - function_plugins.update({ - "Arixv翻译(输入arxivID)[需Latex]": { - "Color": "stop", - "AsButton": False, - "AdvancedArgs": True, - "ArgsReminder": - "如果有必要, 请在此处给出自定义翻译命令, 解决部分词汇翻译不准确的问题。 "+ - "例如当单词'agent'翻译不准确时, 请尝试把以下指令复制到高级参数区: " + 'If the term "agent" is used in this section, it should be translated to "智能体". ', - "Function": HotReload(Latex翻译中文并重新编译PDF) - } - }) - function_plugins.update({ - "本地论文翻译(上传Latex压缩包)[需Latex]": { - "Color": "stop", - "AsButton": False, - "AdvancedArgs": True, - "ArgsReminder": - "如果有必要, 请在此处给出自定义翻译命令, 解决部分词汇翻译不准确的问题。 "+ - "例如当单词'agent'翻译不准确时, 请尝试把以下指令复制到高级参数区: " + 'If the term "agent" is used in this section, it should be translated to "智能体". ', - "Function": HotReload(Latex翻译中文并重新编译PDF) - } - }) + + # function_plugins.update({ + # "本地论文翻译(上传Latex压缩包) [需Latex]": { + # "Color": "stop", + # "AsButton": False, + # "AdvancedArgs": True, + # "ArgsReminder": + # "如果有必要, 请在此处给出自定义翻译命令, 解决部分词汇翻译不准确的问题。 "+ + # "例如当单词'agent'翻译不准确时, 请尝试把以下指令复制到高级参数区: " + 'If the term "agent" is used in this section, it should be translated to "智能体". ', + # "Function": HotReload(Latex翻译中文并重新编译PDF) + # } + # }) except: print('Load function plugin failed') @@ -404,4 +397,18 @@ def get_crazy_functions(): # except: # print('Load function plugin failed') + # try: + # from crazy_functions.虚空终端 import 终端 + # function_plugins.update({ + # "超级终端": { + # "Color": "stop", + # "AsButton": False, + # # "AdvancedArgs": True, + # # "ArgsReminder": "", + # "Function": HotReload(终端) + # } + # }) + # except: + # print('Load function plugin failed') + return function_plugins diff --git a/crazy_functions/Latex输出PDF结果.py b/crazy_functions/Latex输出PDF结果.py index 810d802..adc80f3 100644 --- a/crazy_functions/Latex输出PDF结果.py +++ b/crazy_functions/Latex输出PDF结果.py @@ -3,7 +3,9 @@ from toolbox import CatchException, report_execption, update_ui_lastest_msg, zip from functools import partial import glob, os, requests, time pj = os.path.join -ARXIV_CACHE_DIR = os.path.expanduser(f"~/arxiv_cache/") +# ARXIV_CACHE_DIR = os.path.expanduser(f"~/arxiv_cache/") +# ARXIV_CACHE_DIR = os.path.expanduser(f"~/arxiv_cache/") +ARXIV_CACHE_DIR = os.getenv("Arxiv_Cache") # =================================== 工具函数 =============================================== 专业词汇声明 = 'If the term "agent" is used in this section, it should be translated to "智能体". ' @@ -190,9 +192,9 @@ def Latex英文纠错加PDF对比(txt, llm_kwargs, plugin_kwargs, chatbot, histo # <-------------- if merge_translate_zh is already generated, skip gpt req -------------> - if not os.path.exists(project_folder + '/merge_proofread_en.tex'): + if not os.path.exists(project_folder + '/merge_proofread.tex'): yield from Latex精细分解与转化(file_manifest, project_folder, llm_kwargs, plugin_kwargs, - chatbot, history, system_prompt, mode='proofread_en', switch_prompt=_switch_prompt_) + chatbot, history, system_prompt, mode='proofread_latex', switch_prompt=switch_prompt) # <-------------- compile PDF -------------> diff --git a/crazy_functions/latex_utils.py b/crazy_functions/latex_utils.py index eb65a8a..27cc0b3 100644 --- a/crazy_functions/latex_utils.py +++ b/crazy_functions/latex_utils.py @@ -449,9 +449,10 @@ class LatexPaperSplit(): """ def __init__(self) -> None: self.nodes = None - self.msg = "*{\\scriptsize\\textbf{警告:该PDF由GPT-Academic开源项目调用大语言模型+Latex翻译插件一键生成," + \ + self.msg = "{\\scriptsize\\textbf{警告:该PDF由GPT-Academic开源项目调用大语言模型+Latex翻译插件一键生成," + \ "版权归原文作者所有。翻译内容可靠性无保障,请仔细鉴别并以原文为准。" + \ - "项目Github地址 \\url{https://github.com/binary-husky/gpt_academic/}。" + "项目Github地址: \\url{https://github.com/binary-husky/gpt_academic/}。" + \ + "项目在线体验地址: \\url{https://chatpaper.org}。" # 请您不要删除或修改这行警告,除非您是论文的原作者(如果您是论文原作者,欢迎加REAME中的QQ联系开发者) self.msg_declare = "为了防止大语言模型的意外谬误产生扩散影响,禁止移除或修改此警告。}}\\\\" diff --git a/docs/use_azure.md b/docs/use_azure.md index f1c27ef..626b132 100644 --- a/docs/use_azure.md +++ b/docs/use_azure.md @@ -96,15 +96,6 @@ ● 部署名(不是模型名) -# 修改 config.py - -``` -AZURE_ENDPOINT = "填入终结点" -AZURE_API_KEY = "填入azure openai api的密钥" -AZURE_API_VERSION = "2023-05-15" # 默认使用 2023-05-15 版本,无需修改 -AZURE_ENGINE = "填入部署名" - -``` # API的使用 接下来就是具体怎么使用API了,还是可以参考官方文档:[快速入门 - 开始通过 Azure OpenAI 服务使用 ChatGPT 和 GPT-4 - Azure OpenAI Service | Microsoft Learn](https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/chatgpt-quickstart?pivots=programming-language-python) diff --git a/main.py b/main.py index 65e1f4c..e59ea02 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,5 @@ import os; os.environ['no_proxy'] = '*' # 避免代理网络产生意外污染 +from pathlib import Path def main(): import gradio as gr @@ -15,7 +16,7 @@ def main(): from check_proxy import get_current_version initial_prompt = "Serve me as a writing and programming assistant." - title_html = f"

ChatGPT 学术优化 {get_current_version()}

" + title_html = f"

ChatGPT 学术优化 网页测试版 {get_current_version()}

" description = """代码开源和更新[地址🚀](https://github.com/binary-husky/chatgpt_academic),感谢热情的[开发者们❤️](https://github.com/binary-husky/chatgpt_academic/graphs/contributors)""" # 问询记录, python 版本建议3.9+(越新越好) @@ -52,7 +53,21 @@ def main(): CHATBOT_HEIGHT /= 2 cancel_handles = [] + # Read your Baidu statistics code from the file + baidu_stats_code = Path('./sites/baidu_stats.html').read_text() with gr.Blocks(title="ChatGPT 学术优化", theme=set_theme, analytics_enabled=False, css=advanced_css) as demo: + # Insert your Baidu statistics code here + gradio_original_template_fn = gr.routes.templates.TemplateResponse + + def gradio_new_template_fn(*args, **kwargs): + res = gradio_original_template_fn(*args, **kwargs) + res.body = res.body.replace(b'', f'{baidu_stats_code}'.encode("utf8")) + res.init_headers() + return res + + gr.routes.templates.TemplateResponse = gradio_new_template_fn # override gradio template + + # Insert Title gr.HTML(title_html) cookies = gr.State({'api_key': API_KEY, 'llm_model': LLM_MODEL}) with gr_L1(): @@ -71,7 +86,13 @@ def main(): stopBtn = gr.Button("停止", variant="secondary"); stopBtn.style(size="sm") clearBtn = gr.Button("清除", variant="secondary", visible=False); clearBtn.style(size="sm") with gr.Row(): - status = gr.Markdown(f"Tip: 按Enter提交, 按Shift+Enter换行。当前模型: {LLM_MODEL} \n {proxy_info}") + status = gr.Markdown(f"""Tips: 1. 按Enter提交, 按Shift+Enter换行;2. 当前模型: {LLM_MODEL} \n {proxy_info}. + 3. 请注意隐私保护和遵守法律法规; + 4. 请勿使用本服务进行违法犯罪活动; + 5. 我和qingxu都希望能够为大家提供一个好的**学术工具**,希望大家不要攻击和滥用本服务; + 6. 本服务还存在各种bug,如果发现bug,欢迎加群反馈或者发issue告诉我们; + 7. 希望大家能结合ChatPaper的速读,找到需要精读的,再用本工具的全文翻译,实现快速知识摄取。 + """) with gr.Accordion("基础功能区", open=True) as area_basic_fn: with gr.Row(): for k in functional: diff --git a/sites/baidu_stats.html b/sites/baidu_stats.html new file mode 100644 index 0000000..b60d10f --- /dev/null +++ b/sites/baidu_stats.html @@ -0,0 +1,10 @@ + + \ No newline at end of file