From 6813ba88bb0df93f447555705edc2c2b8d577b5c Mon Sep 17 00:00:00 2001 From: XiaoBoAI Date: Sat, 19 Jul 2025 19:06:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BApredict=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6=E5=92=8CURL=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=8A=9F=E8=83=BD=20-=20=E6=B7=BB=E5=8A=A0URL?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E5=92=8C=E7=BD=91=E9=A1=B5=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E6=8F=90=E5=8F=96=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=8F=90=E5=8F=96=E7=BD=91=E9=A1=B5=E6=96=87?= =?UTF-8?q?=E6=9C=AC=20-=20=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E8=AF=86=E5=88=AB=E5=92=8C=E6=96=87=E4=BB=B6=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E8=AF=BB=E5=8F=96=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81private=5Fupload=E8=B7=AF=E5=BE=84=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=20-=20=E9=9B=86=E6=88=90WebTextExtractor=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=BD=91=E9=A1=B5=E5=86=85=E5=AE=B9=E6=8F=90=E5=8F=96=20-=20?= =?UTF-8?q?=E9=9B=86=E6=88=90TextContentLoader=E5=A4=84=E7=90=86=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E6=96=87=E4=BB=B6=E8=AF=BB=E5=8F=96=20-=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84=E4=B8=8E=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E7=BB=84=E5=90=88=E7=9A=84=E6=99=BA=E8=83=BD=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- request_llms/bridge_all.py | 93 +++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/request_llms/bridge_all.py b/request_llms/bridge_all.py index 4562c9f1..b975f8d1 100644 --- a/request_llms/bridge_all.py +++ b/request_llms/bridge_all.py @@ -1554,19 +1554,110 @@ def predict(inputs:str, llm_kwargs:dict, plugin_kwargs:dict, chatbot, additional_fn:str=None # 基础功能区按钮的附加功能 ): """ + import os + import re + from toolbox import update_ui inputs = apply_gpt_academic_string_mask(inputs, mode="show_llm") if llm_kwargs['llm_model'] not in model_info: - from toolbox import update_ui chatbot.append([inputs, f"很抱歉,模型 '{llm_kwargs['llm_model']}' 暂不支持
(1) 检查config中的AVAIL_LLM_MODELS选项
(2) 检查request_llms/bridge_all.py中的模型路由"]) yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 + return method = model_info[llm_kwargs['llm_model']]["fn_with_ui"] # 如果这里报错,检查config中的AVAIL_LLM_MODELS选项 if additional_fn: # 根据基础功能区 ModelOverride 参数调整模型类型 llm_kwargs, additional_fn, method = execute_model_override(llm_kwargs, additional_fn, method) + # 检查是否为URL或文件路径 + def is_url(text): + from urllib.parse import urlparse + try: + text = text.strip(',.!?,。!? \t\n\r') + words = text.split() + if len(words) != 1: + return False + result = urlparse(text) + return all([result.scheme, result.netloc]) + except: + return False + + def extract_file_path(text): + # 匹配以 private_upload 开头,包含时间戳格式的路径 + pattern = r'(private_upload/[^\s]+?/\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2})' + match = re.search(pattern, text) + if match and os.path.exists(match.group(1)): + return match.group(1) + return None + + if is_url(inputs): + # 处理URL + try: + from crazy_functions.doc_fns.read_fns.web_reader import WebTextExtractor, WebExtractorConfig + extractor = WebTextExtractor(WebExtractorConfig()) + + # 添加正在处理的提示信息 + chatbot.append(["提示", "正在提取网页内容,请稍作等待..."]) + yield from update_ui(chatbot=chatbot, history=history) + + web_content = extractor.extract_text(inputs) + + # 移除提示信息 + chatbot.pop() + + # 显示提取的内容 + chatbot.append([f"网页{inputs}的文本内容如下:", web_content]) + history.extend([f"网页{inputs}的文本内容如下:", web_content]) + yield from update_ui(chatbot=chatbot, history=history) + return + except Exception as e: + # 如果出错,移除提示信息(如果存在) + if len(chatbot) > 0 and chatbot[-1][0] == "提示": + chatbot.pop() + chatbot.append([inputs, f"网页内容提取失败: {str(e)}"]) + yield from update_ui(chatbot=chatbot, history=history) + return + else: + # 检查是否包含文件路径 + file_path = extract_file_path(inputs) + if os.path.exists(inputs): + # 处理普通文件路径 + try: + from crazy_functions.doc_fns.text_content_loader import TextContentLoader + loader = TextContentLoader(chatbot, history) + yield from loader.execute(inputs) + return + except Exception as e: + chatbot.append([inputs, f"文件读取失败: {str(e)}"]) + yield from update_ui(chatbot=chatbot, history=history) + return + elif file_path: + try: + from crazy_functions.doc_fns.text_content_loader import TextContentLoader + loader = TextContentLoader(chatbot, history) + # 先读取文件内容 + content_generator = loader.execute(file_path) + # 消费生成器获取文件内容 + for _ in content_generator: + pass + + # 构建新的输入,包含用户的原始问题和文件引用 + original_question = inputs.replace(file_path, '').strip() + if not original_question: + original_question = f"请分析上述文件内容" + else: + original_question = f"基于上述文件内容,{original_question}" + + # 使用最新的历史记录(包含文件内容)继续对话 + yield from method(original_question, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, stream, additional_fn) + return + except Exception as e: + chatbot.append([inputs, f"文件处理失败: {str(e)}"]) + yield from update_ui(chatbot=chatbot, history=history) + return + + # 兼容原有的URL和文件处理逻辑 if start_with_url(inputs): yield from load_web_content(inputs, chatbot, history) return