From aaf577269eff0171ab7aed8bb68f3c368e1e7c95 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 11 Aug 2024 21:43:50 +0200 Subject: [PATCH] Added a grammar and spell checker assistant --- .../Components/AssistantBase.razor | 2 +- .../Components/AssistantBase.razor.cs | 2 + .../Components/Pages/Assistants.razor | 1 + .../AssistantGrammarSpelling.razor | 11 +++ .../AssistantGrammarSpelling.razor.cs | 73 +++++++++++++++++++ .../Tools/CommonLanguageExtensions.cs | 8 ++ .../wwwroot/changelog/v0.8.8.md | 1 + 7 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor create mode 100644 app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs diff --git a/app/MindWork AI Studio/Components/AssistantBase.razor b/app/MindWork AI Studio/Components/AssistantBase.razor index 0a8c0c25..934231e7 100644 --- a/app/MindWork AI Studio/Components/AssistantBase.razor +++ b/app/MindWork AI Studio/Components/AssistantBase.razor @@ -17,7 +17,7 @@ - @if (this.resultingContentBlock is not null) + @if (this.ShowResult && this.resultingContentBlock is not null) { } diff --git a/app/MindWork AI Studio/Components/AssistantBase.razor.cs b/app/MindWork AI Studio/Components/AssistantBase.razor.cs index 5ef9e707..b843efa2 100644 --- a/app/MindWork AI Studio/Components/AssistantBase.razor.cs +++ b/app/MindWork AI Studio/Components/AssistantBase.razor.cs @@ -26,6 +26,8 @@ public abstract partial class AssistantBase : ComponentBase private protected virtual RenderFragment? Body => null; + protected virtual bool ShowResult => true; + protected static readonly Dictionary USER_INPUT_ATTRIBUTES = new(); protected AIStudio.Settings.Provider providerSettings; diff --git a/app/MindWork AI Studio/Components/Pages/Assistants.razor b/app/MindWork AI Studio/Components/Pages/Assistants.razor index 97ad4847..85656318 100644 --- a/app/MindWork AI Studio/Components/Pages/Assistants.razor +++ b/app/MindWork AI Studio/Components/Pages/Assistants.razor @@ -12,6 +12,7 @@ + diff --git a/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor b/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor new file mode 100644 index 00000000..647cb947 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor @@ -0,0 +1,11 @@ +@using AIStudio.Tools +@page "/assistant/grammar-spelling" +@inherits AssistantBaseCore + + + + + + + Proofread + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs b/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs new file mode 100644 index 00000000..58e1d724 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs @@ -0,0 +1,73 @@ +using AIStudio.Tools; + +namespace AIStudio.Components.Pages.GrammarSpelling; + +public partial class AssistantGrammarSpelling : AssistantBaseCore +{ + protected override string Title => "Grammar and Spelling Checker"; + + protected override string Description => + """ + Check the grammar and spelling of a text. + """; + + protected override string SystemPrompt => + $""" + You get a text as input. The user wants you to check the grammar and spelling of the text. + Correct any spelling or grammar mistakes. Do not add any information. Do not ask for additional information. + Do not improve the text. Do not mirror the user's language. Do not mirror your task.{this.SystemPromptLanguage()} + """; + + protected override bool ShowResult => true; + + private string originalText = string.Empty; + private string inputText = string.Empty; + private CommonLanguages selectedTargetLanguage; + private string customTargetLanguage = string.Empty; + + private string? ValidateText(string text) + { + if(string.IsNullOrWhiteSpace(text)) + return "Please provide a text as input. You might copy the desired text from a document or a website."; + + return null; + } + + private string? ValidateCustomLanguage(string language) + { + if(this.selectedTargetLanguage == CommonLanguages.OTHER && string.IsNullOrWhiteSpace(language)) + return "Please provide a custom language."; + + return null; + } + + private string SystemPromptLanguage() + { + var lang = this.selectedTargetLanguage switch + { + CommonLanguages.AS_IS => string.Empty, + CommonLanguages.OTHER => this.customTargetLanguage, + + _ => this.selectedTargetLanguage.Name(), + }; + + if (string.IsNullOrWhiteSpace(lang)) + return string.Empty; + + return + $""" + The text is written in {lang}. + """; + } + + private async Task ProofreadText() + { + if (!this.inputIsValid) + return; + + this.CreateChatThread(); + var time = this.AddUserRequest(this.inputText); + + await this.AddAIResponseAsync(time); + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs b/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs index 57618b65..96dfafe0 100644 --- a/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs +++ b/app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs @@ -42,4 +42,12 @@ public static class CommonLanguageExtensions return language.Name(); } + + public static string NameSelectingOptional(this CommonLanguages language) + { + if(language is CommonLanguages.AS_IS) + return "Do not specify the language"; + + return language.Name(); + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.8.8.md b/app/MindWork AI Studio/wwwroot/changelog/v0.8.8.md index 9ab877bd..a7d009c5 100644 --- a/app/MindWork AI Studio/wwwroot/changelog/v0.8.8.md +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.8.8.md @@ -1,2 +1,3 @@ # v0.8.8, build 170 +- Added a grammar and spell checker assistant - Upgraded MudBlazor to v7.6.0 \ No newline at end of file