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
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."

View File

@ -228,6 +228,16 @@
</span>
</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>
</MudForm>

View File

@ -7,13 +7,20 @@ namespace AIStudio.Assistants.VisualBriefing;
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>
/// Gets whether the selected revision cannot be recompiled without model calls.
/// </summary>
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;
/// <summary>
/// Defines <c>CannotGenerate</c> 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);
}
/// <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>
/// Gets the six UI groups for the eight durable build stages.
/// </summary>
@ -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;
}
/// <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
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."

View File

@ -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."