From d8de1a047e9080da14195f46300b43ccc6098ce8 Mon Sep 17 00:00:00 2001 From: Hardik Kaurani Date: Sun, 1 Nov 2026 22:49:55 +0530 Subject: [PATCH 1/3] test(python): add regression tests for KernelParameterMetadata type alias and default schema --- .../functions/test_kernel_parameter_metadata.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/python/tests/unit/functions/test_kernel_parameter_metadata.py b/python/tests/unit/functions/test_kernel_parameter_metadata.py index 8a1e232d9aaa..47621b19ff2a 100644 --- a/python/tests/unit/functions/test_kernel_parameter_metadata.py +++ b/python/tests/unit/functions/test_kernel_parameter_metadata.py @@ -20,6 +20,7 @@ def test_kernel_parameter_metadata_init(): assert metadata.description == "description" assert metadata.is_required is True assert metadata.default_value == "default" + assert metadata.schema_data == {"type": "string", "description": "description (default value: default)"} def test_kernel_parameter_metadata_valid(): @@ -65,3 +66,17 @@ def test_kernel_parameter_metadata_without_schema_data(): def test_kernel_parameter_metadata_with_partial_data(): metadata = KernelParameterMetadata(name="param5", type_="float", default_value=3.14) assert metadata.schema_data == {"type": "number", "description": "(default value: 3.14)"} + + +def test_kernel_parameter_metadata_infer_schema_with_type_alias(): + metadata = KernelParameterMetadata( + name="param_alias", type="int", default_value=42, description="An integer parameter" + ) + assert metadata.type_ == "int" + assert metadata.schema_data == {"type": "integer", "description": "An integer parameter (default value: 42)"} + + +def test_kernel_parameter_metadata_infer_schema_with_default_type(): + metadata = KernelParameterMetadata(name="param_default") + assert metadata.type_ == "str" + assert metadata.schema_data == {"type": "string"} From 1bec7b85ef340eb576848d587cf9590c256b6fd9 Mon Sep 17 00:00:00 2001 From: Hardik Kaurani Date: Sun, 1 Nov 2026 22:51:13 +0530 Subject: [PATCH 2/3] fix(python): respect type alias and default type in KernelParameterMetadata schema inference --- python/semantic_kernel/functions/kernel_parameter_metadata.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/semantic_kernel/functions/kernel_parameter_metadata.py b/python/semantic_kernel/functions/kernel_parameter_metadata.py index 1a487490e282..efe04475f66c 100644 --- a/python/semantic_kernel/functions/kernel_parameter_metadata.py +++ b/python/semantic_kernel/functions/kernel_parameter_metadata.py @@ -27,7 +27,9 @@ def form_schema(cls, data: Any) -> Any: """Create a schema for the parameter metadata.""" if isinstance(data, dict) and data.get("schema_data") is None: type_object = data.get("type_object", None) - type_ = data.get("type_", None) + type_ = data.get("type_") or data.get("type") + if type_ is None and type_object is None and "type_" not in data and "type" not in data: + type_ = "str" default_value = data.get("default_value", None) description = data.get("description", None) inferred_schema = cls.infer_schema(type_object, type_, default_value, description) From da47f2743ec475791954ec0a5fa9b550667c8cb9 Mon Sep 17 00:00:00 2001 From: Hardik Kaurani Date: Mon, 2 Nov 2026 19:58:32 +0530 Subject: [PATCH 3/3] fix(python): preserve explicit empty-string parameter types in schema inference --- .../functions/kernel_parameter_metadata.py | 9 ++++++--- .../unit/functions/test_kernel_parameter_metadata.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/python/semantic_kernel/functions/kernel_parameter_metadata.py b/python/semantic_kernel/functions/kernel_parameter_metadata.py index efe04475f66c..563909bcde47 100644 --- a/python/semantic_kernel/functions/kernel_parameter_metadata.py +++ b/python/semantic_kernel/functions/kernel_parameter_metadata.py @@ -27,9 +27,12 @@ def form_schema(cls, data: Any) -> Any: """Create a schema for the parameter metadata.""" if isinstance(data, dict) and data.get("schema_data") is None: type_object = data.get("type_object", None) - type_ = data.get("type_") or data.get("type") - if type_ is None and type_object is None and "type_" not in data and "type" not in data: - type_ = "str" + if "type_" in data: + type_ = data["type_"] + elif "type" in data: + type_ = data["type"] + else: + type_ = "str" if type_object is None else None default_value = data.get("default_value", None) description = data.get("description", None) inferred_schema = cls.infer_schema(type_object, type_, default_value, description) diff --git a/python/tests/unit/functions/test_kernel_parameter_metadata.py b/python/tests/unit/functions/test_kernel_parameter_metadata.py index 47621b19ff2a..af1cf82bb4fc 100644 --- a/python/tests/unit/functions/test_kernel_parameter_metadata.py +++ b/python/tests/unit/functions/test_kernel_parameter_metadata.py @@ -80,3 +80,15 @@ def test_kernel_parameter_metadata_infer_schema_with_default_type(): metadata = KernelParameterMetadata(name="param_default") assert metadata.type_ == "str" assert metadata.schema_data == {"type": "string"} + + +def test_kernel_parameter_metadata_infer_schema_with_explicit_empty_type_(): + metadata = KernelParameterMetadata(name="param_empty", type_="") + assert metadata.type_ == "" + assert metadata.schema_data == {"type": "object"} + + +def test_kernel_parameter_metadata_infer_schema_with_explicit_empty_type_alias(): + metadata = KernelParameterMetadata(name="param_empty_alias", type="") + assert metadata.type_ == "" + assert metadata.schema_data == {"type": "object"}