diff --git a/app/MindWork AI Studio/Components/AssistantBase.razor b/app/MindWork AI Studio/Components/AssistantBase.razor
index 33058cd6..363cc220 100644
--- a/app/MindWork AI Studio/Components/AssistantBase.razor
+++ b/app/MindWork AI Studio/Components/AssistantBase.razor
@@ -1,4 +1,6 @@
@using AIStudio.Chat
+@using AIStudio.Components.Pages
+@using AIStudio.Tools
@this.Title
@@ -51,6 +53,20 @@
@buttonData.Text
break;
+
+ case SendToButton sendToButton:
+
+ @foreach (var assistant in Enum.GetValues().OrderBy(n => n.Name().Length))
+ {
+ if(assistant is Pages.SendToAssistant.NONE || sendToButton.Self == assistant)
+ continue;
+
+
+ @assistant.Name()
+
+ }
+
+ break;
}
}
diff --git a/app/MindWork AI Studio/Components/AssistantBase.razor.cs b/app/MindWork AI Studio/Components/AssistantBase.razor.cs
index 7ea611e9..494db193 100644
--- a/app/MindWork AI Studio/Components/AssistantBase.razor.cs
+++ b/app/MindWork AI Studio/Components/AssistantBase.razor.cs
@@ -1,10 +1,13 @@
using AIStudio.Chat;
+using AIStudio.Components.Pages;
using AIStudio.Provider;
using AIStudio.Settings;
using AIStudio.Tools;
using Microsoft.AspNetCore.Components;
+using Path = AIStudio.Components.Pages.Path;
+
namespace AIStudio.Components;
public abstract partial class AssistantBase : ComponentBase
@@ -160,4 +163,34 @@ public abstract partial class AssistantBase : ComponentBase
return icon;
}
+
+ private Task SendToAssistant(SendToAssistant assistant, SendToButton sendToButton)
+ {
+ var contentToSend = sendToButton.UseResultingContentBlockData switch
+ {
+ false => sendToButton.GetData(),
+ true => this.resultingContentBlock?.Content switch
+ {
+ ContentText textBlock => textBlock.Text,
+ _ => string.Empty,
+ },
+ };
+
+ var (eventItem, path) = assistant switch
+ {
+ Pages.SendToAssistant.AGENDA_ASSISTANT => (Event.SEND_TO_AGENDA_ASSISTANT, Path.ASSISTANT_AGENDA),
+ Pages.SendToAssistant.CODING_ASSISTANT => (Event.SEND_TO_CODING_ASSISTANT, Path.ASSISTANT_CODING),
+ Pages.SendToAssistant.REWRITE_ASSISTANT => (Event.SEND_TO_REWRITE_ASSISTANT, Path.ASSISTANT_REWRITE),
+ Pages.SendToAssistant.TRANSLATION_ASSISTANT => (Event.SEND_TO_TRANSLATION_ASSISTANT, Path.ASSISTANT_TRANSLATION),
+ Pages.SendToAssistant.ICON_FINDER_ASSISTANT => (Event.SEND_TO_ICON_FINDER_ASSISTANT, Path.ASSISTANT_ICON_FINDER),
+ Pages.SendToAssistant.GRAMMAR_SPELLING_ASSISTANT => (Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT, Path.ASSISTANT_GRAMMAR_SPELLING),
+ Pages.SendToAssistant.TEXT_SUMMARIZER_ASSISTANT => (Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Path.ASSISTANT_SUMMARIZER),
+
+ _ => (Event.NONE, Path.ASSISTANTS),
+ };
+
+ MessageBus.INSTANCE.DeferMessage(this, eventItem, contentToSend);
+ this.NavigationManager.NavigateTo(path);
+ return Task.CompletedTask;
+ }
}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor.cs b/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor.cs
index ba679070..be056a69 100644
--- a/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor.cs
+++ b/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor.cs
@@ -93,6 +93,14 @@ public partial class AssistantAgenda : AssistantBaseCore
- Mary Jane: Work package 3
""";
+ protected override IReadOnlyList FooterButtons =>
+ [
+ new SendToButton
+ {
+ Self = SendToAssistant.AGENDA_ASSISTANT,
+ },
+ ];
+
private string inputTopic = string.Empty;
private string inputName = string.Empty;
private string inputContent = string.Empty;
@@ -145,6 +153,10 @@ public partial class AssistantAgenda : AssistantBaseCore
this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Agenda.PreselectedProvider);
}
+ var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_AGENDA_ASSISTANT).FirstOrDefault();
+ if (deferredContent is not null)
+ this.inputContent = deferredContent;
+
await base.OnInitializedAsync();
}
diff --git a/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs
index f0e552e3..ac6a2c1d 100644
--- a/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs
+++ b/app/MindWork AI Studio/Components/Pages/Coding/AssistantCoding.razor.cs
@@ -1,5 +1,7 @@
using System.Text;
+using AIStudio.Tools;
+
namespace AIStudio.Components.Pages.Coding;
public partial class AssistantCoding : AssistantBaseCore
@@ -24,6 +26,14 @@ 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 = SendToAssistant.CODING_ASSISTANT,
+ },
+ ];
+
private readonly List codingContexts = new();
private bool provideCompilerMessages;
private string compilerMessages = string.Empty;
@@ -39,6 +49,10 @@ public partial class AssistantCoding : AssistantBaseCore
this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Coding.PreselectedProvider);
}
+ var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_CODING_ASSISTANT).FirstOrDefault();
+ if (deferredContent is not null)
+ this.questions = deferredContent;
+
await base.OnInitializedAsync();
}
diff --git a/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs b/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs
index a1ec9f70..3d7916c2 100644
--- a/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs
+++ b/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs
@@ -28,8 +28,14 @@ public partial class AssistantGrammarSpelling : AssistantBaseCore
protected override IReadOnlyList FooterButtons =>
[
new ButtonData("Copy result", Icons.Material.Filled.ContentCopy, Color.Default, string.Empty, () => this.CopyToClipboard(this.correctedText)),
- };
-
+ new SendToButton
+ {
+ Self = SendToAssistant.GRAMMAR_SPELLING_ASSISTANT,
+ UseResultingContentBlockData = false,
+ GetData = () => string.IsNullOrWhiteSpace(this.correctedText) ? this.inputText : this.correctedText
+ },
+ ];
+
#region Overrides of ComponentBase
protected override async Task OnInitializedAsync()
@@ -41,6 +47,10 @@ public partial class AssistantGrammarSpelling : AssistantBaseCore
this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.GrammarSpelling.PreselectedProvider);
}
+ var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT).FirstOrDefault();
+ if (deferredContent is not null)
+ this.inputText = deferredContent;
+
await base.OnInitializedAsync();
}
diff --git a/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor.cs b/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor.cs
index d1f54e5e..72547580 100644
--- a/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor.cs
+++ b/app/MindWork AI Studio/Components/Pages/IconFinder/AssistantIconFinder.razor.cs
@@ -1,3 +1,5 @@
+using AIStudio.Tools;
+
namespace AIStudio.Components.Pages.IconFinder;
public partial class AssistantIconFinder : AssistantBaseCore
@@ -5,21 +7,6 @@ public partial class AssistantIconFinder : AssistantBaseCore
private string inputContext = string.Empty;
private IconSources selectedIconSource;
- #region Overrides of ComponentBase
-
- protected override async Task OnInitializedAsync()
- {
- 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);
- }
-
- await base.OnInitializedAsync();
- }
-
- #endregion
-
protected override string Title => "Icon Finder";
protected override string Description =>
@@ -40,7 +27,34 @@ public partial class AssistantIconFinder : AssistantBaseCore
related to the keyword "buildings" might be the best match. Provide your keywords in a Markdown list without
quotation marks.
""";
+
+ protected override IReadOnlyList FooterButtons =>
+ [
+ new SendToButton
+ {
+ Self = SendToAssistant.ICON_FINDER_ASSISTANT,
+ },
+ ];
+ #region Overrides of ComponentBase
+
+ protected override async Task OnInitializedAsync()
+ {
+ 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);
+ }
+
+ var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_ICON_FINDER_ASSISTANT).FirstOrDefault();
+ if (deferredContent is not null)
+ this.inputContext = deferredContent;
+
+ await base.OnInitializedAsync();
+ }
+
+ #endregion
+
private string? ValidatingContext(string context)
{
if(string.IsNullOrWhiteSpace(context))
diff --git a/app/MindWork AI Studio/Components/Pages/RewriteImprove/AssistantRewriteImprove.razor.cs b/app/MindWork AI Studio/Components/Pages/RewriteImprove/AssistantRewriteImprove.razor.cs
index bd4c5664..c2feff8c 100644
--- a/app/MindWork AI Studio/Components/Pages/RewriteImprove/AssistantRewriteImprove.razor.cs
+++ b/app/MindWork AI Studio/Components/Pages/RewriteImprove/AssistantRewriteImprove.razor.cs
@@ -28,7 +28,13 @@ public partial class AssistantRewriteImprove : AssistantBaseCore
protected override IReadOnlyList FooterButtons =>
[
- new ButtonData("Copy result", Icons.Material.Filled.ContentCopy, Color.Default, string.Empty, () => this.CopyToClipboard(this.rewrittenText))
+ new ButtonData("Copy result", Icons.Material.Filled.ContentCopy, Color.Default, string.Empty, () => this.CopyToClipboard(this.rewrittenText)),
+ new SendToButton
+ {
+ Self = SendToAssistant.REWRITE_ASSISTANT,
+ UseResultingContentBlockData = false,
+ GetData = () => string.IsNullOrWhiteSpace(this.rewrittenText) ? this.inputText : this.rewrittenText,
+ },
];
#region Overrides of ComponentBase
@@ -43,6 +49,10 @@ public partial class AssistantRewriteImprove : AssistantBaseCore
this.selectedWritingStyle = this.SettingsManager.ConfigurationData.RewriteImprove.PreselectedWritingStyle;
}
+ var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_REWRITE_ASSISTANT).FirstOrDefault();
+ if (deferredContent is not null)
+ this.inputText = deferredContent;
+
await base.OnInitializedAsync();
}
diff --git a/app/MindWork AI Studio/Components/Pages/SendToAssistant.cs b/app/MindWork AI Studio/Components/Pages/SendToAssistant.cs
new file mode 100644
index 00000000..4a12621b
--- /dev/null
+++ b/app/MindWork AI Studio/Components/Pages/SendToAssistant.cs
@@ -0,0 +1,14 @@
+namespace AIStudio.Components.Pages;
+
+public enum SendToAssistant
+{
+ NONE = 0,
+
+ GRAMMAR_SPELLING_ASSISTANT,
+ ICON_FINDER_ASSISTANT,
+ REWRITE_ASSISTANT,
+ TRANSLATION_ASSISTANT,
+ AGENDA_ASSISTANT,
+ CODING_ASSISTANT,
+ TEXT_SUMMARIZER_ASSISTANT,
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Components/Pages/SendToAssistantExtensions.cs b/app/MindWork AI Studio/Components/Pages/SendToAssistantExtensions.cs
new file mode 100644
index 00000000..cbb4748f
--- /dev/null
+++ b/app/MindWork AI Studio/Components/Pages/SendToAssistantExtensions.cs
@@ -0,0 +1,20 @@
+namespace AIStudio.Components.Pages;
+
+public static class SendToAssistantExtensions
+{
+ public static string Name(this SendToAssistant assistant)
+ {
+ return assistant switch
+ {
+ SendToAssistant.GRAMMAR_SPELLING_ASSISTANT => "Grammar & Spelling Assistant",
+ SendToAssistant.TEXT_SUMMARIZER_ASSISTANT => "Text Summarizer Assistant",
+ SendToAssistant.ICON_FINDER_ASSISTANT => "Icon Finder Assistant",
+ SendToAssistant.TRANSLATION_ASSISTANT => "Translation Assistant",
+ SendToAssistant.REWRITE_ASSISTANT => "Rewrite Assistant",
+ SendToAssistant.AGENDA_ASSISTANT => "Agenda Assistant",
+ SendToAssistant.CODING_ASSISTANT => "Coding Assistant",
+
+ _ => "Send to ...",
+ };
+ }
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor.cs b/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor.cs
index f0badef0..696cffb0 100644
--- a/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor.cs
+++ b/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor.cs
@@ -23,6 +23,14 @@ 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 = SendToAssistant.TEXT_SUMMARIZER_ASSISTANT,
+ },
+ ];
+
private string inputText = string.Empty;
private bool isAgentRunning;
private CommonLanguages selectedTargetLanguage;
@@ -43,6 +51,10 @@ public partial class AssistantTextSummarizer : AssistantBaseCore
this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.TextSummarizer.PreselectedProvider);
}
+ var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT).FirstOrDefault();
+ if (deferredContent is not null)
+ this.inputText = deferredContent;
+
await base.OnInitializedAsync();
}
diff --git a/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor.cs b/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor.cs
index e4f49708..0b12e43b 100644
--- a/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor.cs
+++ b/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor.cs
@@ -19,6 +19,14 @@ 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 = SendToAssistant.TRANSLATION_ASSISTANT,
+ },
+ ];
+
private bool liveTranslation;
private bool isAgentRunning;
private string inputText = string.Empty;
@@ -38,6 +46,10 @@ public partial class AssistantTranslation : AssistantBaseCore
this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Translation.PreselectedProvider);
}
+ var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_TRANSLATION_ASSISTANT).FirstOrDefault();
+ if (deferredContent is not null)
+ this.inputText = deferredContent;
+
await base.OnInitializedAsync();
}
diff --git a/app/MindWork AI Studio/Tools/Event.cs b/app/MindWork AI Studio/Tools/Event.cs
index 3d124d78..84e780f5 100644
--- a/app/MindWork AI Studio/Tools/Event.cs
+++ b/app/MindWork AI Studio/Tools/Event.cs
@@ -15,4 +15,13 @@ public enum Event
// Chat events:
HAS_CHAT_UNSAVED_CHANGES,
RESET_CHAT_STATE,
+
+ // Send assistant events:
+ SEND_TO_GRAMMAR_SPELLING_ASSISTANT,
+ SEND_TO_ICON_FINDER_ASSISTANT,
+ SEND_TO_REWRITE_ASSISTANT,
+ SEND_TO_TRANSLATION_ASSISTANT,
+ SEND_TO_AGENDA_ASSISTANT,
+ SEND_TO_CODING_ASSISTANT,
+ SEND_TO_TEXT_SUMMARIZER_ASSISTANT,
}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Tools/SendToButton.cs b/app/MindWork AI Studio/Tools/SendToButton.cs
new file mode 100644
index 00000000..4baad16b
--- /dev/null
+++ b/app/MindWork AI Studio/Tools/SendToButton.cs
@@ -0,0 +1,15 @@
+using AIStudio.Components.Pages;
+
+namespace AIStudio.Tools;
+
+public readonly record struct SendToButton() : IButtonData
+{
+ public ButtonTypes Type => ButtonTypes.SEND_TO;
+
+ public Func GetData { get; init; } = () => string.Empty;
+
+ public bool UseResultingContentBlockData { get; init; } = true;
+
+ public SendToAssistant Self { get; init; } = SendToAssistant.NONE;
+
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.8.9.md b/app/MindWork AI Studio/wwwroot/changelog/v0.8.9.md
new file mode 100644
index 00000000..2036a8d5
--- /dev/null
+++ b/app/MindWork AI Studio/wwwroot/changelog/v0.8.9.md
@@ -0,0 +1,5 @@
+# v0.8.9, build 171
+- Added the possibility to send an assistant's result to another assistant
+- Refactored page paths
+- Refactored assistant footer buttons
+- Refactored message bus to support deferred messages
\ No newline at end of file