Added support for stopping a running build session

This commit is contained in:
Thorsten Sommer 2026-08-02 11:36:52 +02:00
parent d658d6f77a
commit 832b5e32cc
Signed by untrusted user who does not match committer: tsommer
GPG Key ID: 371BBA77A02C0108
5 changed files with 72 additions and 13 deletions

View File

@ -2278,6 +2278,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Kind -- Kind
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Kind" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Kind"
-- Stop build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build"
-- Running -- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running"
@ -2593,6 +2596,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Audience expertise -- Audience expertise
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4279519256"] = "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. -- 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." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4292361710"] = "If you need help, report the problem and include the project ID."

View File

@ -228,6 +228,16 @@
</span> </span>
</MudTooltip> </MudTooltip>
} }
@if (this.CurrentBuildSession?.IsActive == true)
{
<MudButton Variant="Variant.Filled"
Color="Color.Error"
StartIcon="@Icons.Material.Filled.Stop"
OnClick="@this.CancelCurrentBuildAsync"
Disabled="@this.IsCurrentBuildCanceling">
@(this.IsCurrentBuildCanceling ? T("Stopping build...") : T("Stop build"))
</MudButton>
}
</MudStack> </MudStack>
</MudForm> </MudForm>

View File

@ -7,13 +7,20 @@ namespace AIStudio.Assistants.VisualBriefing;
public partial class VisualBriefingAssistant public partial class VisualBriefingAssistant
{ {
/// <summary>
/// Gets the active or canceling build session for the selected briefing.
/// </summary>
private AssistantSessionSnapshot? CurrentBuildSession => this.selectedBriefing is null ? null : this.AssistantSessionService.TryGetSnapshot(CreateBuildSessionKey(this.selectedBriefing.BriefingId));
/// <summary>
/// Gets whether cancellation was already requested for the selected briefing build.
/// </summary>
private bool IsCurrentBuildCanceling => this.CurrentBuildSession?.Status is AssistantSessionStatus.CANCELING;
/// <summary> /// <summary>
/// Gets whether the selected revision cannot be recompiled without model calls. /// Gets whether the selected revision cannot be recompiled without model calls.
/// </summary> /// </summary>
private bool CannotRecompile => this.IsCurrentBusy || private bool CannotRecompile => this.IsCurrentBusy || this.selectedBriefing is null || this.selectedRevisionId == Guid.Empty || !this.SelectedVersionSupportsEdits;
this.selectedBriefing is null ||
this.selectedRevisionId == Guid.Empty ||
!this.SelectedVersionSupportsEdits;
/// <summary> /// <summary>
/// Defines <c>CannotGenerate</c> for the visual briefing feature. /// Defines <c>CannotGenerate</c> for the visual briefing feature.
@ -106,7 +113,7 @@ public partial class VisualBriefingAssistant
var generationProvider = this.provider; var generationProvider = this.provider;
var generationProfile = this.profile; 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) if (this.AssistantSessionService.TryGetSnapshot(sessionKey)?.IsActive == true)
return; return;
@ -140,12 +147,13 @@ public partial class VisualBriefingAssistant
if (!generation.Success || generation.Version is null) if (!generation.Success || generation.Version is null)
{ {
this.reusableContentBuildId = generation.CanContinueAsRebuild terminalStatus = generation.FailureCode is VisualBriefingFailureCode.CANCELED ? AssistantSessionStatus.CANCELED : AssistantSessionStatus.FAILED;
? generation.Diagnostics.BuildId this.reusableContentBuildId = generation.CanContinueAsRebuild ? generation.Diagnostics.BuildId : null;
: null;
terminalIssue = generation.Issue; terminalIssue = generation.Issue;
this.Snackbar.Add(generation.Issue, Severity.Error); if (terminalStatus is not AssistantSessionStatus.CANCELED)
this.Snackbar.Add(generation.Issue, Severity.Error);
return; return;
} }
@ -211,7 +219,7 @@ public partial class VisualBriefingAssistant
var recompileBriefing = this.selectedBriefing; var recompileBriefing = this.selectedBriefing;
var briefingId = recompileBriefing.BriefingId; 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) if (this.AssistantSessionService.TryGetSnapshot(sessionKey)?.IsActive == true)
return; return;
@ -241,8 +249,11 @@ public partial class VisualBriefingAssistant
if (!result.Success || result.Version is null) if (!result.Success || result.Version is null)
{ {
terminalStatus = result.FailureCode is VisualBriefingFailureCode.CANCELED ? AssistantSessionStatus.CANCELED : AssistantSessionStatus.FAILED;
terminalIssue = result.Issue; terminalIssue = result.Issue;
this.Snackbar.Add(result.Issue, Severity.Error); if (terminalStatus is not AssistantSessionStatus.CANCELED)
this.Snackbar.Add(result.Issue, Severity.Error);
return; return;
} }
@ -371,6 +382,22 @@ public partial class VisualBriefingAssistant
parentRevisionOverride: this.latestBuild.ParentRevisionId); parentRevisionOverride: this.latestBuild.ParentRevisionId);
} }
/// <summary>
/// Requests cancellation for the build running on the selected briefing.
/// </summary>
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();
}
/// <summary> /// <summary>
/// Gets the six UI groups for the eight durable build stages. /// Gets the six UI groups for the eight durable build stages.
/// </summary> /// </summary>
@ -506,7 +533,11 @@ public partial class VisualBriefingAssistant
if (this.generatingBriefings.Contains(briefingId)) if (this.generatingBriefings.Contains(briefingId))
return true; return true;
var key = new AssistantSessionKey(ComponentKind.VISUAL_BRIEFING_ASSISTANT, briefingId.ToString("D")); return this.AssistantSessionService.TryGetSnapshot(CreateBuildSessionKey(briefingId))?.IsActive == true;
return this.AssistantSessionService.TryGetSnapshot(key)?.IsActive == true;
} }
/// <summary>
/// Creates the assistant-session key used by a visual briefing build.
/// </summary>
private static AssistantSessionKey CreateBuildSessionKey(Guid briefingId) => new(ComponentKind.VISUAL_BRIEFING_ASSISTANT, briefingId.ToString("D"));
} }

View File

@ -2280,6 +2280,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Kind -- Kind
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Typ" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Typ"
-- Stop build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Erstellung stoppen"
-- Running -- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Wird ausgeführt" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Wird ausgeführt"
@ -2595,6 +2598,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Audience expertise -- Audience expertise
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4279519256"] = "Fachkenntnisse der Zielgruppe" 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. -- 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." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4292361710"] = "Wenn Sie Hilfe benötigen, melden Sie das Problem und geben Sie die Projekt-ID an."

View File

@ -2280,6 +2280,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Kind -- Kind
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Kind" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1073024099"] = "Kind"
-- Stop build
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1150899861"] = "Stop build"
-- Running -- Running
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running" UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1160324588"] = "Running"
@ -2595,6 +2598,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Audience expertise -- Audience expertise
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4279519256"] = "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. -- 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." UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T4292361710"] = "If you need help, report the problem and include the project ID."