diff --git a/python/semantic_kernel/kernel.py b/python/semantic_kernel/kernel.py index c8789e2e71bd..5c78a40442cd 100644 --- a/python/semantic_kernel/kernel.py +++ b/python/semantic_kernel/kernel.py @@ -590,47 +590,6 @@ def register_semantic_function( return function - def register_native_function( - self, - plugin_name: Optional[str], - kernel_function: Callable, - ) -> KernelFunction: - """ - Creates a native function from the plugin name and kernel function - - Args: - plugin_name (Optional[str]): The name of the plugin. If empty, a random name will be generated. - kernel_function (Callable): The kernel function - - Returns: - KernelFunction: The created native function - """ - if not hasattr(kernel_function, "__kernel_function__"): - raise KernelException( - KernelException.ErrorCodes.InvalidFunctionType, - "kernel_function argument must be decorated with @kernel_function", - ) - function_name = kernel_function.__kernel_function_name__ - - if plugin_name is None or plugin_name == "": - plugin_name = f"p_{generate_random_ascii_name()}" - assert plugin_name is not None # for type checker - - validate_plugin_name(plugin_name) - validate_function_name(function_name) - - if plugin_name in self.plugins and function_name in self.plugins[plugin_name]: - raise KernelException( - KernelException.ErrorCodes.FunctionOverloadNotSupported, - "Overloaded functions are not supported, " "please differentiate function names.", - ) - - function = KernelFunction.from_native_method(kernel_function, plugin_name) - self.add_plugin(plugin_name, [function]) - function.set_default_plugin_collection(self.plugins) - - return function - def create_semantic_function( self, prompt_template: str, @@ -676,6 +635,47 @@ def _create_semantic_function( return function + def register_native_function( + self, + plugin_name: Optional[str], + kernel_function: Callable, + ) -> KernelFunction: + """ + Creates a native function from the plugin name and kernel function + + Args: + plugin_name (Optional[str]): The name of the plugin. If empty, a random name will be generated. + kernel_function (Callable): The kernel function + + Returns: + KernelFunction: The created native function + """ + if not hasattr(kernel_function, "__kernel_function__"): + raise KernelException( + KernelException.ErrorCodes.InvalidFunctionType, + "kernel_function argument must be decorated with @kernel_function", + ) + function_name = kernel_function.__kernel_function_name__ + + if plugin_name is None or plugin_name == "": + plugin_name = f"p_{generate_random_ascii_name()}" + assert plugin_name is not None # for type checker + + validate_plugin_name(plugin_name) + validate_function_name(function_name) + + if plugin_name in self.plugins and function_name in self.plugins[plugin_name]: + raise KernelException( + KernelException.ErrorCodes.FunctionOverloadNotSupported, + "Overloaded functions are not supported, " "please differentiate function names.", + ) + + function = KernelFunction.from_native_method(kernel_function, plugin_name) + self.add_plugin(plugin_name, [function]) + function.set_default_plugin_collection(self.plugins) + + return function + # endregion # region Services