Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

.Net: AzureOpenAIChatCompletionService Functionality Cleanup #7024

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ namespace SemanticKernel.Connectors.AzureOpenAI.UnitTests;
/// <summary>
/// Unit tests of AzureOpenAIPromptExecutionSettingsTests
/// </summary>
public class AzureOpenAIPromptExecutionSettingsTests
public class AzureOpenAIChatCompletionExecutionSettingsTests
{
[Fact]
public void ItCreatesOpenAIExecutionSettingsWithCorrectDefaults()
{
// Arrange
// Act
AzureOpenAIPromptExecutionSettings executionSettings = AzureOpenAIPromptExecutionSettings.FromExecutionSettings(null, 128);
AzureOpenAIChatCompletionExecutionSettings executionSettings = AzureOpenAIChatCompletionExecutionSettings.FromExecutionSettings(null, 128);

// Assert
Assert.NotNull(executionSettings);
Expand All @@ -38,7 +38,7 @@ public void ItCreatesOpenAIExecutionSettingsWithCorrectDefaults()
public void ItUsesExistingOpenAIExecutionSettings()
{
// Arrange
AzureOpenAIPromptExecutionSettings actualSettings = new()
AzureOpenAIChatCompletionExecutionSettings actualSettings = new()
{
Temperature = 0.7,
TopP = 0.7,
Expand All @@ -53,7 +53,7 @@ public void ItUsesExistingOpenAIExecutionSettings()
};

// Act
AzureOpenAIPromptExecutionSettings executionSettings = AzureOpenAIPromptExecutionSettings.FromExecutionSettings(actualSettings);
AzureOpenAIChatCompletionExecutionSettings executionSettings = AzureOpenAIChatCompletionExecutionSettings.FromExecutionSettings(actualSettings);

// Assert
Assert.NotNull(executionSettings);
Expand All @@ -73,7 +73,7 @@ public void ItCanUseOpenAIExecutionSettings()
};

// Act
AzureOpenAIPromptExecutionSettings executionSettings = AzureOpenAIPromptExecutionSettings.FromExecutionSettings(actualSettings, null);
AzureOpenAIChatCompletionExecutionSettings executionSettings = AzureOpenAIChatCompletionExecutionSettings.FromExecutionSettings(actualSettings, null);

// Assert
Assert.NotNull(executionSettings);
Expand Down Expand Up @@ -105,7 +105,7 @@ public void ItCreatesOpenAIExecutionSettingsFromExtraPropertiesSnakeCase()
};

// Act
AzureOpenAIPromptExecutionSettings executionSettings = AzureOpenAIPromptExecutionSettings.FromExecutionSettings(actualSettings, null);
AzureOpenAIChatCompletionExecutionSettings executionSettings = AzureOpenAIChatCompletionExecutionSettings.FromExecutionSettings(actualSettings, null);

// Assert
AssertExecutionSettings(executionSettings);
Expand Down Expand Up @@ -135,7 +135,7 @@ public void ItCreatesOpenAIExecutionSettingsFromExtraPropertiesAsStrings()
};

// Act
AzureOpenAIPromptExecutionSettings executionSettings = AzureOpenAIPromptExecutionSettings.FromExecutionSettings(actualSettings, null);
AzureOpenAIChatCompletionExecutionSettings executionSettings = AzureOpenAIChatCompletionExecutionSettings.FromExecutionSettings(actualSettings, null);

// Assert
AssertExecutionSettings(executionSettings);
Expand Down Expand Up @@ -164,7 +164,7 @@ public void ItCreatesOpenAIExecutionSettingsFromJsonSnakeCase()
var actualSettings = JsonSerializer.Deserialize<PromptExecutionSettings>(json);

// Act
AzureOpenAIPromptExecutionSettings executionSettings = AzureOpenAIPromptExecutionSettings.FromExecutionSettings(actualSettings);
AzureOpenAIChatCompletionExecutionSettings executionSettings = AzureOpenAIChatCompletionExecutionSettings.FromExecutionSettings(actualSettings);

// Assert
AssertExecutionSettings(executionSettings);
Expand All @@ -176,7 +176,7 @@ public void ItCreatesOpenAIExecutionSettingsFromJsonSnakeCase()
public void ItUsesCorrectChatSystemPrompt(string chatSystemPrompt, string expectedChatSystemPrompt)
{
// Arrange & Act
var settings = new AzureOpenAIPromptExecutionSettings { ChatSystemPrompt = chatSystemPrompt };
var settings = new AzureOpenAIChatCompletionExecutionSettings { ChatSystemPrompt = chatSystemPrompt };

// Assert
Assert.Equal(expectedChatSystemPrompt, settings.ChatSystemPrompt);
Expand All @@ -195,7 +195,7 @@ public void PromptExecutionSettingsCloneWorksAsExpected()
"frequency_penalty": 0.0
}
""";
var executionSettings = JsonSerializer.Deserialize<AzureOpenAIPromptExecutionSettings>(configPayload);
var executionSettings = JsonSerializer.Deserialize<AzureOpenAIChatCompletionExecutionSettings>(configPayload);

// Act
var clone = executionSettings!.Clone();
Expand All @@ -221,7 +221,7 @@ public void PromptExecutionSettingsFreezeWorksAsExpected()
"token_selection_biases": { "1": 2, "3": 4 }
}
""";
var executionSettings = JsonSerializer.Deserialize<AzureOpenAIPromptExecutionSettings>(configPayload);
var executionSettings = JsonSerializer.Deserialize<AzureOpenAIChatCompletionExecutionSettings>(configPayload);

