| 
					
				 | 
			
			
				@@ -1,4 +1,5 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import enum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import importlib 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import logging 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import os 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -6,7 +7,6 @@ from typing import Any, Optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from pydantic import BaseModel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from core.utils.module_import_helper import load_single_subclass_from_source 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.utils.position_helper import sort_to_dict_by_position_map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,9 +73,17 @@ class Extensible: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 # Dynamic loading {subdir_name}.py file and find the subclass of Extensible 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 py_path = os.path.join(subdir_path, extension_name + '.py') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    extension_class = load_single_subclass_from_source(extension_name, py_path, cls) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                except Exception: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                spec = importlib.util.spec_from_file_location(extension_name, py_path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mod = importlib.util.module_from_spec(spec) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                spec.loader.exec_module(mod) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                extension_class = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for name, obj in vars(mod).items(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if isinstance(obj, type) and issubclass(obj, cls) and obj != cls: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        extension_class = obj 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if not extension_class: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     logging.warning(f"Missing subclass of {cls.__name__} in {py_path}, Skip.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |