diff --git a/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs b/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs index 16e1f7e..c104e41 100644 --- a/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs +++ b/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs @@ -6,6 +6,8 @@ namespace AIStudio.Assistants.Agenda; public partial class AssistantAgenda : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.AGENDA_ASSISTANT; + protected override string Title => "Agenda Planner"; protected override string Description => @@ -93,13 +95,7 @@ public partial class AssistantAgenda : AssistantBaseCore - Mary Jane: Work package 3 """; - protected override IReadOnlyList FooterButtons => - [ - new SendToButton - { - Self = SendTo.AGENDA_ASSISTANT, - }, - ]; + protected override IReadOnlyList FooterButtons => []; protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with { @@ -158,7 +154,6 @@ public partial class AssistantAgenda : AssistantBaseCore this.durationBreaks = this.SettingsManager.ConfigurationData.Agenda.PreselectBreakTime; this.activeParticipation = this.SettingsManager.ConfigurationData.Agenda.PreselectActiveParticipation; this.numberParticipants = this.SettingsManager.ConfigurationData.Agenda.PreselectNumberParticipants; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Agenda.PreselectedProvider); return true; } @@ -194,7 +189,6 @@ public partial class AssistantAgenda : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_AGENDA_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputContent = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/AssistantBase.razor b/app/MindWork AI Studio/Assistants/AssistantBase.razor index f605189..9d7673e 100644 --- a/app/MindWork AI Studio/Assistants/AssistantBase.razor +++ b/app/MindWork AI Studio/Assistants/AssistantBase.razor @@ -35,49 +35,64 @@ - @if (this.FooterButtons.Count > 0) - { - - @foreach (var button in this.FooterButtons) - { - switch (button) + + + @if (!this.FooterButtons.Any(x => x.Type is ButtonTypes.SEND_TO)) + { + + @foreach (var assistant in Enum.GetValues().OrderBy(n => n.Name().Length)) { - case ButtonData buttonData when !string.IsNullOrWhiteSpace(buttonData.Tooltip): - - - @buttonData.Text - - - break; + if (assistant is Components.NONE || this.Component == assistant) + continue; - case ButtonData buttonData: + + @assistant.Name() + + } + + } + + @foreach (var button in this.FooterButtons) + { + switch (button) + { + case ButtonData buttonData when !string.IsNullOrWhiteSpace(buttonData.Tooltip): + @buttonData.Text - break; + + break; - case SendToButton sendToButton: - - @foreach (var assistant in Enum.GetValues().OrderBy(n => n.Name().Length)) - { - if(assistant is SendTo.NONE || sendToButton.Self == assistant) - continue; + case ButtonData buttonData: + + @buttonData.Text + + break; - - @assistant.Name() - - } - - break; - } + case SendToButton sendToButton: + + @foreach (var assistant in Enum.GetValues().OrderBy(n => n.Name().Length)) + { + if(assistant is Components.NONE || sendToButton.Self == assistant) + continue; + + + @assistant.Name() + + } + + break; } - - Copy result - - - Reset - - - } + } + + + Copy result + + + + Reset + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs b/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs index a12376b..9608b1c 100644 --- a/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs +++ b/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs @@ -40,6 +40,8 @@ public abstract partial class AssistantBase : ComponentBase protected abstract string SystemPrompt { get; } + protected abstract Tools.Components Component { get; } + protected virtual Func Result2Copy => () => this.resultingContentBlock is null ? string.Empty : this.resultingContentBlock.Content switch { ContentText textBlock => textBlock.Text, @@ -73,6 +75,13 @@ public abstract partial class AssistantBase : ComponentBase #region Overrides of ComponentBase + protected override async Task OnInitializedAsync() + { + this.MightPreselectValues(); + this.providerSettings = this.SettingsManager.GetPreselectedProvider(this.Component); + await base.OnInitializedAsync(); + } + protected override async Task OnParametersSetAsync() { // Configure the spellchecking for the user input: @@ -177,7 +186,7 @@ public abstract partial class AssistantBase : ComponentBase return icon; } - private Task SendToAssistant(SendTo destination, SendToButton sendToButton) + private Task SendToAssistant(Tools.Components destination, SendToButton sendToButton) { var contentToSend = sendToButton.UseResultingContentBlockData switch { @@ -192,7 +201,7 @@ public abstract partial class AssistantBase : ComponentBase var sendToData = destination.GetData(); switch (destination) { - case SendTo.CHAT: + case Tools.Components.CHAT: MessageBus.INSTANCE.DeferMessage(this, sendToData.Event, this.ConvertToChatThread); break; @@ -214,6 +223,7 @@ public abstract partial class AssistantBase : ComponentBase await this.JsRuntime.ClearDiv(AFTER_RESULT_DIV_ID); this.ResetFrom(); + this.providerSettings = this.SettingsManager.GetPreselectedProvider(this.Component); this.inputIsValid = false; this.inputIssues = []; diff --git a/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs b/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs index 4f9ba4b..3476425 100644 --- a/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs +++ b/app/MindWork AI Studio/Assistants/Coding/AssistantCoding.razor.cs @@ -4,6 +4,8 @@ namespace AIStudio.Assistants.Coding; public partial class AssistantCoding : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.CODING_ASSISTANT; + protected override string Title => "Coding Assistant"; protected override string Description => @@ -24,13 +26,7 @@ public partial class AssistantCoding : AssistantBaseCore When the user asks in a different language than English, you answer in the same language! """; - protected override IReadOnlyList FooterButtons => - [ - new SendToButton - { - Self = SendTo.CODING_ASSISTANT, - }, - ]; + protected override IReadOnlyList FooterButtons => []; protected override void ResetFrom() { @@ -48,7 +44,6 @@ public partial class AssistantCoding : AssistantBaseCore if (this.SettingsManager.ConfigurationData.Coding.PreselectOptions) { this.provideCompilerMessages = this.SettingsManager.ConfigurationData.Coding.PreselectCompilerMessages; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Coding.PreselectedProvider); return true; } @@ -64,7 +59,6 @@ public partial class AssistantCoding : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_CODING_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.questions = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs b/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs index 23151e9..a25077d 100644 --- a/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs +++ b/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs @@ -6,6 +6,8 @@ namespace AIStudio.Assistants.EMail; public partial class AssistantEMail : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.EMAIL_ASSISTANT; + protected override string Title => "E-Mail"; protected override string Description => @@ -20,13 +22,7 @@ public partial class AssistantEMail : AssistantBaseCore {this.SystemPromptGreeting()} {this.SystemPromptName()} You write the email in the following language: {this.SystemPromptLanguage()}. """; - protected override IReadOnlyList FooterButtons => - [ - new SendToButton - { - Self = SendTo.EMAIL_ASSISTANT, - }, - ]; + protected override IReadOnlyList FooterButtons => []; protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with { @@ -59,7 +55,6 @@ public partial class AssistantEMail : AssistantBaseCore this.selectedWritingStyle = this.SettingsManager.ConfigurationData.EMail.PreselectedWritingStyle; this.selectedTargetLanguage = this.SettingsManager.ConfigurationData.EMail.PreselectedTargetLanguage; this.customTargetLanguage = this.SettingsManager.ConfigurationData.EMail.PreselectOtherLanguage; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.EMail.PreselectedProvider); return true; } @@ -88,7 +83,6 @@ public partial class AssistantEMail : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_EMAIL_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputBulletPoints = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs b/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs index 7669be2..f0dd044 100644 --- a/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs +++ b/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs @@ -4,6 +4,8 @@ namespace AIStudio.Assistants.GrammarSpelling; public partial class AssistantGrammarSpelling : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.GRAMMAR_SPELLING_ASSISTANT; + protected override string Title => "Grammar & Spelling Checker"; protected override string Description => @@ -31,7 +33,7 @@ public partial class AssistantGrammarSpelling : AssistantBaseCore [ new SendToButton { - Self = SendTo.GRAMMAR_SPELLING_ASSISTANT, + Self = Tools.Components.GRAMMAR_SPELLING_ASSISTANT, UseResultingContentBlockData = false, GetText = () => string.IsNullOrWhiteSpace(this.correctedText) ? this.inputText : this.correctedText }, @@ -59,7 +61,6 @@ public partial class AssistantGrammarSpelling : AssistantBaseCore { this.selectedTargetLanguage = this.SettingsManager.ConfigurationData.GrammarSpelling.PreselectedTargetLanguage; this.customTargetLanguage = this.SettingsManager.ConfigurationData.GrammarSpelling.PreselectedOtherLanguage; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.GrammarSpelling.PreselectedProvider); return true; } @@ -70,7 +71,6 @@ public partial class AssistantGrammarSpelling : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputText = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs b/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs index 458c5f0..f23f710 100644 --- a/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs +++ b/app/MindWork AI Studio/Assistants/IconFinder/AssistantIconFinder.razor.cs @@ -2,8 +2,7 @@ namespace AIStudio.Assistants.IconFinder; public partial class AssistantIconFinder : AssistantBaseCore { - private string inputContext = string.Empty; - private IconSources selectedIconSource; + protected override Tools.Components Component => Tools.Components.ICON_FINDER_ASSISTANT; protected override string Title => "Icon Finder"; @@ -26,13 +25,7 @@ public partial class AssistantIconFinder : AssistantBaseCore quotation marks. """; - protected override IReadOnlyList FooterButtons => - [ - new SendToButton - { - Self = SendTo.ICON_FINDER_ASSISTANT, - }, - ]; + protected override IReadOnlyList FooterButtons => []; protected override void ResetFrom() { @@ -48,18 +41,19 @@ public partial class AssistantIconFinder : AssistantBaseCore if (this.SettingsManager.ConfigurationData.IconFinder.PreselectOptions) { this.selectedIconSource = this.SettingsManager.ConfigurationData.IconFinder.PreselectedSource; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.IconFinder.PreselectedProvider); return true; } return false; } + private string inputContext = string.Empty; + private IconSources selectedIconSource; + #region Overrides of ComponentBase protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_ICON_FINDER_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputContext = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs b/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs index e87fb62..0520194 100644 --- a/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs +++ b/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs @@ -2,6 +2,8 @@ namespace AIStudio.Assistants.LegalCheck; public partial class AssistantLegalCheck : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.LEGAL_CHECK_ASSISTANT; + protected override string Title => "Legal Check"; protected override string Description => @@ -20,13 +22,7 @@ public partial class AssistantLegalCheck : AssistantBaseCore Never invent facts! """; - protected override IReadOnlyList FooterButtons => - [ - new SendToButton - { - Self = SendTo.LEGAL_CHECK_ASSISTANT, - }, - ]; + protected override IReadOnlyList FooterButtons => []; protected override void ResetFrom() { @@ -35,17 +31,8 @@ public partial class AssistantLegalCheck : AssistantBaseCore this.MightPreselectValues(); } - protected override bool MightPreselectValues() - { - if (this.SettingsManager.ConfigurationData.LegalCheck.PreselectOptions) - { - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.LegalCheck.PreselectedProvider); - return true; - } - - return false; - } - + protected override bool MightPreselectValues() => false; + private bool isAgentRunning; private string inputLegalDocument = string.Empty; private string inputQuestions = string.Empty; @@ -54,7 +41,6 @@ public partial class AssistantLegalCheck : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_LEGAL_CHECK_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputQuestions = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs b/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs index bbadd4e..a7ada74 100644 --- a/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs +++ b/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs @@ -4,6 +4,8 @@ namespace AIStudio.Assistants.RewriteImprove; public partial class AssistantRewriteImprove : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.REWRITE_ASSISTANT; + protected override string Title => "Rewrite & Improve Text"; protected override string Description => @@ -32,7 +34,7 @@ public partial class AssistantRewriteImprove : AssistantBaseCore [ new SendToButton { - Self = SendTo.REWRITE_ASSISTANT, + Self = Tools.Components.REWRITE_ASSISTANT, UseResultingContentBlockData = false, GetText = () => string.IsNullOrWhiteSpace(this.rewrittenText) ? this.inputText : this.rewrittenText, }, @@ -62,7 +64,6 @@ public partial class AssistantRewriteImprove : AssistantBaseCore { this.selectedTargetLanguage = this.SettingsManager.ConfigurationData.RewriteImprove.PreselectedTargetLanguage; this.customTargetLanguage = this.SettingsManager.ConfigurationData.RewriteImprove.PreselectedOtherLanguage; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.RewriteImprove.PreselectedProvider); this.selectedWritingStyle = this.SettingsManager.ConfigurationData.RewriteImprove.PreselectedWritingStyle; this.selectedSentenceStructure = this.SettingsManager.ConfigurationData.RewriteImprove.PreselectedSentenceStructure; return true; @@ -75,7 +76,6 @@ public partial class AssistantRewriteImprove : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_REWRITE_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputText = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs b/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs index d2d363a..c8461e2 100644 --- a/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs +++ b/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs @@ -4,6 +4,8 @@ namespace AIStudio.Assistants.TextSummarizer; public partial class AssistantTextSummarizer : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.TEXT_SUMMARIZER_ASSISTANT; + protected override string Title => "Text Summarizer"; protected override string Description => @@ -23,13 +25,7 @@ public partial class AssistantTextSummarizer : AssistantBaseCore a summary with the requested complexity. In any case, do not add any information. """; - protected override IReadOnlyList FooterButtons => - [ - new SendToButton - { - Self = SendTo.TEXT_SUMMARIZER_ASSISTANT, - }, - ]; + protected override IReadOnlyList FooterButtons => []; protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with { @@ -56,7 +52,6 @@ public partial class AssistantTextSummarizer : AssistantBaseCore this.customTargetLanguage = this.SettingsManager.ConfigurationData.TextSummarizer.PreselectedOtherLanguage; this.selectedComplexity = this.SettingsManager.ConfigurationData.TextSummarizer.PreselectedComplexity; this.expertInField = this.SettingsManager.ConfigurationData.TextSummarizer.PreselectedExpertInField; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.TextSummarizer.PreselectedProvider); return true; } @@ -74,7 +69,6 @@ public partial class AssistantTextSummarizer : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputText = deferredContent; diff --git a/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs b/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs index 653dba9..8485b16 100644 --- a/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs +++ b/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs @@ -4,6 +4,8 @@ namespace AIStudio.Assistants.Translation; public partial class AssistantTranslation : AssistantBaseCore { + protected override Tools.Components Component => Tools.Components.TRANSLATION_ASSISTANT; + protected override string Title => "Translation"; protected override string Description => @@ -19,13 +21,7 @@ public partial class AssistantTranslation : AssistantBaseCore language requires, e.g., shorter sentences, you should split the text into shorter sentences. """; - protected override IReadOnlyList FooterButtons => - [ - new SendToButton - { - Self = SendTo.TRANSLATION_ASSISTANT, - }, - ]; + protected override IReadOnlyList FooterButtons => []; protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with { @@ -51,7 +47,6 @@ public partial class AssistantTranslation : AssistantBaseCore this.liveTranslation = this.SettingsManager.ConfigurationData.Translation.PreselectLiveTranslation; this.selectedTargetLanguage = this.SettingsManager.ConfigurationData.Translation.PreselectedTargetLanguage; this.customTargetLanguage = this.SettingsManager.ConfigurationData.Translation.PreselectOtherLanguage; - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Translation.PreselectedProvider); return true; } @@ -69,7 +64,6 @@ public partial class AssistantTranslation : AssistantBaseCore protected override async Task OnInitializedAsync() { - this.MightPreselectValues(); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_TRANSLATION_ASSISTANT).FirstOrDefault(); if (deferredContent is not null) this.inputText = deferredContent; diff --git a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor index 45e6411..2dc5bf8 100644 --- a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor +++ b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs index 5c0ca71..87889b0 100644 --- a/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs +++ b/app/MindWork AI Studio/Components/ConfigurationProviderSelection.razor.cs @@ -21,6 +21,9 @@ public partial class ConfigurationProviderSelection : ComponentBase, IMessageBus [Parameter] public Func Disabled { get; set; } = () => false; + [Parameter] + public Func HelpText { get; set; } = () => "Select a provider that is preselected."; + [Inject] private SettingsManager SettingsManager { get; init; } = null!; diff --git a/app/MindWork AI Studio/Pages/Chat.razor.cs b/app/MindWork AI Studio/Pages/Chat.razor.cs index e277c79..de06016 100644 --- a/app/MindWork AI Studio/Pages/Chat.razor.cs +++ b/app/MindWork AI Studio/Pages/Chat.razor.cs @@ -59,11 +59,7 @@ public partial class Chat : MSGComponentBase, IAsyncDisposable // Configure the spellchecking for the user input: this.SettingsManager.InjectSpellchecking(USER_INPUT_ATTRIBUTES); - if (this.SettingsManager.ConfigurationData.Chat.PreselectOptions) - { - this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Chat.PreselectedProvider); - } - + this.providerSettings = this.SettingsManager.GetPreselectedProvider(Tools.Components.CHAT); var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_CHAT).FirstOrDefault(); if (deferredContent is not null) { diff --git a/app/MindWork AI Studio/Pages/Settings.razor b/app/MindWork AI Studio/Pages/Settings.razor index e7c94dd..4bac33e 100644 --- a/app/MindWork AI Studio/Pages/Settings.razor +++ b/app/MindWork AI Studio/Pages/Settings.razor @@ -73,6 +73,7 @@ + diff --git a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs index 8860f10..55b9e93 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs @@ -22,4 +22,9 @@ public sealed class DataApp /// The navigation behavior. /// public NavBehavior NavigationBehavior { get; set; } = NavBehavior.NEVER_EXPAND_USE_TOOLTIPS; + + /// + /// Should we preselect a provider for the entire app? + /// + public string PreselectedProvider { get; set; } = string.Empty; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs index 5f64746..a965b37 100644 --- a/app/MindWork AI Studio/Settings/SettingsManager.cs +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -110,4 +110,31 @@ public sealed class SettingsManager(ILogger logger) } public void InjectSpellchecking(Dictionary attributes) => attributes["spellcheck"] = this.ConfigurationData.App.EnableSpellchecking ? "true" : "false"; + + public Provider GetPreselectedProvider(Tools.Components component) + { + if(this.ConfigurationData.Providers.Count == 1) + return this.ConfigurationData.Providers[0]; + + var preselection = component switch + { + Tools.Components.CHAT => this.ConfigurationData.Chat.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Chat.PreselectedProvider) : default, + Tools.Components.GRAMMAR_SPELLING_ASSISTANT => this.ConfigurationData.GrammarSpelling.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.GrammarSpelling.PreselectedProvider) : default, + Tools.Components.ICON_FINDER_ASSISTANT => this.ConfigurationData.IconFinder.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.IconFinder.PreselectedProvider) : default, + Tools.Components.REWRITE_ASSISTANT => this.ConfigurationData.RewriteImprove.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.RewriteImprove.PreselectedProvider) : default, + Tools.Components.TRANSLATION_ASSISTANT => this.ConfigurationData.Translation.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Translation.PreselectedProvider) : default, + Tools.Components.AGENDA_ASSISTANT => this.ConfigurationData.Agenda.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Agenda.PreselectedProvider) : default, + Tools.Components.CODING_ASSISTANT => this.ConfigurationData.Coding.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Coding.PreselectedProvider) : default, + Tools.Components.TEXT_SUMMARIZER_ASSISTANT => this.ConfigurationData.TextSummarizer.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.TextSummarizer.PreselectedProvider) : default, + Tools.Components.EMAIL_ASSISTANT => this.ConfigurationData.EMail.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.EMail.PreselectedProvider) : default, + Tools.Components.LEGAL_CHECK_ASSISTANT => this.ConfigurationData.LegalCheck.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.LegalCheck.PreselectedProvider) : default, + + _ => default, + }; + + if (preselection != default) + return preselection; + + return this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.App.PreselectedProvider); + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/SendTo.cs b/app/MindWork AI Studio/Tools/Components.cs similarity index 92% rename from app/MindWork AI Studio/Tools/SendTo.cs rename to app/MindWork AI Studio/Tools/Components.cs index 66d74e6..c2e2940 100644 --- a/app/MindWork AI Studio/Tools/SendTo.cs +++ b/app/MindWork AI Studio/Tools/Components.cs @@ -1,6 +1,6 @@ namespace AIStudio.Tools; -public enum SendTo +public enum Components { NONE = 0, diff --git a/app/MindWork AI Studio/Tools/SendToButton.cs b/app/MindWork AI Studio/Tools/SendToButton.cs index bc6e1ac..c591e2f 100644 --- a/app/MindWork AI Studio/Tools/SendToButton.cs +++ b/app/MindWork AI Studio/Tools/SendToButton.cs @@ -8,6 +8,6 @@ public readonly record struct SendToButton() : IButtonData public bool UseResultingContentBlockData { get; init; } = true; - public SendTo Self { get; init; } = SendTo.NONE; + public Components Self { get; init; } = Components.NONE; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/SendToExtensions.cs b/app/MindWork AI Studio/Tools/SendToExtensions.cs index abfed73..ecc3388 100644 --- a/app/MindWork AI Studio/Tools/SendToExtensions.cs +++ b/app/MindWork AI Studio/Tools/SendToExtensions.cs @@ -2,36 +2,36 @@ namespace AIStudio.Tools; public static class SendToExtensions { - public static string Name(this SendTo assistant) => assistant switch + public static string Name(this Components assistant) => assistant switch { - SendTo.GRAMMAR_SPELLING_ASSISTANT => "Grammar & Spelling Assistant", - SendTo.TEXT_SUMMARIZER_ASSISTANT => "Text Summarizer Assistant", - SendTo.ICON_FINDER_ASSISTANT => "Icon Finder Assistant", - SendTo.TRANSLATION_ASSISTANT => "Translation Assistant", - SendTo.REWRITE_ASSISTANT => "Rewrite Assistant", - SendTo.AGENDA_ASSISTANT => "Agenda Assistant", - SendTo.CODING_ASSISTANT => "Coding Assistant", - SendTo.EMAIL_ASSISTANT => "E-Mail Assistant", - SendTo.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant", + Components.GRAMMAR_SPELLING_ASSISTANT => "Grammar & Spelling Assistant", + Components.TEXT_SUMMARIZER_ASSISTANT => "Text Summarizer Assistant", + Components.ICON_FINDER_ASSISTANT => "Icon Finder Assistant", + Components.TRANSLATION_ASSISTANT => "Translation Assistant", + Components.REWRITE_ASSISTANT => "Rewrite Assistant", + Components.AGENDA_ASSISTANT => "Agenda Assistant", + Components.CODING_ASSISTANT => "Coding Assistant", + Components.EMAIL_ASSISTANT => "E-Mail Assistant", + Components.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant", - SendTo.CHAT => "New Chat", + Components.CHAT => "New Chat", _ => "Send to ...", }; - public static SendToData GetData(this SendTo destination) => destination switch + public static SendToData GetData(this Components destination) => destination switch { - SendTo.AGENDA_ASSISTANT => new(Event.SEND_TO_AGENDA_ASSISTANT, Routes.ASSISTANT_AGENDA), - SendTo.CODING_ASSISTANT => new(Event.SEND_TO_CODING_ASSISTANT, Routes.ASSISTANT_CODING), - SendTo.REWRITE_ASSISTANT => new(Event.SEND_TO_REWRITE_ASSISTANT, Routes.ASSISTANT_REWRITE), - SendTo.EMAIL_ASSISTANT => new(Event.SEND_TO_EMAIL_ASSISTANT, Routes.ASSISTANT_EMAIL), - SendTo.TRANSLATION_ASSISTANT => new(Event.SEND_TO_TRANSLATION_ASSISTANT, Routes.ASSISTANT_TRANSLATION), - SendTo.ICON_FINDER_ASSISTANT => new(Event.SEND_TO_ICON_FINDER_ASSISTANT, Routes.ASSISTANT_ICON_FINDER), - SendTo.GRAMMAR_SPELLING_ASSISTANT => new(Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT, Routes.ASSISTANT_GRAMMAR_SPELLING), - SendTo.TEXT_SUMMARIZER_ASSISTANT => new(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Routes.ASSISTANT_SUMMARIZER), - SendTo.LEGAL_CHECK_ASSISTANT => new(Event.SEND_TO_LEGAL_CHECK_ASSISTANT, Routes.ASSISTANT_LEGAL_CHECK), + Components.AGENDA_ASSISTANT => new(Event.SEND_TO_AGENDA_ASSISTANT, Routes.ASSISTANT_AGENDA), + Components.CODING_ASSISTANT => new(Event.SEND_TO_CODING_ASSISTANT, Routes.ASSISTANT_CODING), + Components.REWRITE_ASSISTANT => new(Event.SEND_TO_REWRITE_ASSISTANT, Routes.ASSISTANT_REWRITE), + Components.EMAIL_ASSISTANT => new(Event.SEND_TO_EMAIL_ASSISTANT, Routes.ASSISTANT_EMAIL), + Components.TRANSLATION_ASSISTANT => new(Event.SEND_TO_TRANSLATION_ASSISTANT, Routes.ASSISTANT_TRANSLATION), + Components.ICON_FINDER_ASSISTANT => new(Event.SEND_TO_ICON_FINDER_ASSISTANT, Routes.ASSISTANT_ICON_FINDER), + Components.GRAMMAR_SPELLING_ASSISTANT => new(Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT, Routes.ASSISTANT_GRAMMAR_SPELLING), + Components.TEXT_SUMMARIZER_ASSISTANT => new(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Routes.ASSISTANT_SUMMARIZER), + Components.LEGAL_CHECK_ASSISTANT => new(Event.SEND_TO_LEGAL_CHECK_ASSISTANT, Routes.ASSISTANT_LEGAL_CHECK), - SendTo.CHAT => new(Event.SEND_TO_CHAT, Routes.CHAT), + Components.CHAT => new(Event.SEND_TO_CHAT, Routes.CHAT), _ => new(Event.NONE, Routes.ASSISTANTS), }; diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.9.1.md b/app/MindWork AI Studio/wwwroot/changelog/v0.9.1.md new file mode 100644 index 0000000..38a72c0 --- /dev/null +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.9.1.md @@ -0,0 +1,4 @@ +# v0.9.1, build 176 +- Added app option to specify a default provider for the entire app. +- Improved provider selection: when there is only one provider available, it is now preselected everywhere. +- Fixed preselection of e-mail assistant options: under some circumstances, the e-mail assistant options were not preselected correctly. \ No newline at end of file