Added the EDI assistant

This commit is contained in:
Thorsten Sommer 2024-12-04 13:49:31 +01:00
parent 88026575dd
commit 42fb6cbac0
Signed by: tsommer
GPG Key ID: 371BBA77A02C0108
8 changed files with 112 additions and 0 deletions

View File

@ -0,0 +1,19 @@
@attribute [Route(Routes.ASSISTANT_EDI)]
@inherits AssistantBaseCore
<MudText Typo="Typo.body1" Class="mb-3">
You can imagine it like this: Hypothetically, when Wikipedia implemented the EDI, it would vectorize
all pages using an embedding method. All of Wikipedias 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.
</MudText>
<MudText Typo="Typo.body1">
<b>Related links:</b>
</MudText>
<MudList T="string" Class="mb-6">
<MudListItem T="string" Icon="@Icons.Material.Filled.Link" Target="_blank" Href="https://github.com/MindWorkAI/EDI">EDI repository with example implementation in .NET and C#</MudListItem>
<MudListItem T="string" Icon="@Icons.Material.Filled.Link" Target="_blank" Href="https://mindworkai.org/swagger-ui.html">Interactive documentation aka Swagger UI</MudListItem>
</MudList>
<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>

View File

@ -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<IButtonData> FooterButtons => [];
protected override string SubmitText => "Create the EDI server";
protected override Func<Task> SubmitAction => () => Task.CompletedTask;
protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with
{
SystemPrompt = SystemPrompts.DEFAULT,
};
protected override void ResetFrom()
{
}
protected override bool MightPreselectValues()
{
return false;
}
}

View File

@ -41,6 +41,7 @@
</MudText>
<MudStack Row="@true" Wrap="@Wrap.Wrap" Class="mb-3">
<AssistantBlock Name="Coding" Description="Get coding and debugging support from a LLM." Icon="@Icons.Material.Filled.Code" Link="@Routes.ASSISTANT_CODING"/>
<AssistantBlock Name="EDI Server" Description="Generate an EDI server to integrate business systems." Icon="@Icons.Material.Filled.PrivateConnectivity" Link="@Routes.ASSISTANT_EDI"/>
</MudStack>
</InnerScrolling>

View File

@ -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
}

View File

@ -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();

View File

@ -0,0 +1,37 @@
using AIStudio.Assistants.Coding;
using AIStudio.Provider;
namespace AIStudio.Settings.DataModel;
public sealed class DataEDI
{
/// <summary>
/// Preselect any EDI options?
/// </summary>
public bool PreselectOptions { get; set; }
/// <summary>
/// Preselect the language for implementing the EDI?
/// </summary>
public CommonCodingLanguages PreselectedProgrammingLanguage { get; set; }
/// <summary>
/// Do you want to preselect any other language?
/// </summary>
public string PreselectedOtherProgrammingLanguage { get; set; } = string.Empty;
/// <summary>
/// The minimum confidence level required for a provider to be considered.
/// </summary>
public ConfidenceLevel MinimumProviderConfidence { get; set; } = ConfidenceLevel.NONE;
/// <summary>
/// Which coding provider should be preselected?
/// </summary>
public string PreselectedProvider { get; set; } = string.Empty;
/// <summary>
/// Preselect a profile?
/// </summary>
public string PreselectedProfile { get; set; } = string.Empty;
}

View File

@ -17,6 +17,7 @@ public enum Components
MY_TASKS_ASSISTANT,
JOB_POSTING_ASSISTANT,
BIAS_DAY_ASSISTANT,
EDI_ASSISTANT,
CHAT,
}

View File

@ -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,