@@ -906,6 +906,13 @@ def decode(self, *args, **kwargs):
906
906
AVAIL_LLM_MODELS += [azure_model_name ]
907
907
908
908
909
+ # -=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=-=-=
910
+ # -=-=-=-=-=-=-=-=-=- ☝️ 以上是模型路由 -=-=-=-=-=-=-=-=-=
911
+ # -=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=-=-=
912
+
913
+ # -=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=-=-=
914
+ # -=-=-=-=-=-=-= 👇 以下是多模型路由切换函数 -=-=-=-=-=-=-=
915
+ # -=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=--=-=-=-=-=-=-=-=
909
916
910
917
911
918
def LLM_CATCH_EXCEPTION (f ):
@@ -942,13 +949,11 @@ def predict_no_ui_long_connection(inputs:str, llm_kwargs:dict, history:list, sys
942
949
model = llm_kwargs ['llm_model' ]
943
950
n_model = 1
944
951
if '&' not in model :
945
-
946
- # 如果只询问1个大语言模型:
952
+ # 如果只询问“一个”大语言模型(多数情况):
947
953
method = model_info [model ]["fn_without_ui" ]
948
954
return method (inputs , llm_kwargs , history , sys_prompt , observe_window , console_slience )
949
955
else :
950
-
951
- # 如果同时询问多个大语言模型,这个稍微啰嗦一点,但思路相同,您不必读这个else分支
956
+ # 如果同时询问“多个”大语言模型,这个稍微啰嗦一点,但思路相同,您不必读这个else分支
952
957
executor = ThreadPoolExecutor (max_workers = 4 )
953
958
models = model .split ('&' )
954
959
n_model = len (models )
@@ -1001,8 +1006,26 @@ def mutex_manager(window_mutex, observe_window):
1001
1006
res = '<br/><br/>\n \n ---\n \n ' .join (return_string_collect )
1002
1007
return res
1003
1008
1004
-
1005
- def predict (inputs :str , llm_kwargs :dict , * args , ** kwargs ):
1009
+ # 根据基础功能区 ModelOverride 参数调整模型类型,用于 `predict` 中
1010
+ import importlib
1011
+ import core_functional
1012
+ def execute_model_override (llm_kwargs , additional_fn , method ):
1013
+ functional = core_functional .get_core_functions ()
1014
+ if 'ModelOverride' in functional [additional_fn ]:
1015
+ # 热更新Prompt & ModelOverride
1016
+ importlib .reload (core_functional )
1017
+ functional = core_functional .get_core_functions ()
1018
+ model_override = functional [additional_fn ]['ModelOverride' ]
1019
+ if model_override not in model_info :
1020
+ raise ValueError (f"模型覆盖参数 '{ model_override } ' 指向一个暂不支持的模型,请检查配置文件。" )
1021
+ method = model_info [model_override ]["fn_with_ui" ]
1022
+ llm_kwargs ['llm_model' ] = model_override
1023
+ return llm_kwargs , additional_fn , method
1024
+ # 默认返回原参数
1025
+ return llm_kwargs , additional_fn , method
1026
+
1027
+ def predict (inputs :str , llm_kwargs :dict , plugin_kwargs :dict , chatbot ,
1028
+ history :list = [], system_prompt :str = '' , stream :bool = True , additional_fn :str = None ):
1006
1029
"""
1007
1030
发送至LLM,流式获取输出。
1008
1031
用于基础的对话功能。
@@ -1021,6 +1044,11 @@ def predict(inputs:str, llm_kwargs:dict, *args, **kwargs):
1021
1044
"""
1022
1045
1023
1046
inputs = apply_gpt_academic_string_mask (inputs , mode = "show_llm" )
1047
+
1024
1048
method = model_info [llm_kwargs ['llm_model' ]]["fn_with_ui" ] # 如果这里报错,检查config中的AVAIL_LLM_MODELS选项
1025
- yield from method (inputs , llm_kwargs , * args , ** kwargs )
1049
+
1050
+ if additional_fn : # 根据基础功能区 ModelOverride 参数调整模型类型
1051
+ llm_kwargs , additional_fn , method = execute_model_override (llm_kwargs , additional_fn , method )
1052
+
1053
+ yield from method (inputs , llm_kwargs , plugin_kwargs , chatbot , history , system_prompt , stream , additional_fn )
1026
1054
0 commit comments