// Act
executionSettings!.Freeze();
Expand All @@ -242,17 +242,17 @@ public void PromptExecutionSettingsFreezeWorksAsExpected()
public void FromExecutionSettingsWithDataDoesNotIncludeEmptyStopSequences()
{
// Arrange
var executionSettings = new AzureOpenAIPromptExecutionSettings { StopSequences = [] };
var executionSettings = new AzureOpenAIChatCompletionExecutionSettings { StopSequences = [] };

// Act
#pragma warning disable CS0618 // AzureOpenAIChatCompletionWithData is deprecated in favor of OpenAIPromptExecutionSettings.AzureChatExtensionsOptions
var executionSettingsWithData = AzureOpenAIPromptExecutionSettings.FromExecutionSettingsWithData(executionSettings);
var executionSettingsWithData = AzureOpenAIChatCompletionExecutionSettings.FromExecutionSettingsWithData(executionSettings);
#pragma warning restore CS0618
// Assert
Assert.Null(executionSettingsWithData.StopSequences);
}

private static void AssertExecutionSettings(AzureOpenAIPromptExecutionSettings executionSettings)
private static void AssertExecutionSettings(AzureOpenAIChatCompletionExecutionSettings executionSettings)
{
Assert.NotNull(executionSettings);
Assert.Equal(0.7, executionSettings.Temperature);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ public async Task GetChatMessageContentsHandlesSettingsCorrectlyAsync()
{
// Arrange
var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient);
var settings = new AzureOpenAIPromptExecutionSettings()
var settings = new AzureOpenAIChatCompletionExecutionSettings()
{
MaxTokens = 123,
Temperature = 0.6,
Expand Down Expand Up @@ -212,7 +212,7 @@ public async Task GetChatMessageContentsHandlesResponseFormatCorrectlyAsync(obje
{
// Arrange
var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient);
var settings = new AzureOpenAIPromptExecutionSettings
var settings = new AzureOpenAIChatCompletionExecutionSettings
{
ResponseFormat = responseFormat
};
Expand Down Expand Up @@ -242,7 +242,7 @@ public async Task GetChatMessageContentsWorksCorrectlyAsync(AzureOpenAIToolCallB
// Arrange
var kernel = Kernel.CreateBuilder().Build();
var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient);
var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = behavior };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = behavior };

this._messageHandlerStub.ResponsesToReturn.Add(new HttpResponseMessage(HttpStatusCode.OK)
{
Expand Down Expand Up @@ -288,7 +288,7 @@ public async Task GetChatMessageContentsWithFunctionCallAsync()
kernel.Plugins.Add(KernelPluginFactory.CreateFromFunctions("MyPlugin", [function1, function2]));

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient, this._mockLoggerFactory.Object);
var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };

using var response1 = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(AzureOpenAITestHelper.GetTestResponse("chat_completion_multiple_function_calls_test_response.json")) };
using var response2 = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(AzureOpenAITestHelper.GetTestResponse("chat_completion_test_response.json")) };
Expand Down Expand Up @@ -324,7 +324,7 @@ public async Task GetChatMessageContentsWithFunctionCallMaximumAutoInvokeAttempt
kernel.Plugins.Add(KernelPluginFactory.CreateFromFunctions("MyPlugin", [function]));

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient, this._mockLoggerFactory.Object);
var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };

var responses = new List<HttpResponseMessage>();

Expand Down Expand Up @@ -361,7 +361,7 @@ public async Task GetChatMessageContentsWithRequiredFunctionCallAsync()
kernel.Plugins.Add(plugin);

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient, this._mockLoggerFactory.Object);
var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.RequireFunction(openAIFunction, autoInvoke: true) };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.RequireFunction(openAIFunction, autoInvoke: true) };

using var response1 = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(AzureOpenAITestHelper.GetTestResponse("chat_completion_single_function_call_test_response.json")) };
using var response2 = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(AzureOpenAITestHelper.GetTestResponse("chat_completion_test_response.json")) };
Expand Down Expand Up @@ -458,7 +458,7 @@ public async Task GetStreamingChatMessageContentsWithFunctionCallAsync()
kernel.Plugins.Add(KernelPluginFactory.CreateFromFunctions("MyPlugin", [function1, function2]));

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient, this._mockLoggerFactory.Object);
var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };

