From 39417424d2541ce7e3ea44fb5139f4ba1f436d84 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Thu, 12 Sep 2024 23:53:02 +0900 Subject: [PATCH] Add more chat components --- .../Models/AdminResourceDetails.cs | 3 +- .../Components/Pages/Playground.razor | 49 +------------------ .../Components/UI/ChatHistoryComponent.razor | 23 +++++++++ .../Components/UI/ChatPromptComponent.razor | 47 ++++++++++++++++++ .../Components/UI/ChatWindowComponent.razor | 35 ++++++------- .../Models/ChatMessage.cs | 38 ++++++++++++++ 6 files changed, 126 insertions(+), 69 deletions(-) create mode 100644 src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatHistoryComponent.razor create mode 100644 src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatPromptComponent.razor create mode 100644 src/AzureOpenAIProxy.PlaygroundApp/Models/ChatMessage.cs diff --git a/src/AzureOpenAIProxy.ApiApp/Models/AdminResourceDetails.cs b/src/AzureOpenAIProxy.ApiApp/Models/AdminResourceDetails.cs index b1464200..b610f077 100644 --- a/src/AzureOpenAIProxy.ApiApp/Models/AdminResourceDetails.cs +++ b/src/AzureOpenAIProxy.ApiApp/Models/AdminResourceDetails.cs @@ -60,7 +60,8 @@ public class AdminResourceDetails } /// -/// /// This defines the type of the resource. +/// This defines the type of the resource. +/// [JsonConverter(typeof(EnumMemberConverter))] public enum ResourceType { diff --git a/src/AzureOpenAIProxy.PlaygroundApp/Components/Pages/Playground.razor b/src/AzureOpenAIProxy.PlaygroundApp/Components/Pages/Playground.razor index 18a6728c..ac7463cb 100644 --- a/src/AzureOpenAIProxy.PlaygroundApp/Components/Pages/Playground.razor +++ b/src/AzureOpenAIProxy.PlaygroundApp/Components/Pages/Playground.razor @@ -12,54 +12,7 @@ - - - @if (this.messages != null && this.messages.Any()) - { - foreach (var message in this.messages) - { - - -

@message.Message

-
-
- } - } -
- - - -
+
- -@code { - private List? messages; - - protected override async Task OnInitializedAsync() - { - this.messages = []; - - await Task.CompletedTask; - } - - private async Task SendPrompt(string prompt) - { - this.messages!.Add(new ChatMessage() { Role = MessageRole.User, Message = prompt }); - - await Task.CompletedTask; - } - - public class ChatMessage - { - public MessageRole? Role { get; set; } - public string? Message { get; set; } - } - - public enum MessageRole - { - User, - Assistant - } -} \ No newline at end of file diff --git a/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatHistoryComponent.razor b/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatHistoryComponent.razor new file mode 100644 index 00000000..5a4b2100 --- /dev/null +++ b/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatHistoryComponent.razor @@ -0,0 +1,23 @@ +@using AzureOpenAIProxy.PlaygroundApp.Models + + + @if (this.Messages != null && this.Messages.Any()) + { + foreach (var message in this.Messages) + { + + +

@message.Message

+
+
+ } + } +
+ +@code { + [Parameter] + public string? Id { get; set; } + + [Parameter] + public List? Messages { get; set; } +} \ No newline at end of file diff --git a/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatPromptComponent.razor b/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatPromptComponent.razor new file mode 100644 index 00000000..b6f5bff4 --- /dev/null +++ b/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatPromptComponent.razor @@ -0,0 +1,47 @@ + + + + + Clear + + + Send + + + + +@code { + private string? prompt; + + [Parameter] + public string? Id { get; set; } + + [Parameter] + public EventCallback OnPromptSent { get; set; } + + [Parameter] + public EventCallback OnChatCleared { get; set; } + + private async Task UpdatePrompt(ChangeEventArgs e) + { + this.prompt = e.Value!.ToString(); + + await Task.CompletedTask; + } + + private async Task CompleteChat() + { + if (string.IsNullOrWhiteSpace(this.prompt) == true) + { + return; + } + + await this.OnPromptSent.InvokeAsync(this.prompt); + this.prompt = string.Empty; + } + + private async Task ClearChat() + { + await this.OnChatCleared.InvokeAsync(); + } +} \ No newline at end of file diff --git a/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatWindowComponent.razor b/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatWindowComponent.razor index 3b3635dd..043b582c 100644 --- a/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatWindowComponent.razor +++ b/src/AzureOpenAIProxy.PlaygroundApp/Components/UI/ChatWindowComponent.razor @@ -1,39 +1,34 @@ - - - - - Clear - - - Send - - - +@using AzureOpenAIProxy.PlaygroundApp.Models + + + + + @code { - private string? prompt; + private List? messages; [Parameter] public string? Id { get; set; } - [Parameter] - public EventCallback OnPromptSent { get; set; } - - private async Task UpdatePrompt(ChangeEventArgs e) + protected override async Task OnInitializedAsync() { - this.prompt = e.Value!.ToString(); + this.messages = []; await Task.CompletedTask; } - private async Task CompleteChat() + private async Task SendPrompt(string prompt) { - await this.OnPromptSent.InvokeAsync(this.prompt); + this.messages!.Add(new ChatMessage() { Role = MessageRole.User, Message = prompt }); await Task.CompletedTask; } - private async Task ClearChat() + + private async Task ClearMessage() { + this.messages!.Clear(); + await Task.CompletedTask; } } \ No newline at end of file diff --git a/src/AzureOpenAIProxy.PlaygroundApp/Models/ChatMessage.cs b/src/AzureOpenAIProxy.PlaygroundApp/Models/ChatMessage.cs new file mode 100644 index 00000000..15f7cb6c --- /dev/null +++ b/src/AzureOpenAIProxy.PlaygroundApp/Models/ChatMessage.cs @@ -0,0 +1,38 @@ +namespace AzureOpenAIProxy.PlaygroundApp.Models; + +/// +/// This represents the entity for chat message. +/// +public class ChatMessage +{ + /// + /// Gets or sets the message role. + /// + public MessageRole? Role { get; set; } + + /// + /// Gets or sets the message. + /// + public string? Message { get; set; } +} + +/// +/// This defines the role of the message. +/// +public enum MessageRole +{ + /// + /// Indicates the role is not defined. + /// + Undefined, + + /// + /// Indicates the user role. + /// + User, + + /// + /// Indicates the assistant role. + /// + Assistant +}