镜像自地址
https://github.com/binary-husky/gpt_academic.git
已同步 2025-12-06 06:26:47 +00:00
merge frontier branch (#1620)
* Zhipu sdk update 适配最新的智谱SDK,支持GLM4v (#1502) * 适配 google gemini 优化为从用户input中提取文件 * 适配最新的智谱SDK、支持glm-4v * requirements.txt fix * pending history check --------- Co-authored-by: binary-husky <qingxu.fu@outlook.com> * Update "生成多种Mermaid图表" plugin: Separate out the file reading function (#1520) * Update crazy_functional.py with new functionality deal with PDF * Update crazy_functional.py and Mermaid.py for plugin_kwargs * Update crazy_functional.py with new chart type: mind map * Update SELECT_PROMPT and i_say_show_user messages * Update ArgsReminder message in get_crazy_functions() function * Update with read md file and update PROMPTS * Return the PROMPTS as the test found that the initial version worked best * Update Mermaid chart generation function * version 3.71 * 解决issues #1510 * Remove unnecessary text from sys_prompt in 解析历史输入 function * Remove sys_prompt message in 解析历史输入 function * Update bridge_all.py: supports gpt-4-turbo-preview (#1517) * Update bridge_all.py: supports gpt-4-turbo-preview supports gpt-4-turbo-preview * Update bridge_all.py --------- Co-authored-by: binary-husky <96192199+binary-husky@users.noreply.github.com> * Update config.py: supports gpt-4-turbo-preview (#1516) * Update config.py: supports gpt-4-turbo-preview supports gpt-4-turbo-preview * Update config.py --------- Co-authored-by: binary-husky <96192199+binary-husky@users.noreply.github.com> * Refactor 解析历史输入 function to handle file input * Update Mermaid chart generation functionality * rename files and functions --------- Co-authored-by: binary-husky <qingxu.fu@outlook.com> Co-authored-by: hongyi-zhao <hongyi.zhao@gmail.com> Co-authored-by: binary-husky <96192199+binary-husky@users.noreply.github.com> * 接入mathpix ocr功能 (#1468) * Update Latex输出PDF结果.py 借助mathpix实现了PDF翻译中文并重新编译PDF * Update config.py add mathpix appid & appkey * Add 'PDF翻译中文并重新编译PDF' feature to plugins. --------- Co-authored-by: binary-husky <96192199+binary-husky@users.noreply.github.com> * fix zhipuai * check picture * remove glm-4 due to bug * 修改config * 检查MATHPIX_APPID * Remove unnecessary code and update function_plugins dictionary * capture non-standard token overflow * bug fix #1524 * change mermaid style * 支持mermaid 滚动放大缩小重置,鼠标滚动和拖拽 (#1530) * 支持mermaid 滚动放大缩小重置,鼠标滚动和拖拽 * 微调未果 先stage一下 * update --------- Co-authored-by: binary-husky <qingxu.fu@outlook.com> Co-authored-by: binary-husky <96192199+binary-husky@users.noreply.github.com> * ver 3.72 * change live2d * save the status of ``clear btn` in cookie * 前端选择保持 * js ui bug fix * reset btn bug fix * update live2d tips * fix missing get_token_num method * fix live2d toggle switch * fix persistent custom btn with cookie * fix zhipuai feedback with core functionality * Refactor button update and clean up functions * tailing space removal * Fix missing MATHPIX_APPID and MATHPIX_APPKEY configuration * Prompt fix、脑图提示词优化 (#1537) * 适配 google gemini 优化为从用户input中提取文件 * 脑图提示词优化 * Fix missing MATHPIX_APPID and MATHPIX_APPKEY configuration --------- Co-authored-by: binary-husky <qingxu.fu@outlook.com> * 优化“PDF翻译中文并重新编译PDF”插件 (#1602) * Add gemini_endpoint to API_URL_REDIRECT (#1560) * Add gemini_endpoint to API_URL_REDIRECT * Update gemini-pro and gemini-pro-vision model_info endpoints * Update to support new claude models (#1606) * Add anthropic library and update claude models * 更新bridge_claude.py文件,添加了对图片输入的支持。修复了一些bug。 * 添加Claude_3_Models变量以限制图片数量 * Refactor code to improve readability and maintainability * minor claude bug fix * more flexible one-api support * reformat config * fix one-api new access bug * dummy * compat non-standard api * version 3.73 --------- Co-authored-by: XIao <46100050+Kilig947@users.noreply.github.com> Co-authored-by: Menghuan1918 <menghuan2003@outlook.com> Co-authored-by: hongyi-zhao <hongyi.zhao@gmail.com> Co-authored-by: Hao Ma <893017927@qq.com> Co-authored-by: zeyuan huang <599012428@qq.com>
这个提交包含在:
65
toolbox.py
65
toolbox.py
@@ -25,6 +25,9 @@ from shared_utils.text_mask import apply_gpt_academic_string_mask
|
||||
from shared_utils.text_mask import build_gpt_academic_masked_string
|
||||
from shared_utils.text_mask import apply_gpt_academic_string_mask_langbased
|
||||
from shared_utils.text_mask import build_gpt_academic_masked_string_langbased
|
||||
from shared_utils.map_names import map_friendly_names_to_model
|
||||
from shared_utils.map_names import map_model_to_friendly_names
|
||||
from shared_utils.map_names import read_one_api_model_name
|
||||
from shared_utils.handle_upload import html_local_file
|
||||
from shared_utils.handle_upload import html_local_img
|
||||
from shared_utils.handle_upload import file_manifest_filter_type
|
||||
@@ -919,6 +922,18 @@ def have_any_recent_upload_image_files(chatbot):
|
||||
else:
|
||||
return False, None # most_recent_uploaded is too old
|
||||
|
||||
# Claude3 model supports graphic context dialogue, reads all images
|
||||
def every_image_file_in_path(chatbot):
|
||||
if chatbot is None:
|
||||
return False, [] # chatbot is None
|
||||
most_recent_uploaded = chatbot._cookies.get("most_recent_uploaded", None)
|
||||
if not most_recent_uploaded:
|
||||
return False, [] # most_recent_uploaded is None
|
||||
path = most_recent_uploaded["path"]
|
||||
file_manifest = get_pictures_list(path)
|
||||
if len(file_manifest) == 0:
|
||||
return False, []
|
||||
return True, file_manifest
|
||||
|
||||
# Function to encode the image
|
||||
def encode_image(image_path):
|
||||
@@ -939,3 +954,53 @@ def check_packages(packages=[]):
|
||||
spam_spec = importlib.util.find_spec(p)
|
||||
if spam_spec is None:
|
||||
raise ModuleNotFoundError
|
||||
|
||||
|
||||
def map_file_to_sha256(file_path):
|
||||
import hashlib
|
||||
|
||||
with open(file_path, 'rb') as file:
|
||||
content = file.read()
|
||||
|
||||
# Calculate the SHA-256 hash of the file contents
|
||||
sha_hash = hashlib.sha256(content).hexdigest()
|
||||
|
||||
return sha_hash
|
||||
|
||||
|
||||
def check_repeat_upload(new_pdf_path, pdf_hash):
|
||||
'''
|
||||
检查历史上传的文件是否与新上传的文件相同,如果相同则返回(True, 重复文件路径),否则返回(False,None)
|
||||
'''
|
||||
from toolbox import get_conf
|
||||
import PyPDF2
|
||||
|
||||
user_upload_dir = os.path.dirname(os.path.dirname(new_pdf_path))
|
||||
file_name = os.path.basename(new_pdf_path)
|
||||
|
||||
file_manifest = [f for f in glob.glob(f'{user_upload_dir}/**/{file_name}', recursive=True)]
|
||||
|
||||
for saved_file in file_manifest:
|
||||
with open(new_pdf_path, 'rb') as file1, open(saved_file, 'rb') as file2:
|
||||
reader1 = PyPDF2.PdfFileReader(file1)
|
||||
reader2 = PyPDF2.PdfFileReader(file2)
|
||||
|
||||
# 比较页数是否相同
|
||||
if reader1.getNumPages() != reader2.getNumPages():
|
||||
continue
|
||||
|
||||
# 比较每一页的内容是否相同
|
||||
for page_num in range(reader1.getNumPages()):
|
||||
page1 = reader1.getPage(page_num).extractText()
|
||||
page2 = reader2.getPage(page_num).extractText()
|
||||
if page1 != page2:
|
||||
continue
|
||||
|
||||
maybe_project_dir = glob.glob('{}/**/{}'.format(get_log_folder(), pdf_hash + ".tag"), recursive=True)
|
||||
|
||||
|
||||
if len(maybe_project_dir) > 0:
|
||||
return True, os.path.dirname(maybe_project_dir[0])
|
||||
|
||||
# 如果所有页的内容都相同,返回 True
|
||||
return False, None
|
||||
在新工单中引用
屏蔽一个用户