Skip to content

Commit af9a609

Browse files
Merge branch 'main' into nugets-update
2 parents 46cc961 + 51f4fe5 commit af9a609

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

dotnet/src/Connectors/Connectors.OpenAI.UnitTests/Settings/OpenAIPromptExecutionSettingsTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Text.Json;
6+
using Microsoft.Extensions.AI;
67
using Microsoft.SemanticKernel;
78
using Microsoft.SemanticKernel.ChatCompletion;
89
using Microsoft.SemanticKernel.Connectors.OpenAI;
@@ -88,6 +89,37 @@ public void ItUsesExistingOpenAIExecutionSettings()
8889
Assert.Equal(actualSettings.Modalities, executionSettings.Modalities);
8990
}
9091

92+
[Fact]
93+
public void ItPropagatesValuesToChatOptions()
94+
{
95+
// Arrange
96+
OpenAIPromptExecutionSettings actualSettings = new()
97+
{
98+
ChatSystemPrompt = "chat system prompt",
99+
FrequencyPenalty = 0.7,
100+
MaxTokens = 128,
101+
PresencePenalty = 0.7,
102+
Seed = 123456,
103+
StopSequences = ["foo", "bar"],
104+
Temperature = 0.7,
105+
TopP = 0.7,
106+
};
107+
108+
// Act
109+
ChatOptions? actualOptions = actualSettings.ToChatOptions(null);
110+
111+
// Assert
112+
Assert.NotNull(actualOptions);
113+
Assert.Equal((float)actualSettings.Temperature, (float)actualOptions.Temperature!, 3);
114+
Assert.Equal((float)actualSettings.TopP, (float)actualOptions.TopP!, 3);
115+
Assert.Equal((float)actualSettings.FrequencyPenalty, (float)actualOptions.FrequencyPenalty!, 3);
116+
Assert.Equal((float)actualSettings.PresencePenalty, (float)actualOptions.PresencePenalty!);
117+
Assert.Equal(actualSettings.StopSequences, actualOptions.StopSequences);
118+
Assert.Equal(actualSettings.ChatSystemPrompt, actualOptions.Instructions);
119+
Assert.Equal(actualSettings.MaxTokens, actualOptions.MaxOutputTokens);
120+
Assert.Equal(actualSettings.Seed, actualOptions.Seed);
121+
}
122+
91123
[Fact]
92124
public void ItCanUseOpenAIExecutionSettings()
93125
{

dotnet/src/SemanticKernel.Abstractions/AI/PromptExecutionSettingsExtensions.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ namespace Microsoft.SemanticKernel;
1515
public static class PromptExecutionSettingsExtensions
1616
{
1717
/// <summary>Converts a pair of <see cref="PromptExecutionSettings"/> and <see cref="Kernel"/> to a <see cref="ChatOptions"/>.</summary>
18+
[return: NotNullIfNotNull(nameof(settings))]
1819
public static ChatOptions? ToChatOptions(this PromptExecutionSettings? settings, Kernel? kernel)
1920
{
2021
if (settings is null)
@@ -88,6 +89,13 @@ public static class PromptExecutionSettingsExtensions
8889
{
8990
options.StopSequences = stopSequences;
9091
}
92+
else if ((entry.Key.Equals("chat_system_prompt", StringComparison.OrdinalIgnoreCase) ||
93+
entry.Key.Equals("chat_developer_prompt", StringComparison.OrdinalIgnoreCase) ||
94+
entry.Key.Equals("systemInstruction", StringComparison.OrdinalIgnoreCase)) &&
95+
TryConvert(entry.Value, out string? systemInstructions))
96+
{
97+
options.Instructions = systemInstructions;
98+
}
9199
else if (entry.Key.Equals("response_format", StringComparison.OrdinalIgnoreCase) &&
92100
entry.Value is { } responseFormat)
93101
{

0 commit comments

Comments
 (0)