diff --git a/python/semantic_kernel/contents/chat_history.py b/python/semantic_kernel/contents/chat_history.py index a773c232c7bc..3d43e7279b15 100644 --- a/python/semantic_kernel/contents/chat_history.py +++ b/python/semantic_kernel/contents/chat_history.py @@ -215,11 +215,11 @@ def add_message( def _prepare_for_add( self, role: AuthorRole, content: str | None = None, items: list[KernelContent] | None = None, **kwargs: Any - ) -> dict[str, str]: + ) -> dict[str, Any]: """Prepare a message to be added to the history.""" kwargs["role"] = role - if role == AuthorRole.TOOL and content and not items: + if role == AuthorRole.TOOL and content is not None and not items: tool_call_id = kwargs.pop("tool_call_id", None) function_name = kwargs.pop("function_name", "unknown") function_result_content = FunctionResultContent( diff --git a/python/tests/unit/contents/test_chat_history.py b/python/tests/unit/contents/test_chat_history.py index 3c1b92945296..53415582c13a 100644 --- a/python/tests/unit/contents/test_chat_history.py +++ b/python/tests/unit/contents/test_chat_history.py @@ -133,6 +133,22 @@ def test_add_tool_message_to_dict_succeeds(chat_history: ChatHistory): assert result["tool_call_id"] == "call_123" +def test_add_empty_tool_message_to_dict_succeeds(chat_history: ChatHistory): + chat_history.add_tool_message("", tool_call_id="call_123", function_name="test_function") + + msg = chat_history.messages[-1] + assert isinstance(msg.items[0], FunctionResultContent) + assert msg.items[0].result == "" + assert msg.items[0].function_name == "test_function" + assert msg.items[0].id == "call_123" + assert msg.items[0].call_id == "call_123" + + result = msg.to_dict() + assert result["content"] == "" + assert result["role"] == AuthorRole.TOOL + assert result["tool_call_id"] == "call_123" + + def test_add_tool_message_list(chat_history: ChatHistory): content = [FunctionResultContent(id="test", result="Tool message")] chat_history.add_tool_message(content)