* 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>
119 lines
5.5 KiB
Python
119 lines
5.5 KiB
Python
# encoding: utf-8
|
||
# @Time : 2023/12/21
|
||
# @Author : Spike
|
||
# @Descr :
|
||
import json
|
||
import re
|
||
import os
|
||
import time
|
||
from request_llms.com_google import GoogleChatInit
|
||
from toolbox import get_conf, update_ui, update_ui_lastest_msg, have_any_recent_upload_image_files, trimmed_format_exc
|
||
|
||
proxies, TIMEOUT_SECONDS, MAX_RETRY = get_conf('proxies', 'TIMEOUT_SECONDS', 'MAX_RETRY')
|
||
timeout_bot_msg = '[Local Message] Request timeout. Network error. Please check proxy settings in config.py.' + \
|
||
'网络错误,检查代理服务器是否可用,以及代理设置的格式是否正确,格式须是[协议]://[地址]:[端口],缺一不可。'
|
||
|
||
|
||
def predict_no_ui_long_connection(inputs, llm_kwargs, history=[], sys_prompt="", observe_window=None,
|
||
console_slience=False):
|
||
# 检查API_KEY
|
||
if get_conf("GEMINI_API_KEY") == "":
|
||
raise ValueError(f"请配置 GEMINI_API_KEY。")
|
||
|
||
genai = GoogleChatInit(llm_kwargs)
|
||
watch_dog_patience = 5 # 看门狗的耐心, 设置5秒即可
|
||
gpt_replying_buffer = ''
|
||
stream_response = genai.generate_chat(inputs, llm_kwargs, history, sys_prompt)
|
||
for response in stream_response:
|
||
results = response.decode()
|
||
match = re.search(r'"text":\s*"((?:[^"\\]|\\.)*)"', results, flags=re.DOTALL)
|
||
error_match = re.search(r'\"message\":\s*\"(.*?)\"', results, flags=re.DOTALL)
|
||
if match:
|
||
try:
|
||
paraphrase = json.loads('{"text": "%s"}' % match.group(1))
|
||
except:
|
||
raise ValueError(f"解析GEMINI消息出错。")
|
||
buffer = paraphrase['text']
|
||
gpt_replying_buffer += buffer
|
||
if len(observe_window) >= 1:
|
||
observe_window[0] = gpt_replying_buffer
|
||
if len(observe_window) >= 2:
|
||
if (time.time() - observe_window[1]) > watch_dog_patience: raise RuntimeError("程序终止。")
|
||
if error_match:
|
||
raise RuntimeError(f'{gpt_replying_buffer} 对话错误')
|
||
return gpt_replying_buffer
|
||
|
||
|
||
def predict(inputs, llm_kwargs, plugin_kwargs, chatbot, history=[], system_prompt='', stream=True, additional_fn=None):
|
||
# 检查API_KEY
|
||
if get_conf("GEMINI_API_KEY") == "":
|
||
yield from update_ui_lastest_msg(f"请配置 GEMINI_API_KEY。", chatbot=chatbot, history=history, delay=0)
|
||
return
|
||
|
||
# 适配润色区域
|
||
if additional_fn is not None:
|
||
from core_functional import handle_core_functionality
|
||
inputs, history = handle_core_functionality(additional_fn, inputs, history, chatbot)
|
||
|
||
if "vision" in llm_kwargs["llm_model"]:
|
||
have_recent_file, image_paths = have_any_recent_upload_image_files(chatbot)
|
||
if not have_recent_file:
|
||
chatbot.append((inputs, "没有检测到任何近期上传的图像文件,请上传jpg格式的图片,此外,请注意拓展名需要小写"))
|
||
yield from update_ui(chatbot=chatbot, history=history, msg="等待图片") # 刷新界面
|
||
return
|
||
def make_media_input(inputs, image_paths):
|
||
for image_path in image_paths:
|
||
inputs = inputs + f'<br/><br/><div align="center"><img src="file={os.path.abspath(image_path)}"></div>'
|
||
return inputs
|
||
if have_recent_file:
|
||
inputs = make_media_input(inputs, image_paths)
|
||
|
||
chatbot.append((inputs, ""))
|
||
yield from update_ui(chatbot=chatbot, history=history)
|
||
genai = GoogleChatInit(llm_kwargs)
|
||
retry = 0
|
||
while True:
|
||
try:
|
||
stream_response = genai.generate_chat(inputs, llm_kwargs, history, system_prompt)
|
||
break
|
||
except Exception as e:
|
||
retry += 1
|
||
chatbot[-1] = ((chatbot[-1][0], trimmed_format_exc()))
|
||
yield from update_ui(chatbot=chatbot, history=history, msg="请求失败") # 刷新界面
|
||
return
|
||
gpt_replying_buffer = ""
|
||
gpt_security_policy = ""
|
||
history.extend([inputs, ''])
|
||
for response in stream_response:
|
||
results = response.decode("utf-8") # 被这个解码给耍了。。
|
||
gpt_security_policy += results
|
||
match = re.search(r'"text":\s*"((?:[^"\\]|\\.)*)"', results, flags=re.DOTALL)
|
||
error_match = re.search(r'\"message\":\s*\"(.*)\"', results, flags=re.DOTALL)
|
||
if match:
|
||
try:
|
||
paraphrase = json.loads('{"text": "%s"}' % match.group(1))
|
||
except:
|
||
raise ValueError(f"解析GEMINI消息出错。")
|
||
gpt_replying_buffer += paraphrase['text'] # 使用 json 解析库进行处理
|
||
chatbot[-1] = (inputs, gpt_replying_buffer)
|
||
history[-1] = gpt_replying_buffer
|
||
yield from update_ui(chatbot=chatbot, history=history)
|
||
if error_match:
|
||
history = history[-2] # 错误的不纳入对话
|
||
chatbot[-1] = (inputs, gpt_replying_buffer + f"对话错误,请查看message\n\n```\n{error_match.group(1)}\n```")
|
||
yield from update_ui(chatbot=chatbot, history=history)
|
||
raise RuntimeError('对话错误')
|
||
if not gpt_replying_buffer:
|
||
history = history[-2] # 错误的不纳入对话
|
||
chatbot[-1] = (inputs, gpt_replying_buffer + f"触发了Google的安全访问策略,没有回答\n\n```\n{gpt_security_policy}\n```")
|
||
yield from update_ui(chatbot=chatbot, history=history)
|
||
|
||
|
||
|
||
if __name__ == '__main__':
|
||
import sys
|
||
llm_kwargs = {'llm_model': 'gemini-pro'}
|
||
result = predict('Write long a story about a magic backpack.', llm_kwargs, llm_kwargs, [])
|
||
for i in result:
|
||
print(i)
|