@@ -248,33 +248,52 @@ def is_valid_start_node(self):
248248 def is_valid_model_params (self ):
249249 node_list = [node for node in self .nodes if (
250250 node .type == 'ai-chat-node' or node .type == 'question-node' or node .type == 'parameter-extraction-node' )]
251+
252+ model_ids = []
253+ nodes_requiring_validation = []
251254 for node in node_list :
252255 if (node .properties .get ('node_data' , {}).get ('model_id_type' ) or 'custom' ) == 'reference' :
253256 continue
254- model = QuerySet (Model ).filter (id = node .properties .get ('node_data' , {}).get ('model_id' )).first ()
255- if model is None :
256- raise ValidationError (ErrorDetail (
257- _ ('The node {node} model does not exist' ).format (node = node .properties .get ("stepName" ))))
258- credential = get_model_credential (model .provider , model .model_type , model .model_name )
259- model_params_setting = node .properties .get ('node_data' , {}).get ('model_params_setting' )
260- model_params_setting_form = credential .get_model_params_setting_form (
261- model .model_name )
262- if model_params_setting is None :
263- model_params_setting = model_params_setting_form .get_default_form_data ()
264- node .properties .get ('node_data' , {})['model_params_setting' ] = model_params_setting
265- if node .properties .get ('status' , 200 ) != 200 :
266- raise ValidationError (
267- ErrorDetail (_ ("Node {node} is unavailable" ).format (node = node .properties .get ("stepName" ))))
257+ model_id = node .properties .get ('node_data' , {}).get ('model_id' )
258+ if model_id :
259+ model_ids .append (model_id )
260+ nodes_requiring_validation .append ((node , model_id ))
261+ if model_ids :
262+ models_map = {str (model .id ): model for model in QuerySet (Model ).filter (id__in = model_ids )}
263+ for node , model_id in nodes_requiring_validation :
264+ model = models_map .get (model_id )
265+ if model is None :
266+ raise ValidationError (ErrorDetail (
267+ _ ('The node {node} model does not exist' ).format (node = node .properties .get ("stepName" ))))
268+ credential = get_model_credential (model .provider , model .model_type , model .model_name )
269+ model_params_setting = node .properties .get ('node_data' , {}).get ('model_params_setting' )
270+ model_params_setting_form = credential .get_model_params_setting_form (
271+ model .model_name )
272+ if model_params_setting is None :
273+ model_params_setting = model_params_setting_form .get_default_form_data ()
274+ node .properties .get ('node_data' , {})['model_params_setting' ] = model_params_setting
275+ if node .properties .get ('status' , 200 ) != 200 :
276+ raise ValidationError (
277+ ErrorDetail (_ ("Node {node} is unavailable" ).format (node = node .properties .get ("stepName" ))))
278+
268279 node_list = [node for node in self .nodes if (node .type == 'function-lib-node' )]
280+
281+ function_lib_ids = []
282+ nodes_requiring_tool_validation = []
269283 for node in node_list :
270284 function_lib_id = node .properties .get ('node_data' , {}).get ('function_lib_id' )
271285 if function_lib_id is None :
272286 raise ValidationError (ErrorDetail (
273287 _ ('The library ID of node {node} cannot be empty' ).format (node = node .properties .get ("stepName" ))))
274- f_lib = QuerySet (Tool ).filter (id = function_lib_id ).first ()
275- if f_lib is None :
276- raise ValidationError (ErrorDetail (_ ("The function library for node {node} is not available" ).format (
277- node = node .properties .get ("stepName" ))))
288+ function_lib_ids .append (function_lib_id )
289+ nodes_requiring_tool_validation .append ((node , function_lib_id ))
290+ if function_lib_ids :
291+ tools_map = {str (tool .id ): tool for tool in QuerySet (Tool ).filter (id__in = function_lib_ids )}
292+ for node , function_lib_id in nodes_requiring_tool_validation :
293+ f_lib = tools_map .get (function_lib_id )
294+ if f_lib is None :
295+ raise ValidationError (ErrorDetail (_ ("The function library for node {node} is not available" ).format (
296+ node = node .properties .get ("stepName" ))))
278297
279298 def is_valid_base_node (self ):
280299 base_node_list = [node for node in self .nodes if node .id == 'base-node' ]
0 commit comments