diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index 6ac89cdc..f70ad3ff 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -2278,6 +2278,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Kind UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Kind" +-- Stop build +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build" + -- Running UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running" @@ -2593,6 +2596,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Audience expertise UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4279519256"] = "Audience expertise" +-- Stopping build... +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4290803141"] = "Stopping build..." + -- If you need help, report the problem and include the project ID. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4292361710"] = "If you need help, report the problem and include the project ID." diff --git a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor index d31026c8..ed4423fb 100644 --- a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor +++ b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor @@ -228,6 +228,16 @@ } + @if (this.CurrentBuildSession?.IsActive == true) + { + + @(this.IsCurrentBuildCanceling ? T("Stopping build...") : T("Stop build")) + + } diff --git a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Build.cs b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Build.cs index 6a537fe4..91e08ab2 100644 --- a/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Build.cs +++ b/app/MindWork AI Studio/Assistants/VisualBriefing/VisualBriefingAssistant.razor.Build.cs @@ -7,13 +7,20 @@ namespace AIStudio.Assistants.VisualBriefing; public partial class VisualBriefingAssistant { + /// + /// Gets the active or canceling build session for the selected briefing. + /// + private AssistantSessionSnapshot? CurrentBuildSession => this.selectedBriefing is null ? null : this.AssistantSessionService.TryGetSnapshot(CreateBuildSessionKey(this.selectedBriefing.BriefingId)); + + /// + /// Gets whether cancellation was already requested for the selected briefing build. + /// + private bool IsCurrentBuildCanceling => this.CurrentBuildSession?.Status is AssistantSessionStatus.CANCELING; + /// /// Gets whether the selected revision cannot be recompiled without model calls. /// - private bool CannotRecompile => this.IsCurrentBusy || - this.selectedBriefing is null || - this.selectedRevisionId == Guid.Empty || - !this.SelectedVersionSupportsEdits; + private bool CannotRecompile => this.IsCurrentBusy || this.selectedBriefing is null || this.selectedRevisionId == Guid.Empty || !this.SelectedVersionSupportsEdits; /// /// Defines CannotGenerate for the visual briefing feature. @@ -106,7 +113,7 @@ public partial class VisualBriefingAssistant var generationProvider = this.provider; var generationProfile = this.profile; - var sessionKey = new AssistantSessionKey(ComponentKind.VISUAL_BRIEFING_ASSISTANT, briefingId.ToString("D")); + var sessionKey = CreateBuildSessionKey(briefingId); if (this.AssistantSessionService.TryGetSnapshot(sessionKey)?.IsActive == true) return; @@ -140,12 +147,13 @@ public partial class VisualBriefingAssistant if (!generation.Success || generation.Version is null) { - this.reusableContentBuildId = generation.CanContinueAsRebuild - ? generation.Diagnostics.BuildId - : null; + terminalStatus = generation.FailureCode is VisualBriefingFailureCode.CANCELED ? AssistantSessionStatus.CANCELED : AssistantSessionStatus.FAILED; + this.reusableContentBuildId = generation.CanContinueAsRebuild ? generation.Diagnostics.BuildId : null; terminalIssue = generation.Issue; - this.Snackbar.Add(generation.Issue, Severity.Error); + if (terminalStatus is not AssistantSessionStatus.CANCELED) + this.Snackbar.Add(generation.Issue, Severity.Error); + return; } @@ -211,7 +219,7 @@ public partial class VisualBriefingAssistant var recompileBriefing = this.selectedBriefing; var briefingId = recompileBriefing.BriefingId; - var sessionKey = new AssistantSessionKey(ComponentKind.VISUAL_BRIEFING_ASSISTANT, briefingId.ToString("D")); + var sessionKey = CreateBuildSessionKey(briefingId); if (this.AssistantSessionService.TryGetSnapshot(sessionKey)?.IsActive == true) return; @@ -241,8 +249,11 @@ public partial class VisualBriefingAssistant if (!result.Success || result.Version is null) { + terminalStatus = result.FailureCode is VisualBriefingFailureCode.CANCELED ? AssistantSessionStatus.CANCELED : AssistantSessionStatus.FAILED; terminalIssue = result.Issue; - this.Snackbar.Add(result.Issue, Severity.Error); + if (terminalStatus is not AssistantSessionStatus.CANCELED) + this.Snackbar.Add(result.Issue, Severity.Error); + return; } @@ -371,6 +382,22 @@ public partial class VisualBriefingAssistant parentRevisionOverride: this.latestBuild.ParentRevisionId); } + /// + /// Requests cancellation for the build running on the selected briefing. + /// + private async Task CancelCurrentBuildAsync() + { + if (this.selectedBriefing is null) + return; + + var sessionKey = CreateBuildSessionKey(this.selectedBriefing.BriefingId); + if (this.AssistantSessionService.TryGetSnapshot(sessionKey)?.Status is not AssistantSessionStatus.RUNNING) + return; + + await this.AssistantSessionService.CancelAsync(sessionKey, this); + this.StateHasChanged(); + } + /// /// Gets the six UI groups for the eight durable build stages. /// @@ -506,7 +533,11 @@ public partial class VisualBriefingAssistant if (this.generatingBriefings.Contains(briefingId)) return true; - var key = new AssistantSessionKey(ComponentKind.VISUAL_BRIEFING_ASSISTANT, briefingId.ToString("D")); - return this.AssistantSessionService.TryGetSnapshot(key)?.IsActive == true; + return this.AssistantSessionService.TryGetSnapshot(CreateBuildSessionKey(briefingId))?.IsActive == true; } + + /// + /// Creates the assistant-session key used by a visual briefing build. + /// + private static AssistantSessionKey CreateBuildSessionKey(Guid briefingId) => new(ComponentKind.VISUAL_BRIEFING_ASSISTANT, briefingId.ToString("D")); } \ No newline at end of file diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua index 53877fe3..d931ab66 100644 --- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua @@ -2280,6 +2280,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Kind UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Typ" +-- Stop build +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Erstellung stoppen" + -- Running UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Wird ausgeführt" @@ -2595,6 +2598,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Audience expertise UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4279519256"] = "Fachkenntnisse der Zielgruppe" +-- Stopping build... +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4290803141"] = "Erstellung wird angehalten …" + -- If you need help, report the problem and include the project ID. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4292361710"] = "Wenn Sie Hilfe benötigen, melden Sie das Problem und geben Sie die Projekt-ID an." diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua index 27e64d11..84c7892a 100644 --- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua @@ -2280,6 +2280,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Kind UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Kind" +-- Stop build +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build" + -- Running UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running" @@ -2595,6 +2598,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT:: -- Audience expertise UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4279519256"] = "Audience expertise" +-- Stopping build... +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4290803141"] = "Stopping build..." + -- If you need help, report the problem and include the project ID. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4292361710"] = "If you need help, report the problem and include the project ID."