using var response1 = new HttpResponseMessage(HttpStatusCode.OK) { Content = AzureOpenAITestHelper.GetTestResponseAsStream("chat_completion_streaming_multiple_function_calls_test_response.txt") };
using var response2 = new HttpResponseMessage(HttpStatusCode.OK) { Content = AzureOpenAITestHelper.GetTestResponseAsStream("chat_completion_streaming_test_response.txt") };
Expand Down Expand Up @@ -502,7 +502,7 @@ public async Task GetStreamingChatMessageContentsWithFunctionCallMaximumAutoInvo
kernel.Plugins.Add(KernelPluginFactory.CreateFromFunctions("MyPlugin", [function]));

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient, this._mockLoggerFactory.Object);
var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.AutoInvokeKernelFunctions };

var responses = new List<HttpResponseMessage>();

Expand Down Expand Up @@ -541,7 +541,7 @@ public async Task GetStreamingChatMessageContentsWithRequiredFunctionCallAsync()
kernel.Plugins.Add(plugin);

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient, this._mockLoggerFactory.Object);
var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.RequireFunction(openAIFunction, autoInvoke: true) };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.RequireFunction(openAIFunction, autoInvoke: true) };

using var response1 = new HttpResponseMessage(HttpStatusCode.OK) { Content = AzureOpenAITestHelper.GetTestResponseAsStream("chat_completion_streaming_single_function_call_test_response.txt") };
using var response2 = new HttpResponseMessage(HttpStatusCode.OK) { Content = AzureOpenAITestHelper.GetTestResponseAsStream("chat_completion_streaming_test_response.txt") };
Expand Down Expand Up @@ -592,7 +592,7 @@ public async Task GetChatMessageContentsUsesPromptAndSettingsCorrectlyAsync()
const string SystemMessage = "This is test system message";

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient);
var settings = new AzureOpenAIPromptExecutionSettings() { ChatSystemPrompt = SystemMessage };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ChatSystemPrompt = SystemMessage };

this._messageHandlerStub.ResponsesToReturn.Add(new HttpResponseMessage(HttpStatusCode.OK)
{
Expand Down Expand Up @@ -636,7 +636,7 @@ public async Task GetChatMessageContentsWithChatMessageContentItemCollectionAndS
const string CollectionItemPrompt = "This is collection item prompt";

var service = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", "model-id", this._httpClient);
var settings = new AzureOpenAIPromptExecutionSettings() { ChatSystemPrompt = SystemMessage };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ChatSystemPrompt = SystemMessage };

this._messageHandlerStub.ResponsesToReturn.Add(new HttpResponseMessage(HttpStatusCode.OK)
{
Expand Down Expand Up @@ -700,7 +700,7 @@ public async Task FunctionCallsShouldBePropagatedToCallersViaChatMessageItemsOfT
var chatHistory = new ChatHistory();
chatHistory.AddUserMessage("Fake prompt");

var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };

// Act
var result = await sut.GetChatMessageContentAsync(chatHistory, settings);
Expand Down Expand Up @@ -770,7 +770,7 @@ public async Task FunctionCallsShouldBeReturnedToLLMAsync()
new ChatMessageContent(AuthorRole.Assistant, items)
];

var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };

// Act
await sut.GetChatMessageContentAsync(chatHistory, settings);
Expand Down Expand Up @@ -829,7 +829,7 @@ public async Task FunctionResultsCanBeProvidedToLLMAsOneResultPerChatMessageAsyn
])
};

var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };

// Act
await sut.GetChatMessageContentAsync(chatHistory, settings);
Expand Down Expand Up @@ -874,7 +874,7 @@ public async Task FunctionResultsCanBeProvidedToLLMAsManyResultsInOneChatMessage
])
};

var settings = new AzureOpenAIPromptExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };
var settings = new AzureOpenAIChatCompletionExecutionSettings() { ToolCallBehavior = AzureOpenAIToolCallBehavior.EnableKernelFunctions };

// Act
await sut.GetChatMessageContentAsync(chatHistory, settings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public void ConvertToolCallUpdatesWithEmptyIndexesReturnsEmptyToolCalls()
var functionArgumentBuildersByIndex = new Dictionary<int, StringBuilder>();

// Act
var toolCalls = AzureOpenAIFunctionToolCall.ConvertToolCallUpdatesToChatCompletionsFunctionToolCalls(
var toolCalls = AzureOpenAIFunctionToolCall.ConvertToolCallUpdatesToFunctionToolCalls(
ref toolCallIdsByIndex,
ref functionNamesByIndex,
ref functionArgumentBuildersByIndex);
Expand All @@ -64,7 +64,7 @@ public void ConvertToolCallUpdatesWithNotEmptyIndexesReturnsNotEmptyToolCalls()
var functionArgumentBuildersByIndex = new Dictionary<int, StringBuilder> { { 3, new("test-argument") } };

// Act
var toolCalls = AzureOpenAIFunctionToolCall.ConvertToolCallUpdatesToChatCompletionsFunctionToolCalls(
var toolCalls = AzureOpenAIFunctionToolCall.ConvertToolCallUpdatesToFunctionToolCalls(
ref toolCallIdsByIndex,
ref functionNamesByIndex,
ref functionArgumentBuildersByIndex);
Expand Down

This file was deleted.

Loading
Loading