From 06a690685f2460e405cc7b4fd6176ea668cfe04d Mon Sep 17 00:00:00 2001 From: Roger Barreto <19890735+rogerbarreto@users.noreply.github.com> Date: Wed, 25 Jun 2025 20:50:29 +0100 Subject: [PATCH] .Net: Add Reasoning Model Integration tests (#100) * Add reasoning integration tests * Adding Reasoning Model config --- .github/workflows/dotnet-build-and-test.yml | 1 + dotnet/agent-framework-dotnet.slnx | 234 +++++++++--------- .../IntegrationTests/OpenAIConfiguration.cs | 2 + ...pletionChatClientAgentRunStreamingTests.cs | 8 +- ...AIChatCompletionChatClientAgentRunTests.cs | 8 +- .../OpenAIChatCompletionFixture.cs | 8 +- .../OpenAIChatCompletionRunStreamingTests.cs | 8 +- .../OpenAIChatCompletionRunTests.cs | 8 +- 8 files changed, 158 insertions(+), 119 deletions(-) diff --git a/.github/workflows/dotnet-build-and-test.yml b/.github/workflows/dotnet-build-and-test.yml index 435c623466..44743e6818 100644 --- a/.github/workflows/dotnet-build-and-test.yml +++ b/.github/workflows/dotnet-build-and-test.yml @@ -135,6 +135,7 @@ jobs: # OpenAI Models OpenAI__ApiKey: ${{ secrets.OPENAI__APIKEY }} OpenAI__ChatModelId: ${{ vars.OPENAI__CHATMODELID }} + OpenAI__ChatReasoningModelId: ${{ vars.OPENAI__CHATREASONINGMODELID }} OpenAIEmbeddings__ApiKey: ${{ secrets.OPENAIEMBEDDINGS__APIKEY }} OpenAIEmbeddings__ModelId: ${{ vars.OPENAIEMBEDDINGS__MODELID }} OpenAITextToAudio__ApiKey: ${{ secrets.OPENAITEXTTOAUDIO__APIKEY }} diff --git a/dotnet/agent-framework-dotnet.slnx b/dotnet/agent-framework-dotnet.slnx index a79f2a4306..630b939de0 100644 --- a/dotnet/agent-framework-dotnet.slnx +++ b/dotnet/agent-framework-dotnet.slnx @@ -1,114 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dotnet/src/Shared/IntegrationTests/OpenAIConfiguration.cs b/dotnet/src/Shared/IntegrationTests/OpenAIConfiguration.cs index fc8357109b..34bc08330e 100644 --- a/dotnet/src/Shared/IntegrationTests/OpenAIConfiguration.cs +++ b/dotnet/src/Shared/IntegrationTests/OpenAIConfiguration.cs @@ -11,5 +11,7 @@ internal sealed class OpenAIConfiguration public string ChatModelId { get; set; } + public string ChatReasoningModelId { get; set; } + public string ApiKey { get; set; } } diff --git a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunStreamingTests.cs b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunStreamingTests.cs index bcb2824a5a..4e3d573b9f 100644 --- a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunStreamingTests.cs +++ b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunStreamingTests.cs @@ -4,6 +4,12 @@ using AgentConformance.IntegrationTests; namespace OpenAIChatCompletion.IntegrationTests; -public class OpenAIChatCompletionChatClientAgentRunStreamingTests() : ChatClientAgentRunStreamingTests(() => new()) +public class OpenAIChatCompletionChatClientAgentRunStreamingTests() + : ChatClientAgentRunStreamingTests(() => new(useReasoningChatModel: false)) +{ +} + +public class OpenAIChatCompletionChatClientAgentReasoningRunStreamingTests() + : ChatClientAgentRunStreamingTests(() => new(useReasoningChatModel: true)) { } diff --git a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunTests.cs b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunTests.cs index 5602204af8..c8716f83e1 100644 --- a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunTests.cs +++ b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionChatClientAgentRunTests.cs @@ -4,6 +4,12 @@ using AgentConformance.IntegrationTests; namespace OpenAIChatCompletion.IntegrationTests; -public class OpenAIChatCompletionChatClientAgentRunTests() : ChatClientAgentRunTests(() => new()) +public class OpenAIChatCompletionChatClientAgentRunTests() + : ChatClientAgentRunTests(() => new(useReasoningChatModel: false)) +{ +} + +public class OpenAIChatCompletionChatClientAgentReasoningRunTests() + : ChatClientAgentRunTests(() => new(useReasoningChatModel: true)) { } diff --git a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionFixture.cs b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionFixture.cs index c88e774b38..0b68e2ecf7 100644 --- a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionFixture.cs +++ b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionFixture.cs @@ -16,9 +16,15 @@ namespace OpenAIChatCompletion.IntegrationTests; public class OpenAIChatCompletionFixture : IChatClientAgentFixture { private static readonly OpenAIConfiguration s_config = TestConfiguration.LoadSection(); + private readonly bool _useReasoningModel; #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable. private ChatClientAgent _agent; + + public OpenAIChatCompletionFixture(bool useReasoningChatModel) + { + this._useReasoningModel = useReasoningChatModel; + } #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable. public Agent Agent => this._agent; @@ -41,7 +47,7 @@ public class OpenAIChatCompletionFixture : IChatClientAgentFixture IList? aiTools = null) { var chatClient = new OpenAIClient(s_config.ApiKey) - .GetChatClient(s_config.ChatModelId) + .GetChatClient(this._useReasoningModel ? s_config.ChatReasoningModelId : s_config.ChatModelId) .AsIChatClient(); return Task.FromResult(new ChatClientAgent(chatClient, new() diff --git a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunStreamingTests.cs b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunStreamingTests.cs index dac192ba5d..3fe381b58c 100644 --- a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunStreamingTests.cs +++ b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunStreamingTests.cs @@ -4,6 +4,12 @@ using AgentConformance.IntegrationTests; namespace OpenAIChatCompletion.IntegrationTests; -public class OpenAIChatCompletionRunStreamingTests() : RunStreamingTests(() => new()) +public class OpenAIChatCompletionRunStreamingTests() + : RunStreamingTests(() => new(useReasoningChatModel: false)) +{ +} + +public class OpenAIChatCompletionReasoningRunStreamingTests() + : RunStreamingTests(() => new(useReasoningChatModel: true)) { } diff --git a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunTests.cs b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunTests.cs index 3de2d9b90d..7eff89dfe4 100644 --- a/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunTests.cs +++ b/dotnet/tests/OpenAIChatCompletion.IntegrationTests/OpenAIChatCompletionRunTests.cs @@ -4,6 +4,12 @@ using AgentConformance.IntegrationTests; namespace OpenAIChatCompletion.IntegrationTests; -public class OpenAIChatCompletionRunTests() : RunTests(() => new()) +public class OpenAIChatCompletionRunTests() + : RunTests(() => new(useReasoningChatModel: false)) +{ +} + +public class OpenAIChatCompletionReasoningRunTests() + : RunTests(() => new(useReasoningChatModel: true)) { }