diff --git a/dotnet/Directory.Packages.props b/dotnet/Directory.Packages.props index 2a7fc3ee9b..11628f4e38 100644 --- a/dotnet/Directory.Packages.props +++ b/dotnet/Directory.Packages.props @@ -19,9 +19,9 @@ - - - + + + diff --git a/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/AgentFrameworkResponseHandler.cs b/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/AgentFrameworkResponseHandler.cs index eaacbc67a3..40ad435382 100644 --- a/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/AgentFrameworkResponseHandler.cs +++ b/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/AgentFrameworkResponseHandler.cs @@ -66,10 +66,10 @@ public class AgentFrameworkResponseHandler : ResponseHandler } // Load and convert current input items - var inputItems = await context.GetInputItemsAsync(cancellationToken).ConfigureAwait(false); + var inputItems = await context.GetInputItemsAsync(cancellationToken: cancellationToken).ConfigureAwait(false); if (inputItems.Count > 0) { - messages.AddRange(InputConverter.ConvertOutputItemsToMessages(inputItems)); + messages.AddRange(InputConverter.ConvertItemsToMessages(inputItems)); } else { diff --git a/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/InputConverter.cs b/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/InputConverter.cs index 10554d4e5c..1d8be8f590 100644 --- a/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/InputConverter.cs +++ b/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/InputConverter.cs @@ -36,6 +36,27 @@ internal static class InputConverter return messages; } + /// + /// Converts resolved SDK input items into instances. + /// + /// The resolved input items from the SDK context. + /// A list of chat messages. + public static List ConvertItemsToMessages(IReadOnlyList items) + { + var messages = new List(); + + foreach (var item in items) + { + var message = ConvertInputItemToMessage(item); + if (message is not null) + { + messages.Add(message); + } + } + + return messages; + } + /// /// Converts resolved SDK history/input items into instances. /// diff --git a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/AgentFrameworkResponseHandlerTests.cs b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/AgentFrameworkResponseHandlerTests.cs index b1bdd31916..eac5c60263 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/AgentFrameworkResponseHandlerTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/AgentFrameworkResponseHandlerTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft. All rights reserved. +// Copyright (c) Microsoft. All rights reserved. using System; using System.Collections.Generic; @@ -43,8 +43,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -82,8 +82,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -116,8 +116,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act & Assert await Assert.ThrowsAsync(async () => @@ -164,8 +164,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -203,8 +203,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -241,8 +241,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -277,8 +277,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act & Assert var ex = await Assert.ThrowsAsync(async () => @@ -310,8 +310,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act & Assert var ex = await Assert.ThrowsAsync(async () => @@ -343,8 +343,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -396,8 +396,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(new OutputItem[] { historyItem }); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -431,20 +431,15 @@ public class AgentFrameworkResponseHandlerTests content = new[] { new { type = "input_text", text = "Raw input" } } } }); - var inputItem = new OutputItemMessage( - id: "input_1", - role: MessageRole.Assistant, - content: [new MessageContentOutputTextContent( - "Resolved input", - Array.Empty(), - Array.Empty())], - status: MessageStatus.Completed); + var inputItem = new ItemMessage( + MessageRole.Assistant, + [new MessageContentInputTextContent("Resolved input")]); var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(new OutputItem[] { inputItem }); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(new Item[] { inputItem }); // Act var events = new List(); @@ -481,8 +476,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -521,8 +516,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -558,8 +553,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act — collect all events var events = new List(); @@ -600,8 +595,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); // Act var events = new List(); @@ -636,8 +631,8 @@ public class AgentFrameworkResponseHandlerTests var mockContext = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mockContext.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mockContext.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); using var cts = new CancellationTokenSource(); cts.Cancel(); diff --git a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/WorkflowIntegrationTests.cs b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/WorkflowIntegrationTests.cs index 66924bdcba..be78f8046d 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/WorkflowIntegrationTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/WorkflowIntegrationTests.cs @@ -383,8 +383,8 @@ public class WorkflowIntegrationTests var mock = new Mock("resp_" + new string('0', 46)) { CallBase = true }; mock.Setup(x => x.GetHistoryAsync(It.IsAny())) .ReturnsAsync(Array.Empty()); - mock.Setup(x => x.GetInputItemsAsync(It.IsAny())) - .ReturnsAsync(Array.Empty()); + mock.Setup(x => x.GetInputItemsAsync(It.IsAny(), It.IsAny())) + .ReturnsAsync(Array.Empty()); return mock; }