From 42fb6cbac0ba0dc0c185fb3fcb33779db9656d8c Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Wed, 4 Dec 2024 13:49:31 +0100 Subject: [PATCH] Added the EDI assistant --- .../Assistants/EDI/AssistantEDI.razor | 19 ++++++++ .../Assistants/EDI/AssistantEDI.razor.cs | 46 +++++++++++++++++++ app/MindWork AI Studio/Pages/Assistants.razor | 1 + app/MindWork AI Studio/Routes.razor.cs | 1 + .../Settings/DataModel/Data.cs | 2 + .../Settings/DataModel/DataEDI.cs | 37 +++++++++++++++ app/MindWork AI Studio/Tools/Components.cs | 1 + .../Tools/ComponentsExtensions.cs | 5 ++ 8 files changed, 112 insertions(+) create mode 100644 app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor create mode 100644 app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor.cs create mode 100644 app/MindWork AI Studio/Settings/DataModel/DataEDI.cs diff --git a/app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor b/app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor new file mode 100644 index 00000000..6b9d228d --- /dev/null +++ b/app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor @@ -0,0 +1,19 @@ +@attribute [Route(Routes.ASSISTANT_EDI)] +@inherits AssistantBaseCore + + + You can imagine it like this: Hypothetically, when Wikipedia implemented the EDI, it would vectorize + all pages using an embedding method. All of Wikipedia’s data would remain with Wikipedia, including the + vector database (decentralized approach). Then, any AI Studio user could add Wikipedia as a data source to + significantly reduce the hallucination of the LLM in knowledge questions. + + + + Related links: + + + EDI repository with example implementation in .NET and C# + Interactive documentation aka Swagger UI + + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor.cs b/app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor.cs new file mode 100644 index 00000000..b1809517 --- /dev/null +++ b/app/MindWork AI Studio/Assistants/EDI/AssistantEDI.razor.cs @@ -0,0 +1,46 @@ +using AIStudio.Chat; + +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Assistants.EDI; + +public partial class AssistantEDI : AssistantBaseCore +{ + public override Tools.Components Component => Tools.Components.EDI_ASSISTANT; + + protected override string Title => "EDI Server"; + + protected override string Description => + """ + The EDI is the (E)xternal (D)ata AP(I) for AI Studio. The EDI acts as a contract between decentralized data + sources and AI Studio. The EDI is implemented by the data sources, allowing them to be integrated into AI + Studio later. This means that the data sources assume the server role and AI Studio assumes the client role + of the API. This approach serves to realize a Retrieval-Augmented Generation (RAG) process with external + data. + """; + + protected override string SystemPrompt => + $""" + + """; + + protected override IReadOnlyList FooterButtons => []; + + protected override string SubmitText => "Create the EDI server"; + + protected override Func SubmitAction => () => Task.CompletedTask; + + protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with + { + SystemPrompt = SystemPrompts.DEFAULT, + }; + + protected override void ResetFrom() + { + } + + protected override bool MightPreselectValues() + { + return false; + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Assistants.razor b/app/MindWork AI Studio/Pages/Assistants.razor index 565469a0..840f1e48 100644 --- a/app/MindWork AI Studio/Pages/Assistants.razor +++ b/app/MindWork AI Studio/Pages/Assistants.razor @@ -41,6 +41,7 @@ + \ No newline at end of file diff --git a/app/MindWork AI Studio/Routes.razor.cs b/app/MindWork AI Studio/Routes.razor.cs index ea1a2d68..49673486 100644 --- a/app/MindWork AI Studio/Routes.razor.cs +++ b/app/MindWork AI Studio/Routes.razor.cs @@ -24,5 +24,6 @@ public sealed partial class Routes public const string ASSISTANT_MY_TASKS = "/assistant/my-tasks"; public const string ASSISTANT_JOB_POSTING = "/assistant/job-posting"; public const string ASSISTANT_BIAS = "/assistant/bias-of-the-day"; + public const string ASSISTANT_EDI = "/assistant/edi"; // ReSharper restore InconsistentNaming } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/Data.cs b/app/MindWork AI Studio/Settings/DataModel/Data.cs index e2b678e8..f5422d2e 100644 --- a/app/MindWork AI Studio/Settings/DataModel/Data.cs +++ b/app/MindWork AI Studio/Settings/DataModel/Data.cs @@ -57,6 +57,8 @@ public sealed class Data public DataTranslation Translation { get; init; } = new(); public DataCoding Coding { get; init; } = new(); + + public DataEDI EDI { get; init; } = new(); public DataTextSummarizer TextSummarizer { get; init; } = new(); diff --git a/app/MindWork AI Studio/Settings/DataModel/DataEDI.cs b/app/MindWork AI Studio/Settings/DataModel/DataEDI.cs new file mode 100644 index 00000000..8aa119a5 --- /dev/null +++ b/app/MindWork AI Studio/Settings/DataModel/DataEDI.cs @@ -0,0 +1,37 @@ +using AIStudio.Assistants.Coding; +using AIStudio.Provider; + +namespace AIStudio.Settings.DataModel; + +public sealed class DataEDI +{ + /// + /// Preselect any EDI options? + /// + public bool PreselectOptions { get; set; } + + /// + /// Preselect the language for implementing the EDI? + /// + public CommonCodingLanguages PreselectedProgrammingLanguage { get; set; } + + /// + /// Do you want to preselect any other language? + /// + public string PreselectedOtherProgrammingLanguage { get; set; } = string.Empty; + + /// + /// The minimum confidence level required for a provider to be considered. + /// + public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE; + + /// + /// Which coding provider should be preselected? + /// + public string PreselectedProvider { get; set; } = string.Empty; + + /// + /// Preselect a profile? + /// + public string PreselectedProfile { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Components.cs b/app/MindWork AI Studio/Tools/Components.cs index 30dee58d..a1704b5c 100644 --- a/app/MindWork AI Studio/Tools/Components.cs +++ b/app/MindWork AI Studio/Tools/Components.cs @@ -17,6 +17,7 @@ public enum Components MY_TASKS_ASSISTANT, JOB_POSTING_ASSISTANT, BIAS_DAY_ASSISTANT, + EDI_ASSISTANT, CHAT, } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/ComponentsExtensions.cs b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs index cfe1c3df..83db98ed 100644 --- a/app/MindWork AI Studio/Tools/ComponentsExtensions.cs +++ b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs @@ -8,6 +8,7 @@ public static class ComponentsExtensions public static bool AllowSendTo(this Components component) => component switch { Components.NONE => false, + Components.EDI_ASSISTANT => false, Components.BIAS_DAY_ASSISTANT => false, _ => true, @@ -27,6 +28,7 @@ public static class ComponentsExtensions Components.SYNONYMS_ASSISTANT => "Synonym Assistant", Components.MY_TASKS_ASSISTANT => "My Tasks Assistant", Components.JOB_POSTING_ASSISTANT => "Job Posting Assistant", + Components.EDI_ASSISTANT => "EDI Server", Components.CHAT => "New Chat", @@ -68,6 +70,7 @@ public static class ComponentsExtensions Components.MY_TASKS_ASSISTANT => settingsManager.ConfigurationData.MyTasks.PreselectOptions ? settingsManager.ConfigurationData.MyTasks.MinimumProviderConfidence : default, Components.JOB_POSTING_ASSISTANT => settingsManager.ConfigurationData.JobPostings.PreselectOptions ? settingsManager.ConfigurationData.JobPostings.MinimumProviderConfidence : default, Components.BIAS_DAY_ASSISTANT => settingsManager.ConfigurationData.BiasOfTheDay.PreselectOptions ? settingsManager.ConfigurationData.BiasOfTheDay.MinimumProviderConfidence : default, + Components.EDI_ASSISTANT => settingsManager.ConfigurationData.EDI.PreselectOptions ? settingsManager.ConfigurationData.EDI.MinimumProviderConfidence : default, _ => default, }; @@ -87,6 +90,7 @@ public static class ComponentsExtensions Components.MY_TASKS_ASSISTANT => settingsManager.ConfigurationData.MyTasks.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.MyTasks.PreselectedProvider) : default, Components.JOB_POSTING_ASSISTANT => settingsManager.ConfigurationData.JobPostings.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.JobPostings.PreselectedProvider) : default, Components.BIAS_DAY_ASSISTANT => settingsManager.ConfigurationData.BiasOfTheDay.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.BiasOfTheDay.PreselectedProvider) : default, + Components.EDI_ASSISTANT => settingsManager.ConfigurationData.EDI.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.EDI.PreselectedProvider) : default, Components.CHAT => settingsManager.ConfigurationData.Chat.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Chat.PreselectedProvider) : default, @@ -101,6 +105,7 @@ public static class ComponentsExtensions Components.LEGAL_CHECK_ASSISTANT => settingsManager.ConfigurationData.LegalCheck.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.LegalCheck.PreselectedProfile) : default, Components.MY_TASKS_ASSISTANT => settingsManager.ConfigurationData.MyTasks.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.MyTasks.PreselectedProfile) : default, Components.BIAS_DAY_ASSISTANT => settingsManager.ConfigurationData.BiasOfTheDay.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.BiasOfTheDay.PreselectedProfile) : default, + Components.EDI_ASSISTANT => settingsManager.ConfigurationData.EDI.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.EDI.PreselectedProfile) : default, Components.CHAT => settingsManager.ConfigurationData.Chat.PreselectOptions ? settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Chat.PreselectedProfile) : default,