From 4391128ed73989f346253c9c37a3b693ac1ce1fc Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 16 Jul 2024 16:05:40 +0200 Subject: [PATCH] WIP: Implementing a coding assistant --- .../Components/Pages/Assistants.razor | 1 + .../Pages/Coding/AssistantCoding.razor | 4 ++ .../Pages/Coding/AssistantCoding.razor.cs | 24 +++++++++++ .../Components/Pages/Coding/CodingContext.cs | 3 ++ .../Pages/Coding/CodingContextItem.razor | 1 + .../Pages/Coding/CodingContextItem.razor.cs | 28 +++++++++++++ .../Coding/CommonCodingLanguageExtensions.cs | 42 +++++++++++++++++++ .../Pages/Coding/CommonCodingLanguages.cs | 38 +++++++++++++++++ 8 files changed, 141 insertions(+) create mode 100644 app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor create mode 100644 app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs create mode 100644 app/MindWork AI Studio/Components/Pages/Coding/CodingContext.cs create mode 100644 app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor create mode 100644 app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor.cs create mode 100644 app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguageExtensions.cs create mode 100644 app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguages.cs diff --git a/app/MindWork AI Studio/Components/Pages/Assistants.razor b/app/MindWork AI Studio/Components/Pages/Assistants.razor index 8bd4ea83..64953646 100644 --- a/app/MindWork AI Studio/Components/Pages/Assistants.razor +++ b/app/MindWork AI Studio/Components/Pages/Assistants.razor @@ -8,4 +8,5 @@ + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor new file mode 100644 index 00000000..f260e65a --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor @@ -0,0 +1,4 @@ +@page "/assistant/coding" +@using AIStudio.Settings +@using AIStudio.Tools +@inherits AssistantBaseCore \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs new file mode 100644 index 00000000..b62e2c27 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs @@ -0,0 +1,24 @@ +namespace AIStudio.Components.Pages.Coding; + +public partial class AssistantCoding : AssistantBaseCore +{ + protected override string Title => "Coding Assistant"; + + protected override string Description => + """ + This coding assistant supports you in writing code. Provide some coding context by copying and pasting + your code into the input fields. You might assign an ID to your code snippet to easily reference it later. + When you have compiler messages, you can paste them into the input fields to get help with debugging as well. + """; + + protected override string SystemPrompt => + """ + You are a friendly, helpful senior software developer with extensive experience in various programming languages + and concepts. You are familiar with principles like DRY, KISS, YAGNI, and SOLID and can apply and explain them. + You know object-oriented programming, as well as functional programming and procedural programming. You are also + familiar with design patterns and can explain them. You are an expert of debugging and can help with compiler + messages. You can also help with code refactoring and optimization. + """; + + private readonly List codingContexts = new(); +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Coding/CodingContext.cs b/app/MindWork AI Studio/Components/Pages/Coding/CodingContext.cs new file mode 100644 index 00000000..acce9828 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Coding/CodingContext.cs @@ -0,0 +1,3 @@ +namespace AIStudio.Components.Pages.Coding; + +public readonly record struct CodingContext(string Id, CommonCodingLanguages Language, string Code); \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor b/app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor new file mode 100644 index 00000000..1163771b --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor.cs b/app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor.cs new file mode 100644 index 00000000..db7f95c3 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Coding/CodingContextItem.razor.cs @@ -0,0 +1,28 @@ +using AIStudio.Settings; + +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Components.Pages.Coding; + +public partial class CodingContextItem : ComponentBase +{ + [Parameter] + public CodingContext CodingContext { get; set; } + + [Inject] + protected SettingsManager SettingsManager { get; set; } = null!; + + private static readonly Dictionary USER_INPUT_ATTRIBUTES = new(); + + #region Overrides of ComponentBase + + protected override async Task OnParametersSetAsync() + { + // Configure the spellchecking for the user input: + this.SettingsManager.InjectSpellchecking(USER_INPUT_ATTRIBUTES); + + await base.OnParametersSetAsync(); + } + + #endregion +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguageExtensions.cs b/app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguageExtensions.cs new file mode 100644 index 00000000..a1351546 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguageExtensions.cs @@ -0,0 +1,42 @@ +namespace AIStudio.Components.Pages.Coding; + +public static class CommonCodingLanguageExtensions +{ + public static string Name(this CommonCodingLanguages language) => language switch + { + CommonCodingLanguages.NONE => "None", + + CommonCodingLanguages.BASH => "Bash", + CommonCodingLanguages.C => "C", + CommonCodingLanguages.CPP => "C++", + CommonCodingLanguages.CSHARP => "C#", + CommonCodingLanguages.CSS => "CSS", + CommonCodingLanguages.FORTRAN => "Fortran", + CommonCodingLanguages.GDSCRIPT => "GDScript", + CommonCodingLanguages.GO => "Go", + CommonCodingLanguages.HTML => "HTML", + CommonCodingLanguages.JAVA => "Java", + CommonCodingLanguages.JAVASCRIPT => "JavaScript", + CommonCodingLanguages.JSON => "JSON", + CommonCodingLanguages.JULIA => "Julia", + CommonCodingLanguages.KOTLIN => "Kotlin", + CommonCodingLanguages.LUA => "Lua", + CommonCodingLanguages.MARKDOWN => "Markdown", + CommonCodingLanguages.MATHEMATICA => "Mathematica", + CommonCodingLanguages.MATLAB => "MATLAB", + CommonCodingLanguages.PHP => "PHP", + CommonCodingLanguages.POWERSHELL => "PowerShell", + CommonCodingLanguages.PROLOG => "Prolog", + CommonCodingLanguages.PYTHON => "Python", + CommonCodingLanguages.R => "R", + CommonCodingLanguages.RUBY => "Ruby", + CommonCodingLanguages.RUST => "Rust", + CommonCodingLanguages.SQL => "SQL", + CommonCodingLanguages.SWIFT => "Swift", + CommonCodingLanguages.TYPESCRIPT => "TypeScript", + CommonCodingLanguages.XML => "XML", + + CommonCodingLanguages.OTHER => "Other", + _ => "Unknown" + }; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguages.cs b/app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguages.cs new file mode 100644 index 00000000..0e728e1d --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Coding/CommonCodingLanguages.cs @@ -0,0 +1,38 @@ +namespace AIStudio.Components.Pages.Coding; + +public enum CommonCodingLanguages +{ + NONE, + + BASH, + C, + CPP, + CSHARP, + CSS, + FORTRAN, + GDSCRIPT, + GO, + HTML, + JAVA, + JAVASCRIPT, + JSON, + JULIA, + KOTLIN, + LUA, + MARKDOWN, + MATHEMATICA, + MATLAB, + PHP, + POWERSHELL, + PROLOG, + PYTHON, + R, + RUBY, + RUST, + SQL, + SWIFT, + TYPESCRIPT, + XML, + + OTHER, +} \ No newline at end of file