Skip to content

Commit

Permalink
Unit tests added
Browse files Browse the repository at this point in the history
  • Loading branch information
futzy314 committed Nov 20, 2023
1 parent 060d7c2 commit b2bf59d
Show file tree
Hide file tree
Showing 3 changed files with 277 additions and 0 deletions.
1 change: 1 addition & 0 deletions LLama.Unittest/LLama.Unittest.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
</Target>

<ItemGroup>
<ProjectReference Include="..\LLama.SemanticKernel\LLamaSharp.SemanticKernel.csproj" />
<ProjectReference Include="..\LLama\LLamaSharp.csproj" />
</ItemGroup>

Expand Down
107 changes: 107 additions & 0 deletions LLama.Unittest/SemanticKernel/ChatRequestSettingsConverterTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
using LLamaSharp.SemanticKernel.ChatCompletion;
using System.Text.Json;

namespace LLama.Unittest.SemanticKernel
{
public class ChatRequestSettingsConverterTests
{
[Fact]
public void ChatRequestSettingsConverter_DeserializeWithDefaults()
{
// Arrange
var options = new JsonSerializerOptions();
options.Converters.Add(new ChatRequestSettingsConverter());
var json = "{}";

// Act
var requestSettings = JsonSerializer.Deserialize<ChatRequestSettings>(json, options);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(0, requestSettings.FrequencyPenalty);
Assert.Null(requestSettings.MaxTokens);
Assert.Equal(0, requestSettings.PresencePenalty);
Assert.Equal(1, requestSettings.ResultsPerPrompt);
Assert.NotNull(requestSettings.StopSequences);
Assert.Empty(requestSettings.StopSequences);
Assert.Equal(0, requestSettings.Temperature);
Assert.NotNull(requestSettings.TokenSelectionBiases);
Assert.Empty(requestSettings.TokenSelectionBiases);
Assert.Equal(0, requestSettings.TopP);
}

[Fact]
public void ChatRequestSettingsConverter_DeserializeWithSnakeCase()
{
// Arrange
var options = new JsonSerializerOptions();
options.AllowTrailingCommas = true;
options.Converters.Add(new ChatRequestSettingsConverter());
var json = @"{
""frequency_penalty"": 0.5,
""max_tokens"": 250,
""presence_penalty"": 0.5,
""results_per_prompt"": -1,
""stop_sequences"": [ ""foo"", ""bar"" ],
""temperature"": 0.5,
""token_selection_biases"": { ""1"": 2, ""3"": 4 },
""top_p"": 0.5,
}";

// Act
var requestSettings = JsonSerializer.Deserialize<ChatRequestSettings>(json, options);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(0.5, requestSettings.FrequencyPenalty);
Assert.Equal(250, requestSettings.MaxTokens);
Assert.Equal(0.5, requestSettings.PresencePenalty);
Assert.Equal(-1, requestSettings.ResultsPerPrompt);
Assert.NotNull(requestSettings.StopSequences);
Assert.Contains("foo", requestSettings.StopSequences);
Assert.Contains("bar", requestSettings.StopSequences);
Assert.Equal(0.5, requestSettings.Temperature);
Assert.NotNull(requestSettings.TokenSelectionBiases);
Assert.Equal(2, requestSettings.TokenSelectionBiases[1]);
Assert.Equal(4, requestSettings.TokenSelectionBiases[3]);
Assert.Equal(0.5, requestSettings.TopP);
}

[Fact]
public void ChatRequestSettingsConverter_DeserializeWithPascalCase()
{
// Arrange
var options = new JsonSerializerOptions();
options.AllowTrailingCommas = true;
options.Converters.Add(new ChatRequestSettingsConverter());
var json = @"{
""FrequencyPenalty"": 0.5,
""MaxTokens"": 250,
""PresencePenalty"": 0.5,
""ResultsPerPrompt"": -1,
""StopSequences"": [ ""foo"", ""bar"" ],
""Temperature"": 0.5,
""TokenSelectionBiases"": { ""1"": 2, ""3"": 4 },
""TopP"": 0.5,
}";

// Act
var requestSettings = JsonSerializer.Deserialize<ChatRequestSettings>(json, options);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(0.5, requestSettings.FrequencyPenalty);
Assert.Equal(250, requestSettings.MaxTokens);
Assert.Equal(0.5, requestSettings.PresencePenalty);
Assert.Equal(-1, requestSettings.ResultsPerPrompt);
Assert.NotNull(requestSettings.StopSequences);
Assert.Contains("foo", requestSettings.StopSequences);
Assert.Contains("bar", requestSettings.StopSequences);
Assert.Equal(0.5, requestSettings.Temperature);
Assert.NotNull(requestSettings.TokenSelectionBiases);
Assert.Equal(2, requestSettings.TokenSelectionBiases[1]);
Assert.Equal(4, requestSettings.TokenSelectionBiases[3]);
Assert.Equal(0.5, requestSettings.TopP);
}
}
}
169 changes: 169 additions & 0 deletions LLama.Unittest/SemanticKernel/ChatRequestSettingsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
using LLamaSharp.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.AI;

