diff --git a/python/semantic_kernel/agents/chat_completion/chat_completion_agent.py b/python/semantic_kernel/agents/chat_completion/chat_completion_agent.py index 7a42e664be4f..fa5175a7ec7a 100644 --- a/python/semantic_kernel/agents/chat_completion/chat_completion_agent.py +++ b/python/semantic_kernel/agents/chat_completion/chat_completion_agent.py @@ -89,7 +89,10 @@ async def _on_new_message(self, new_message: str | ChatMessageContent) -> None: or "thread_id" not in new_message.metadata or new_message.metadata["thread_id"] != self._id ): - self._chat_history.add_message(new_message) + if isinstance(self._chat_history, ChatHistoryReducer): + await self._chat_history.add_message_async(new_message) + else: + self._chat_history.add_message(new_message) async def get_messages(self) -> AsyncIterable[ChatMessageContent]: """Retrieve the current chat history. diff --git a/python/tests/unit/agents/chat_completion/test_chat_completion_agent.py b/python/tests/unit/agents/chat_completion/test_chat_completion_agent.py index b79af78c2c39..40796a0fa3ce 100644 --- a/python/tests/unit/agents/chat_completion/test_chat_completion_agent.py +++ b/python/tests/unit/agents/chat_completion/test_chat_completion_agent.py @@ -164,6 +164,19 @@ def test_initialize_with_reducer_chat_history(): assert isinstance(thread._chat_history, ChatHistoryTruncationReducer) +async def test_thread_with_reducer_auto_reduces_new_messages(): + reducer = ChatHistoryTruncationReducer(target_count=1, auto_reduce=True) + thread = ChatHistoryAgentThread(chat_history=reducer, thread_id="reducer_test_thread") + + await thread.on_new_message(ChatMessageContent(role=AuthorRole.USER, content="first")) + await thread.on_new_message(ChatMessageContent(role=AuthorRole.ASSISTANT, content="second")) + + messages = [message async for message in thread.get_messages()] + + assert len(messages) == 1 + assert messages[0].content == "second" + + async def test_get_response(kernel_with_ai_service: tuple[Kernel, ChatCompletionClientBase]): kernel, _ = kernel_with_ai_service agent = ChatCompletionAgent(