diff --git a/dotnet/src/Microsoft.Agents.AI/ChatClient/ChatClientAgent.cs b/dotnet/src/Microsoft.Agents.AI/ChatClient/ChatClientAgent.cs index 5878d877b2..37e673f710 100644 --- a/dotnet/src/Microsoft.Agents.AI/ChatClient/ChatClientAgent.cs +++ b/dotnet/src/Microsoft.Agents.AI/ChatClient/ChatClientAgent.cs @@ -226,7 +226,7 @@ protected override async IAsyncEnumerable RunCoreStreamingA try { // Using the enumerator to ensure we consider the case where no updates are returned for notification. - responseUpdatesEnumerator = chatClient.GetStreamingResponseAsync(inputMessagesForProviders, chatOptions, cancellationToken).GetAsyncEnumerator(cancellationToken); + responseUpdatesEnumerator = chatClient.GetStreamingResponseAsync(inputMessagesForChatClient, chatOptions, cancellationToken).GetAsyncEnumerator(cancellationToken); } catch (Exception ex) { diff --git a/dotnet/tests/Microsoft.Agents.AI.UnitTests/ChatClient/ChatClientAgentTests.cs b/dotnet/tests/Microsoft.Agents.AI.UnitTests/ChatClient/ChatClientAgentTests.cs index 41fb29bfed..c23e8cffaf 100644 --- a/dotnet/tests/Microsoft.Agents.AI.UnitTests/ChatClient/ChatClientAgentTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.UnitTests/ChatClient/ChatClientAgentTests.cs @@ -1320,6 +1320,45 @@ public async Task RunStreamingAsyncUsesChatHistoryProviderWhenNoConversationIdRe mockFactory.Verify(f => f(It.IsAny(), It.IsAny()), Times.Once); } + /// + /// Verify that RunStreamingAsync includes chat history in messages sent to the chat client on subsequent calls. + /// + [Fact] + public async Task RunStreamingAsyncIncludesChatHistoryInMessagesToChatClientAsync() + { + // Arrange + List> capturedMessages = []; + Mock mockService = new(); + ChatResponseUpdate[] returnUpdates = + [ + new ChatResponseUpdate(role: ChatRole.Assistant, content: "response"), + ]; + mockService.Setup( + s => s.GetStreamingResponseAsync( + It.IsAny>(), + It.IsAny(), + It.IsAny())) + .Returns(ToAsyncEnumerableAsync(returnUpdates)) + .Callback, ChatOptions?, CancellationToken>((msgs, _, _) => capturedMessages.Add(msgs.ToList())); + ChatClientAgent agent = new(mockService.Object, options: new() + { + ChatOptions = new() { Instructions = "test instructions" }, + }); + + // Act + ChatClientAgentSession? session = await agent.CreateSessionAsync() as ChatClientAgentSession; + await agent.RunStreamingAsync([new(ChatRole.User, "first")], session).ToListAsync(); + await agent.RunStreamingAsync([new(ChatRole.User, "second")], session).ToListAsync(); + + // Assert - the second call should include chat history (first user message + first response) plus the new message + Assert.Equal(2, capturedMessages.Count); + var secondCallMessages = capturedMessages[1].ToList(); + Assert.Equal(3, secondCallMessages.Count); + Assert.Equal("first", secondCallMessages[0].Text); + Assert.Equal("response", secondCallMessages[1].Text); + Assert.Equal("second", secondCallMessages[2].Text); + } + /// /// Verify that RunStreamingAsync throws when a factory is provided and the chat client returns a conversation id. ///