namespace LLama.Unittest.SemanticKernel
{
public class ChatRequestSettingsTests
{
[Fact]
public void ChatRequestSettings_FromRequestSettingsNull()
{
// Arrange
// Act
var requestSettings = ChatRequestSettings.FromRequestSettings(null, null);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(0, requestSettings.FrequencyPenalty);
Assert.Null(requestSettings.MaxTokens);
Assert.Equal(0, requestSettings.PresencePenalty);
Assert.Equal(1, requestSettings.ResultsPerPrompt);
Assert.NotNull(requestSettings.StopSequences);
Assert.Empty(requestSettings.StopSequences);
Assert.Equal(0, requestSettings.Temperature);
Assert.NotNull(requestSettings.TokenSelectionBiases);
Assert.Empty(requestSettings.TokenSelectionBiases);
Assert.Equal(0, requestSettings.TopP);
}

[Fact]
public void ChatRequestSettings_FromRequestSettingsNullWithMaxTokens()
{
// Arrange
// Act
var requestSettings = ChatRequestSettings.FromRequestSettings(null, 200);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(0, requestSettings.FrequencyPenalty);
Assert.Equal(200, requestSettings.MaxTokens);
Assert.Equal(0, requestSettings.PresencePenalty);
Assert.Equal(1, requestSettings.ResultsPerPrompt);
Assert.NotNull(requestSettings.StopSequences);
Assert.Empty(requestSettings.StopSequences);
Assert.Equal(0, requestSettings.Temperature);
Assert.NotNull(requestSettings.TokenSelectionBiases);
Assert.Empty(requestSettings.TokenSelectionBiases);
Assert.Equal(0, requestSettings.TopP);
}

[Fact]
public void ChatRequestSettings_FromExistingRequestSettings()
{
// Arrange
var originalRequestSettings = new ChatRequestSettings()
{
FrequencyPenalty = 0.5,
MaxTokens = 100,
PresencePenalty = 0.5,
ResultsPerPrompt = -1,
StopSequences = new[] { "foo", "bar" },
Temperature = 0.5,
TokenSelectionBiases = new Dictionary<int, int>() { { 1, 2 }, { 3, 4 } },
TopP = 0.5,
};

// Act
var requestSettings = ChatRequestSettings.FromRequestSettings(originalRequestSettings);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(originalRequestSettings, requestSettings);
}

[Fact]
public void ChatRequestSettings_FromAIRequestSettings()
{
// Arrange
var originalRequestSettings = new AIRequestSettings()
{
ServiceId = "test",
};

// Act
var requestSettings = ChatRequestSettings.FromRequestSettings(originalRequestSettings);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(originalRequestSettings.ServiceId, requestSettings.ServiceId);
}

[Fact]
public void ChatRequestSettings_FromAIRequestSettingsWithExtraPropertiesInSnakeCase()
{
// Arrange
var originalRequestSettings = new AIRequestSettings()
{
ServiceId = "test",
ExtensionData = new Dictionary<string, object>
{
{ "frequency_penalty", 0.5 },
{ "max_tokens", 250 },
{ "presence_penalty", 0.5 },
{ "results_per_prompt", -1 },
{ "stop_sequences", new [] { "foo", "bar" } },
{ "temperature", 0.5 },
{ "token_selection_biases", new Dictionary<int, int>() { { 1, 2 }, { 3, 4 } } },
{ "top_p", 0.5 },
}
};

// Act
var requestSettings = ChatRequestSettings.FromRequestSettings(originalRequestSettings);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(0.5, requestSettings.FrequencyPenalty);
Assert.Equal(250, requestSettings.MaxTokens);
Assert.Equal(0.5, requestSettings.PresencePenalty);
Assert.Equal(-1, requestSettings.ResultsPerPrompt);
Assert.NotNull(requestSettings.StopSequences);
Assert.Contains("foo", requestSettings.StopSequences);
Assert.Contains("bar", requestSettings.StopSequences);
Assert.Equal(0.5, requestSettings.Temperature);
Assert.NotNull(requestSettings.TokenSelectionBiases);
Assert.Equal(2, requestSettings.TokenSelectionBiases[1]);
Assert.Equal(4, requestSettings.TokenSelectionBiases[3]);
Assert.Equal(0.5, requestSettings.TopP);
}

[Fact]
public void ChatRequestSettings_FromAIRequestSettingsWithExtraPropertiesInPascalCase()
{
// Arrange
var originalRequestSettings = new AIRequestSettings()
{
ServiceId = "test",
ExtensionData = new Dictionary<string, object>
{
{ "FrequencyPenalty", 0.5 },
{ "MaxTokens", 250 },
{ "PresencePenalty", 0.5 },
{ "ResultsPerPrompt", -1 },
{ "StopSequences", new [] { "foo", "bar" } },
{ "Temperature", 0.5 },
{ "TokenSelectionBiases", new Dictionary<int, int>() { { 1, 2 }, { 3, 4 } } },
{ "TopP", 0.5 },
}
};

// Act
var requestSettings = ChatRequestSettings.FromRequestSettings(originalRequestSettings);

// Assert
Assert.NotNull(requestSettings);
Assert.Equal(0.5, requestSettings.FrequencyPenalty);
Assert.Equal(250, requestSettings.MaxTokens);
Assert.Equal(0.5, requestSettings.PresencePenalty);
Assert.Equal(-1, requestSettings.ResultsPerPrompt);
Assert.NotNull(requestSettings.StopSequences);
Assert.Contains("foo", requestSettings.StopSequences);
Assert.Contains("bar", requestSettings.StopSequences);
Assert.Equal(0.5, requestSettings.Temperature);
Assert.NotNull(requestSettings.TokenSelectionBiases);
Assert.Equal(2, requestSettings.TokenSelectionBiases[1]);
Assert.Equal(4, requestSettings.TokenSelectionBiases[3]);
Assert.Equal(0.5, requestSettings.TopP);
}
}
}

0 comments on commit b2bf59d

Please sign in to comment.