From 936e2f5206f2c20d21f6f1b8e8d9f187d97e90e6 Mon Sep 17 00:00:00 2001 From: binary-husky Date: Tue, 4 Feb 2025 16:15:56 +0800 Subject: [PATCH 1/3] update readme --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 5f22691d..a3d004b0 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ > [!IMPORTANT] -> `master主分支`最新动态(2025.2.4): 增加deepseek-r1支持;增加字体自定义功能 -> `master主分支`最新动态(2025.2.2): 三分钟快速接入最强qwen2.5-max[视频](https://www.bilibili.com/video/BV1LeFuerEG4) +> `master主分支`最新动态(2025.2.4): 增加deepseek-r1支持 > `frontier开发分支`最新动态(2024.12.9): 更新对话时间线功能,优化xelatex论文翻译 > `wiki文档`最新动态(2024.12.5): 更新ollama接入指南 > +> 2025.2.2: 三分钟快速接入最强qwen2.5-max[视频](https://www.bilibili.com/video/BV1LeFuerEG4) +> 2025.2.1: 支持自定义字体 > 2024.10.10: 突发停电,紧急恢复了提供[whl包](https://drive.google.com/drive/folders/14kR-3V-lIbvGxri4AHc8TpiA1fqsw7SK?usp=sharing)的文件服务器 -> 2024.10.8: 版本3.90加入对llama-index的初步支持,版本3.80加入插件二级菜单功能(详见wiki) > 2024.5.1: 加入Doc2x翻译PDF论文的功能,[查看详情](https://github.com/binary-husky/gpt_academic/wiki/Doc2x) > 2024.3.11: 全力支持Qwen、GLM、DeepseekCoder等中文大语言模型! SoVits语音克隆模块,[查看详情](https://www.bilibili.com/video/BV1Rp421S7tF/) > 2024.1.17: 安装依赖时,请选择`requirements.txt`中**指定的版本**。 安装命令:`pip install -r requirements.txt`。本项目完全开源免费,您可通过订阅[在线服务](https://github.com/binary-husky/gpt_academic/wiki/online)的方式鼓励本项目的发展。 @@ -129,20 +129,20 @@ Latex论文一键校对 | [插件] 仿Grammarly对Latex文章进行语法、拼 ```mermaid flowchart TD - A{"安装方法"} --> W1("I. 🔑直接运行 (Windows, Linux or MacOS)") - W1 --> W11["1. Python pip包管理依赖"] - W1 --> W12["2. Anaconda包管理依赖(推荐⭐)"] + A{"安装方法"} --> W1("I 🔑直接运行 (Windows, Linux or MacOS)") + W1 --> W11["1 Python pip包管理依赖"] + W1 --> W12["2 Anaconda包管理依赖(推荐⭐)"] - A --> W2["II. 🐳使用Docker (Windows, Linux or MacOS)"] + A --> W2["II 🐳使用Docker (Windows, Linux or MacOS)"] - W2 --> k1["1. 部署项目全部能力的大镜像(推荐⭐)"] - W2 --> k2["2. 仅在线模型(GPT, GLM4等)镜像"] - W2 --> k3["3. 在线模型 + Latex的大镜像"] + W2 --> k1["1 部署项目全部能力的大镜像(推荐⭐)"] + W2 --> k2["2 仅在线模型(GPT, GLM4等)镜像"] + W2 --> k3["3 在线模型 + Latex的大镜像"] - A --> W4["IV. 🚀其他部署方法"] - W4 --> C1["1. Windows/MacOS 一键安装运行脚本(推荐⭐)"] - W4 --> C2["2. Huggingface, Sealos远程部署"] - W4 --> C4["3. ... 其他 ..."] + A --> W4["IV 🚀其他部署方法"] + W4 --> C1["1 Windows/MacOS 一键安装运行脚本(推荐⭐)"] + W4 --> C2["2 Huggingface, Sealos远程部署"] + W4 --> C4["3 其他 ..."] ``` ### 安装方法I:直接运行 (Windows, Linux or MacOS) From 37f9b94deeaf38eb03966e3247f5ba5dff0bf02f Mon Sep 17 00:00:00 2001 From: binary-husky Date: Fri, 7 Feb 2025 00:17:36 +0800 Subject: [PATCH 2/3] add options to hide ui components --- main.py | 4 +- themes/gui_toolbar.py | 4 +- themes/init.js | 139 +++++++++++++++++++++++++++++++++++++++++- themes/theme.py | 20 ------ 4 files changed, 140 insertions(+), 27 deletions(-) diff --git a/main.py b/main.py index 310fa6a3..c250ab29 100644 --- a/main.py +++ b/main.py @@ -57,7 +57,7 @@ def main(): # 如果WEB_PORT是-1, 则随机选取WEB端口 PORT = find_free_port() if WEB_PORT <= 0 else WEB_PORT from check_proxy import get_current_version - from themes.theme import adjust_theme, advanced_css, theme_declaration, js_code_clear, js_code_show_or_hide, js_code_show_or_hide_group2 + from themes.theme import adjust_theme, advanced_css, theme_declaration, js_code_clear, js_code_show_or_hide from themes.theme import js_code_for_toggle_darkmode from themes.theme import load_dynamic_theme, to_cookie_str, from_cookie_str, assign_user_uuid title_html = f"

GPT 学术优化 {get_current_version()}

{theme_declaration}" @@ -210,7 +210,7 @@ def main(): ret.update({area_customize: gr.update(visible=("自定义菜单" in a))}) return ret checkboxes_2.select(fn_area_visibility_2, [checkboxes_2], [area_customize] ) - checkboxes_2.select(None, [checkboxes_2], None, _js=js_code_show_or_hide_group2) + checkboxes_2.select(None, [checkboxes_2], None, _js="""apply_checkbox_change_for_group2""") # 整理反复出现的控件句柄组合 input_combo = [cookies, max_length_sl, md_dropdown, txt, txt2, top_p, temperature, chatbot, history, system_prompt, plugin_advanced_arg] diff --git a/themes/gui_toolbar.py b/themes/gui_toolbar.py index 703edcfb..072fbfe3 100644 --- a/themes/gui_toolbar.py +++ b/themes/gui_toolbar.py @@ -26,8 +26,8 @@ def define_gui_toolbar(AVAIL_LLM_MODELS, LLM_MODEL, INIT_SYS_PROMPT, THEME, AVAI fontfamily_dropdown = gr.Dropdown(AVAIL_FONTS, value=get_conf("FONT"), elem_id="elem_fontfamily", label="更换字体类型").style(container=False) fontsize_slider = gr.Slider(minimum=5, maximum=25, value=15, step=1, interactive=True, label="字体大小(默认15)", elem_id="elem_fontsize") checkboxes = gr.CheckboxGroup(["基础功能区", "函数插件区", "浮动输入区", "输入清除键", "插件参数区"], value=["基础功能区", "函数插件区"], label="显示/隐藏功能区", elem_id='cbs').style(container=False) - opt = ["自定义菜单"] - value=[] + opt = ["自定义菜单", "主标题", "副标题", "显示logo"] + value=["主标题", "副标题", "显示logo"] if ADD_WAIFU: opt += ["添加Live2D形象"]; value += ["添加Live2D形象"] checkboxes_2 = gr.CheckboxGroup(opt, value=value, label="显示/隐藏自定义菜单", elem_id='cbsc').style(container=False) dark_mode_btn = gr.Button("切换界面明暗 ☀", variant="secondary").style(size="sm") diff --git a/themes/init.js b/themes/init.js index 5d7de63b..f240d80e 100644 --- a/themes/init.js +++ b/themes/init.js @@ -128,6 +128,14 @@ function gpt_academic_change_chatbot_font(fontfamily, fontsize, fontcolor) { } } +function footer_show_hide(show) { + if (show) { + document.querySelector('footer').style.display = ''; + } else { + document.querySelector('footer').style.display = 'none'; + } +} + async function GptAcademicJavaScriptInit(dark, prompt, live2d, layout, tts) { // 第一部分,布局初始化 remove_legacy_cookie(); @@ -179,6 +187,7 @@ async function GptAcademicJavaScriptInit(dark, prompt, live2d, layout, tts) { } } } + // 字体 gpt_academic_gradio_saveload("load", "elem_fontfamily", "js_fontfamily", null, "str"); gpt_academic_change_chatbot_font(getCookie("js_fontfamily"), null, null); @@ -205,7 +214,87 @@ async function GptAcademicJavaScriptInit(dark, prompt, live2d, layout, tts) { } - + if (getCookie("js_show_title")) { + // have cookie + bool_value = getCookie("js_show_title") + bool_value = bool_value == "True"; + searchString = "主标题"; + tool_bar_group = "cbsc"; + const true_function = function () { + document.querySelector('.prose.svelte-1ybaih5 h1').style.display = ''; + } + const false_function = function () { + document.querySelector('.prose.svelte-1ybaih5 h1').style.display = 'none'; + } + if (bool_value) { + // make btns appear + true_function(); + // deal with checkboxes + let arr_with_clear_btn = update_array( + await get_data_from_gradio_component(tool_bar_group), searchString, "add" + ) + push_data_to_gradio_component(arr_with_clear_btn, tool_bar_group, "no_conversion"); + } else { + false_function(); + // deal with checkboxes + let arr_without_clear_btn = update_array( + await get_data_from_gradio_component(tool_bar_group), searchString, "remove" + ) + push_data_to_gradio_component(arr_without_clear_btn, tool_bar_group, "no_conversion"); + } + } + if (getCookie("js_show_subtitle")) { + // have cookie + bool_value = getCookie("js_show_subtitle") + bool_value = bool_value == "True"; + searchString = "副标题"; + tool_bar_group = "cbsc"; + const true_function = function () { + document.querySelector('.prose.svelte-1ybaih5 h2').style.display = ''; + } + const false_function = function () { + document.querySelector('.prose.svelte-1ybaih5 h2').style.display = 'none'; + } + if (bool_value) { + // make btns appear + true_function(); + // deal with checkboxes + let arr_with_clear_btn = update_array( + await get_data_from_gradio_component(tool_bar_group), searchString, "add" + ) + push_data_to_gradio_component(arr_with_clear_btn, tool_bar_group, "no_conversion"); + } else { + false_function(); + // deal with checkboxes + let arr_without_clear_btn = update_array( + await get_data_from_gradio_component(tool_bar_group), searchString, "remove" + ) + push_data_to_gradio_component(arr_without_clear_btn, tool_bar_group, "no_conversion"); + } + } + if (getCookie("js_show_footer")) { + // have cookie + bool_value = getCookie("js_show_footer") + searchString = "显示logo"; + tool_bar_group = "cbsc"; + bool_value = bool_value == "True"; + if (bool_value) { + // make btns appear + footer_show_hide(true); + // deal with checkboxes + let arr_with_clear_btn = update_array( + await get_data_from_gradio_component(tool_bar_group), searchString, "add" + ) + push_data_to_gradio_component(arr_with_clear_btn, tool_bar_group, "no_conversion"); + } else { + footer_show_hide(false); + // deal with checkboxes + let arr_without_clear_btn = update_array( + await get_data_from_gradio_component(tool_bar_group), searchString, "remove" + ) + push_data_to_gradio_component(arr_without_clear_btn, tool_bar_group, "no_conversion"); + } + } // clearButton 自动清除按钮 if (getCookie("js_clearbtn_show_cookie")) { // have cookie @@ -219,7 +308,7 @@ async function GptAcademicJavaScriptInit(dark, prompt, live2d, layout, tts) { let clearButton2 = document.getElementById("elem_clear2"); clearButton2.style.display = "block"; // deal with checkboxes let arr_with_clear_btn = update_array( - await get_data_from_gradio_component('cbs'), "输入清除键", "add" + await get_data_from_gradio_component("cbs"), "输入清除键", "add" ) push_data_to_gradio_component(arr_with_clear_btn, "cbs", "no_conversion"); } else { @@ -228,7 +317,7 @@ async function GptAcademicJavaScriptInit(dark, prompt, live2d, layout, tts) { let clearButton2 = document.getElementById("elem_clear2"); clearButton2.style.display = "none"; // deal with checkboxes let arr_without_clear_btn = update_array( - await get_data_from_gradio_component('cbs'), "输入清除键", "remove" + await get_data_from_gradio_component("cbs"), "输入清除键", "remove" ) push_data_to_gradio_component(arr_without_clear_btn, "cbs", "no_conversion"); } @@ -268,3 +357,47 @@ async function GptAcademicJavaScriptInit(dark, prompt, live2d, layout, tts) { change_theme("", "") } + + + +function apply_checkbox_change_for_group2(display_panel_arr) { + setTimeout(() => { + display_panel_arr = get_checkbox_selected_items("cbsc"); + + let searchString = "添加Live2D形象"; + if (display_panel_arr.includes(searchString)) { + setCookie("js_live2d_show_cookie", "True", 365); + loadLive2D(); + } else { + try { + setCookie("js_live2d_show_cookie", "False", 365); + $('.waifu').hide(); + } catch (e) { + } + } + + + function handleDisplay(searchString, key, displayElement, showFn, hideFn) { + if (display_panel_arr.includes(searchString)) { + setCookie(key, "True", 365); + if (showFn) showFn(); + if (displayElement) displayElement.style.display = ''; + } else { + setCookie(key, "False", 365); + if (hideFn) hideFn(); + if (displayElement) displayElement.style.display = 'none'; + } + } + + // 主标题 + const mainTitle = document.querySelector('.prose.svelte-1ybaih5 h1'); + handleDisplay("主标题", "js_show_title", mainTitle, null, null); + + // 副标题 + const subTitle = document.querySelector('.prose.svelte-1ybaih5 h2'); + handleDisplay("副标题", "js_show_subtitle", subTitle, null, null); + + // 显示logo + handleDisplay("显示logo", "js_show_footer", null, () => footer_show_hide(true), () => footer_show_hide(false)); + }, 50); +} \ No newline at end of file diff --git a/themes/theme.py b/themes/theme.py index 4ad83e8d..fb217d47 100644 --- a/themes/theme.py +++ b/themes/theme.py @@ -141,23 +141,3 @@ setTimeout(() => { } """ - - -js_code_show_or_hide_group2 = """ -(display_panel_arr)=>{ -setTimeout(() => { - display_panel_arr = get_checkbox_selected_items("cbsc"); - - let searchString = "添加Live2D形象"; - let ele = "none"; - if (display_panel_arr.includes(searchString)) { - setCookie("js_live2d_show_cookie", "True", 365); - loadLive2D(); - } else { - setCookie("js_live2d_show_cookie", "False", 365); - $('.waifu').hide(); - } - -}, 50); -} -""" From 8a0d96afd3c825930e6677961e2e60065be4f663 Mon Sep 17 00:00:00 2001 From: binary-husky Date: Fri, 7 Feb 2025 01:21:21 +0800 Subject: [PATCH 3/3] consider element missing cases in js --- themes/init.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/themes/init.js b/themes/init.js index f240d80e..06cb5616 100644 --- a/themes/init.js +++ b/themes/init.js @@ -250,10 +250,16 @@ async function GptAcademicJavaScriptInit(dark, prompt, live2d, layout, tts) { searchString = "副标题"; tool_bar_group = "cbsc"; const true_function = function () { - document.querySelector('.prose.svelte-1ybaih5 h2').style.display = ''; + element = document.querySelector('.prose.svelte-1ybaih5 h2'); + if (element) element.style.display = ''; + element = document.querySelector('.prose.svelte-1ybaih5 h6'); + if (element) element.style.display = ''; } const false_function = function () { - document.querySelector('.prose.svelte-1ybaih5 h2').style.display = 'none'; + element = document.querySelector('.prose.svelte-1ybaih5 h2'); + if (element) element.style.display = 'none'; + element = document.querySelector('.prose.svelte-1ybaih5 h6'); + if (element) element.style.display = 'none'; } if (bool_value) { // make btns appear