@@ -40,16 +40,23 @@ class WenxinLLMModelParams(BaseForm):
4040class WenxinLLMModelCredential (BaseForm , BaseModelCredential ):
4141 def is_valid (self , model_type : str , model_name , model_credential : Dict [str , object ], model_params , provider ,
4242 raise_exception = False ):
43- model_type_list = provider .get_model_type_list ()
44- if not any (list (filter (lambda mt : mt .get ('value' ) == model_type , model_type_list ))):
45- raise AppApiException (ValidCode .valid_error .value ,
46- gettext ('{model_type} Model type is not supported' ).format (model_type = model_type ))
43+ # 根据api_version检查必需字段
44+ api_version = model_credential .get ('api_version' , 'v1' )
4745 model = provider .get_model (model_type , model_name , model_credential , ** model_params )
48- model_info = [model .lower () for model in model .client .models ()]
49- if not model_info .__contains__ (model_name .lower ()):
50- raise AppApiException (ValidCode .valid_error .value ,
51- gettext ('{model_name} The model does not support' ).format (model_name = model_name ))
52- for key in ['api_key' , 'secret_key' ]:
46+ if api_version == 'v1' :
47+ model_type_list = provider .get_model_type_list ()
48+ if not any (list (filter (lambda mt : mt .get ('value' ) == model_type , model_type_list ))):
49+ raise AppApiException (ValidCode .valid_error .value ,
50+ gettext ('{model_type} Model type is not supported' ).format (model_type = model_type ))
51+ model_info = [model .lower () for model in model .client .models ()]
52+ if not model_info .__contains__ (model_name .lower ()):
53+ raise AppApiException (ValidCode .valid_error .value ,
54+ gettext ('{model_name} The model does not support' ).format (model_name = model_name ))
55+ required_keys = ['api_key' , 'secret_key' ]
56+ if api_version == 'v2' :
57+ required_keys = ['api_base' , 'api_key' ]
58+
59+ for key in required_keys :
5360 if key not in model_credential :
5461 if raise_exception :
5562 raise AppApiException (ValidCode .valid_error .value , gettext ('{key} is required' ).format (key = key ))
@@ -64,19 +71,47 @@ def is_valid(self, model_type: str, model_name, model_credential: Dict[str, obje
6471 return True
6572
6673 def encryption_dict (self , model_info : Dict [str , object ]):
67- return {** model_info , 'secret_key' : super ().encryption (model_info .get ('secret_key' , '' ))}
74+ # 根据api_version加密不同字段
75+ api_version = model_info .get ('api_version' , 'v1' )
76+ if api_version == 'v1' :
77+ return {** model_info , 'secret_key' : super ().encryption (model_info .get ('secret_key' , '' ))}
78+ else : # v2
79+ return {** model_info , 'api_key' : super ().encryption (model_info .get ('api_key' , '' ))}
6880
6981 def build_model (self , model_info : Dict [str , object ]):
70- for key in ['api_key' , 'secret_key' , 'model' ]:
71- if key not in model_info :
72- raise AppApiException (500 , gettext ('{key} is required' ).format (key = key ))
73- self .api_key = model_info .get ('api_key' )
74- self .secret_key = model_info .get ('secret_key' )
82+ api_version = model_info .get ('api_version' , 'v1' )
83+ # 根据api_version检查必需字段
84+ if api_version == 'v1' :
85+ for key in ['api_version' , 'api_key' , 'secret_key' , 'model' ]:
86+ if key not in model_info :
87+ raise AppApiException (500 , gettext ('{key} is required' ).format (key = key ))
88+ self .api_key = model_info .get ('api_key' )
89+ self .secret_key = model_info .get ('secret_key' )
90+ else : # v2
91+ for key in ['api_version' , 'api_base' , 'api_key' , 'model' , ]:
92+ if key not in model_info :
93+ raise AppApiException (500 , gettext ('{key} is required' ).format (key = key ))
94+ self .api_base = model_info .get ('api_base' )
95+ self .api_key = model_info .get ('api_key' )
7596 return self
7697
77- api_key = forms .PasswordInputField ('API Key' , required = True )
98+ # 动态字段定义 - 根据api_version显示不同字段
99+ api_version = forms .Radio ('API Version' , required = True , text_field = 'label' , value_field = 'value' ,
100+ option_list = [
101+ {'label' : 'v1' , 'value' : 'v1' },
102+ {'label' : 'v2' , 'value' : 'v2' }
103+ ],
104+ default_value = 'v1' ,
105+ provider = '' ,
106+ method = '' , )
107+
108+ # v2版本字段
109+ api_base = forms .TextInputField ("API Base" , required = False , relation_show_field_dict = {"api_version" : ["v2" ]})
78110
79- secret_key = forms .PasswordInputField ("Secret Key" , required = True )
111+ # v1版本字段
112+ api_key = forms .PasswordInputField ('API Key' , required = False )
113+ secret_key = forms .PasswordInputField ("Secret Key" , required = False ,
114+ relation_show_field_dict = {"api_version" : ["v1" ]})
80115
81116 def get_model_params_setting_form (self , model_name ):
82117 return WenxinLLMModelParams ()
0 commit comments