* 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>
118 lines
7.0 KiB
Python
118 lines
7.0 KiB
Python
from toolbox import CatchException, update_ui, ProxyNetworkActivate, update_ui_lastest_msg, get_log_folder, get_user
|
||
from .crazy_utils import request_gpt_model_in_new_thread_with_ui_alive, get_files_from_everything
|
||
|
||
install_msg ="""
|
||
|
||
1. python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
|
||
|
||
2. python -m pip install transformers protobuf langchain sentence-transformers faiss-cpu nltk beautifulsoup4 bitsandbytes tabulate icetk --upgrade
|
||
|
||
3. python -m pip install unstructured[all-docs] --upgrade
|
||
|
||
4. python -c 'import nltk; nltk.download("punkt")'
|
||
"""
|
||
|
||
@CatchException
|
||
def 知识库文件注入(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request):
|
||
"""
|
||
txt 输入栏用户输入的文本,例如需要翻译的一段话,再例如一个包含了待处理文件的路径
|
||
llm_kwargs gpt模型参数, 如温度和top_p等, 一般原样传递下去就行
|
||
plugin_kwargs 插件模型的参数,暂时没有用武之地
|
||
chatbot 聊天显示框的句柄,用于显示给用户
|
||
history 聊天历史,前情提要
|
||
system_prompt 给gpt的静默提醒
|
||
user_request 当前用户的请求信息(IP地址等)
|
||
"""
|
||
history = [] # 清空历史,以免输入溢出
|
||
|
||
# < --------------------读取参数--------------- >
|
||
if ("advanced_arg" in plugin_kwargs) and (plugin_kwargs["advanced_arg"] == ""): plugin_kwargs.pop("advanced_arg")
|
||
kai_id = plugin_kwargs.get("advanced_arg", 'default')
|
||
|
||
chatbot.append((f"向`{kai_id}`知识库中添加文件。", "[Local Message] 从一批文件(txt, md, tex)中读取数据构建知识库, 然后进行问答。"))
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
||
|
||
# resolve deps
|
||
try:
|
||
# from zh_langchain import construct_vector_store
|
||
# from langchain.embeddings.huggingface import HuggingFaceEmbeddings
|
||
from crazy_functions.vector_fns.vector_database import knowledge_archive_interface
|
||
except Exception as e:
|
||
chatbot.append(["依赖不足", f"{str(e)}\n\n导入依赖失败。请用以下命令安装" + install_msg])
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
||
# from .crazy_utils import try_install_deps
|
||
# try_install_deps(['zh_langchain==0.2.1', 'pypinyin'], reload_m=['pypinyin', 'zh_langchain'])
|
||
# yield from update_ui_lastest_msg("安装完成,您可以再次重试。", chatbot, history)
|
||
return
|
||
|
||
# < --------------------读取文件--------------- >
|
||
file_manifest = []
|
||
spl = ["txt", "doc", "docx", "email", "epub", "html", "json", "md", "msg", "pdf", "ppt", "pptx", "rtf"]
|
||
for sp in spl:
|
||
_, file_manifest_tmp, _ = get_files_from_everything(txt, type=f'.{sp}')
|
||
file_manifest += file_manifest_tmp
|
||
|
||
if len(file_manifest) == 0:
|
||
chatbot.append(["没有找到任何可读取文件", "当前支持的格式包括: txt, md, docx, pptx, pdf, json等"])
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
||
return
|
||
|
||
# < -------------------预热文本向量化模组--------------- >
|
||
chatbot.append(['<br/>'.join(file_manifest), "正在预热文本向量化模组, 如果是第一次运行, 将消耗较长时间下载中文向量化模型..."])
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
||
print('Checking Text2vec ...')
|
||
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
|
||
with ProxyNetworkActivate('Download_LLM'): # 临时地激活代理网络
|
||
HuggingFaceEmbeddings(model_name="GanymedeNil/text2vec-large-chinese")
|
||
|
||
# < -------------------构建知识库--------------- >
|
||
chatbot.append(['<br/>'.join(file_manifest), "正在构建知识库..."])
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
||
print('Establishing knowledge archive ...')
|
||
with ProxyNetworkActivate('Download_LLM'): # 临时地激活代理网络
|
||
kai = knowledge_archive_interface()
|
||
vs_path = get_log_folder(user=get_user(chatbot), plugin_name='vec_store')
|
||
kai.feed_archive(file_manifest=file_manifest, vs_path=vs_path, id=kai_id)
|
||
kai_files = kai.get_loaded_file(vs_path=vs_path)
|
||
kai_files = '<br/>'.join(kai_files)
|
||
# chatbot.append(['知识库构建成功', "正在将知识库存储至cookie中"])
|
||
# yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
||
# chatbot._cookies['langchain_plugin_embedding'] = kai.get_current_archive_id()
|
||
# chatbot._cookies['lock_plugin'] = 'crazy_functions.知识库文件注入->读取知识库作答'
|
||
# chatbot.append(['完成', "“根据知识库作答”函数插件已经接管问答系统, 提问吧! 但注意, 您接下来不能再使用其他插件了,刷新页面即可以退出知识库问答模式。"])
|
||
chatbot.append(['构建完成', f"当前知识库内的有效文件:\n\n---\n\n{kai_files}\n\n---\n\n请切换至“知识库问答”插件进行知识库访问, 或者使用此插件继续上传更多文件。"])
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 # 由于请求gpt需要一段时间,我们先及时地做一次界面更新
|
||
|
||
@CatchException
|
||
def 读取知识库作答(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request=-1):
|
||
# resolve deps
|
||
try:
|
||
# from zh_langchain import construct_vector_store
|
||
# from langchain.embeddings.huggingface import HuggingFaceEmbeddings
|
||
from crazy_functions.vector_fns.vector_database import knowledge_archive_interface
|
||
except Exception as e:
|
||
chatbot.append(["依赖不足", f"{str(e)}\n\n导入依赖失败。请用以下命令安装" + install_msg])
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面
|
||
# from .crazy_utils import try_install_deps
|
||
# try_install_deps(['zh_langchain==0.2.1', 'pypinyin'], reload_m=['pypinyin', 'zh_langchain'])
|
||
# yield from update_ui_lastest_msg("安装完成,您可以再次重试。", chatbot, history)
|
||
return
|
||
|
||
# < ------------------- --------------- >
|
||
kai = knowledge_archive_interface()
|
||
|
||
if ("advanced_arg" in plugin_kwargs) and (plugin_kwargs["advanced_arg"] == ""): plugin_kwargs.pop("advanced_arg")
|
||
kai_id = plugin_kwargs.get("advanced_arg", 'default')
|
||
vs_path = get_log_folder(user=get_user(chatbot), plugin_name='vec_store')
|
||
resp, prompt = kai.answer_with_archive_by_id(txt, kai_id, vs_path)
|
||
|
||
chatbot.append((txt, f'[知识库 {kai_id}] ' + prompt))
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 # 由于请求gpt需要一段时间,我们先及时地做一次界面更新
|
||
gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive(
|
||
inputs=prompt, inputs_show_user=txt,
|
||
llm_kwargs=llm_kwargs, chatbot=chatbot, history=[],
|
||
sys_prompt=system_prompt
|
||
)
|
||
history.extend((prompt, gpt_say))
|
||
yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 # 由于请求gpt需要一段时间,我们先及时地做一次界面更新
|