diff --git a/src/AzureOpenAIProxy.ApiApp/Models/CreateChatCompletionRequest.cs b/src/AzureOpenAIProxy.ApiApp/Models/CreateChatCompletionRequest.cs new file mode 100644 index 00000000..a7369add --- /dev/null +++ b/src/AzureOpenAIProxy.ApiApp/Models/CreateChatCompletionRequest.cs @@ -0,0 +1,38 @@ +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; +using System.Text.Json; + +namespace AzureOpenAIProxy.ApiApp.Models +{ + public class CreateChatCompletionRequest + { + [JsonPropertyName("messages"), Required] + public List? Messages { get; set; } + + } + + public class ChatCompletionRequestMessage + { + [JsonPropertyName("role"), Required] + public ChatCompletionRequestMessageRole? Role { get; set; } + + [JsonPropertyName("content")] + public string? Content { get; set; } + } + + [JsonConverter(typeof(JsonStringEnumConverter))] + public enum ChatCompletionRequestMessageRole + { + [JsonPropertyName("system")] + System, + + [JsonPropertyName("user")] + User, + + [JsonPropertyName("assistant")] + Assistant, + + [JsonPropertyName("tool")] + Tool, + } +} diff --git a/test/AzureOpenAIProxy.ApiApp.Tests/Models/CreateChatCompletionRequestTests.cs b/test/AzureOpenAIProxy.ApiApp.Tests/Models/CreateChatCompletionRequestTests.cs new file mode 100644 index 00000000..8cd50f88 --- /dev/null +++ b/test/AzureOpenAIProxy.ApiApp.Tests/Models/CreateChatCompletionRequestTests.cs @@ -0,0 +1,47 @@ +using AzureOpenAIProxy.ApiApp.Models; + + + +using System.Text.Json; + + +namespace AzureOpenAIProxy.ApiApp.Tests.Models +{ + public class CreateChatCompletionRequestTests + { + [Fact] + public void Given_ChatCompletionsJson_When_Deserialized_Then_ShouldReturnCreateChatCompletionRequest() + { + // Arrange + var json = @" + { + ""messages"": [ + { + ""role"": ""system"", + ""content"": ""you are a helpful assistant that talks like a pirate"" + }, + { + ""role"": ""user"", + ""content"": ""can you tell me how to care for a parrot?"" + } + ] + }"; + + // Act + var result = JsonSerializer.Deserialize(json); + + // Assert + Assert.NotNull(result); + Assert.NotNull(result.Messages); // Ensure Messages is not null + Assert.Equal(2, result.Messages.Count); + + var firstMessage = result.Messages[0]; + Assert.Equal(ChatCompletionRequestMessageRole.System, firstMessage.Role); + Assert.Equal("you are a helpful assistant that talks like a pirate", firstMessage.Content); + + var secondMessage = result.Messages[1]; + Assert.Equal(ChatCompletionRequestMessageRole.User, secondMessage.Role); + Assert.Equal("can you tell me how to care for a parrot?", secondMessage.Content); + } + } +}