diff --git a/app/MindWork AI Studio/Components/AssistantBase.razor.cs b/app/MindWork AI Studio/Components/AssistantBase.razor.cs index 56e85dac..fd0dc013 100644 --- a/app/MindWork AI Studio/Components/AssistantBase.razor.cs +++ b/app/MindWork AI Studio/Components/AssistantBase.razor.cs @@ -45,6 +45,8 @@ public abstract partial class AssistantBase : ComponentBase protected virtual bool ShowDedicatedProgress => false; + protected virtual ChatThread ConvertToChatThread => this.chatThread ?? new(); + protected virtual IReadOnlyList FooterButtons => []; protected static readonly Dictionary USER_INPUT_ATTRIBUTES = new(); @@ -53,7 +55,7 @@ public abstract partial class AssistantBase : ComponentBase protected MudForm? form; protected bool inputIsValid; - private ChatThread? chatThread; + protected ChatThread? chatThread; private ContentBlock? resultingContentBlock; private string[] inputIssues = []; private bool isProcessing; @@ -164,7 +166,7 @@ public abstract partial class AssistantBase : ComponentBase return icon; } - private Task SendToAssistant(SendTo assistant, SendToButton sendToButton) + private Task SendToAssistant(SendTo destination, SendToButton sendToButton) { var contentToSend = sendToButton.UseResultingContentBlockData switch { @@ -176,7 +178,7 @@ public abstract partial class AssistantBase : ComponentBase }, }; - var (eventItem, path) = assistant switch + var (eventItem, path) = destination switch { SendTo.AGENDA_ASSISTANT => (Event.SEND_TO_AGENDA_ASSISTANT, Path.ASSISTANT_AGENDA), SendTo.CODING_ASSISTANT => (Event.SEND_TO_CODING_ASSISTANT, Path.ASSISTANT_CODING), @@ -186,10 +188,22 @@ public abstract partial class AssistantBase : ComponentBase SendTo.GRAMMAR_SPELLING_ASSISTANT => (Event.SEND_TO_GRAMMAR_SPELLING_ASSISTANT, Path.ASSISTANT_GRAMMAR_SPELLING), SendTo.TEXT_SUMMARIZER_ASSISTANT => (Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Path.ASSISTANT_SUMMARIZER), + SendTo.CHAT => (Event.SEND_TO_CHAT, Path.CHAT), + _ => (Event.NONE, Path.ASSISTANTS), }; - - MessageBus.INSTANCE.DeferMessage(this, eventItem, contentToSend); + + switch (destination) + { + case SendTo.CHAT: + MessageBus.INSTANCE.DeferMessage(this, eventItem, this.ConvertToChatThread); + break; + + default: + MessageBus.INSTANCE.DeferMessage(this, eventItem, contentToSend); + break; + } + this.NavigationManager.NavigateTo(path); return Task.CompletedTask; } 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 52746b79..0300b2a5 100644 --- a/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/Agenda/AssistantAgenda.razor.cs @@ -1,5 +1,6 @@ using System.Text; +using AIStudio.Chat; using AIStudio.Tools; namespace AIStudio.Components.Pages.Agenda; @@ -100,7 +101,12 @@ public partial class AssistantAgenda : AssistantBaseCore Self = SendTo.AGENDA_ASSISTANT, }, ]; - + + protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with + { + SystemPrompt = SystemPrompts.DEFAULT, + }; + private string inputTopic = string.Empty; private string inputName = string.Empty; private string inputContent = string.Empty; diff --git a/app/MindWork AI Studio/Components/Pages/Chat.razor.cs b/app/MindWork AI Studio/Components/Pages/Chat.razor.cs index 7bcc7acc..7cf84d9c 100644 --- a/app/MindWork AI Studio/Components/Pages/Chat.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/Chat.razor.cs @@ -62,6 +62,24 @@ public partial class Chat : MSGComponentBase, IAsyncDisposable this.providerSettings = this.SettingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.SettingsManager.ConfigurationData.Chat.PreselectedProvider); } + var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages(Event.SEND_TO_CHAT).FirstOrDefault(); + if (deferredContent is not null) + { + this.chatThread = deferredContent; + if (this.chatThread is not null) + { + var firstUserBlock = this.chatThread.Blocks.FirstOrDefault(x => x.Role == ChatRole.USER); + if (firstUserBlock is not null) + { + this.chatThread.Name = firstUserBlock.Content switch + { + ContentText textBlock => this.ExtractThreadName(textBlock.Text), + _ => "Thread" + }; + } + } + } + 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 ac7f76b8..5f7bea4c 100644 --- a/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/GrammarSpelling/AssistantGrammarSpelling.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Chat; using AIStudio.Tools; namespace AIStudio.Components.Pages.GrammarSpelling; @@ -35,6 +36,11 @@ public partial class AssistantGrammarSpelling : AssistantBaseCore GetText = () => string.IsNullOrWhiteSpace(this.correctedText) ? this.inputText : this.correctedText }, ]; + + protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with + { + SystemPrompt = SystemPrompts.DEFAULT, + }; #region Overrides of ComponentBase 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 a856ffbb..0699c4c6 100644 --- a/app/MindWork AI Studio/Components/Pages/RewriteImprove/AssistantRewriteImprove.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/RewriteImprove/AssistantRewriteImprove.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Chat; using AIStudio.Tools; namespace AIStudio.Components.Pages.RewriteImprove; @@ -36,6 +37,11 @@ public partial class AssistantRewriteImprove : AssistantBaseCore GetText = () => string.IsNullOrWhiteSpace(this.rewrittenText) ? this.inputText : this.rewrittenText, }, ]; + + protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with + { + SystemPrompt = SystemPrompts.DEFAULT, + }; #region Overrides of ComponentBase diff --git a/app/MindWork AI Studio/Components/Pages/SendTo.cs b/app/MindWork AI Studio/Components/Pages/SendTo.cs index 3fca705e..86946673 100644 --- a/app/MindWork AI Studio/Components/Pages/SendTo.cs +++ b/app/MindWork AI Studio/Components/Pages/SendTo.cs @@ -11,4 +11,6 @@ public enum SendTo AGENDA_ASSISTANT, CODING_ASSISTANT, TEXT_SUMMARIZER_ASSISTANT, + + CHAT, } \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/SendToExtensions.cs b/app/MindWork AI Studio/Components/Pages/SendToExtensions.cs index 6048f34c..49699aa0 100644 --- a/app/MindWork AI Studio/Components/Pages/SendToExtensions.cs +++ b/app/MindWork AI Studio/Components/Pages/SendToExtensions.cs @@ -14,6 +14,8 @@ public static class SendToExtensions SendTo.AGENDA_ASSISTANT => "Agenda Assistant", SendTo.CODING_ASSISTANT => "Coding Assistant", + SendTo.CHAT => "New Chat", + _ => "Send to ...", }; } 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 d2424fc8..b3aff4c3 100644 --- a/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/TextSummarizer/AssistantTextSummarizer.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Chat; using AIStudio.Tools; namespace AIStudio.Components.Pages.TextSummarizer; @@ -31,6 +32,11 @@ public partial class AssistantTextSummarizer : AssistantBaseCore }, ]; + protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with + { + SystemPrompt = SystemPrompts.DEFAULT, + }; + private string inputText = string.Empty; private bool isAgentRunning; private CommonLanguages selectedTargetLanguage; 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 59511dee..78fddfc8 100644 --- a/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/Translation/AssistantTranslation.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Chat; using AIStudio.Tools; namespace AIStudio.Components.Pages.Translation; @@ -27,6 +28,11 @@ public partial class AssistantTranslation : AssistantBaseCore }, ]; + protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with + { + SystemPrompt = SystemPrompts.DEFAULT, + }; + private bool liveTranslation; private bool isAgentRunning; private string inputText = string.Empty; diff --git a/app/MindWork AI Studio/Tools/Event.cs b/app/MindWork AI Studio/Tools/Event.cs index 84e780f5..8103e182 100644 --- a/app/MindWork AI Studio/Tools/Event.cs +++ b/app/MindWork AI Studio/Tools/Event.cs @@ -16,7 +16,7 @@ public enum Event HAS_CHAT_UNSAVED_CHANGES, RESET_CHAT_STATE, - // Send assistant events: + // Send events: SEND_TO_GRAMMAR_SPELLING_ASSISTANT, SEND_TO_ICON_FINDER_ASSISTANT, SEND_TO_REWRITE_ASSISTANT, @@ -24,4 +24,5 @@ public enum Event SEND_TO_AGENDA_ASSISTANT, SEND_TO_CODING_ASSISTANT, SEND_TO_TEXT_SUMMARIZER_ASSISTANT, + SEND_TO_CHAT, } \ No newline at end of file diff --git a/app/MindWork AI Studio/packages.lock.json b/app/MindWork AI Studio/packages.lock.json index 7cad8d7d..c19fb674 100644 --- a/app/MindWork AI Studio/packages.lock.json +++ b/app/MindWork AI Studio/packages.lock.json @@ -178,6 +178,6 @@ "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" } }, - "net8.0/osx-x64": {} + "net8.0/osx-arm64": {} } } \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.8.10.md b/app/MindWork AI Studio/wwwroot/changelog/v0.8.10.md index d515c6fc..c064a4c3 100644 --- a/app/MindWork AI Studio/wwwroot/changelog/v0.8.10.md +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.8.10.md @@ -1,2 +1,3 @@ # v0.8.10, build 172 +- Added the possibility to send any assistant context to a new chat session for further questions - Improved the coding assistant's language handling when creating the corresponding prompt \ No newline at end of file