mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-13 12:53:48 +00:00
Offer a repair for data sources with an unreadable index
This commit is contained in:
7 files changed
+163
-2
No files matched your search
@@ -61,6 +61,12 @@
|
||||
<MudIconButton Icon="@Icons.Material.Filled.Sync" Color="Color.Info" Size="Size.Small" OnClick="@(async () => await this.RefreshDataSource(status))" />
|
||||
</MudTooltip>
|
||||
}
|
||||
@if (this.CanRepair(status))
|
||||
{
|
||||
<MudTooltip Text="@T("Repair this data source by indexing it anew")">
|
||||
<MudIconButton Icon="@Icons.Material.Filled.Build" Color="Color.Warning" Size="Size.Small" OnClick="@(async () => await this.RepairDataSource(status))" />
|
||||
</MudTooltip>
|
||||
}
|
||||
</div>
|
||||
</TitleContent>
|
||||
<ChildContent>
|
||||
|
||||
@@ -318,11 +318,26 @@ public partial class Embeddings : MSGComponentBase
|
||||
await this.MessageBus.SendError(new(Icons.Material.Filled.Folder, string.Format(T("Could not open the file location: {0}"), issue)));
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// An unreadable index is left to the repair button below: another attempt would open the same
|
||||
/// store and fail the same way, so offering both would be offering one that does nothing.
|
||||
/// </remarks>
|
||||
private bool CanRefresh(DataSourceEmbeddingStatus status)
|
||||
{
|
||||
return this.DataSourceEmbeddingService.CanRefreshDataSource(status.DataSourceId) &&
|
||||
status.State is not DataSourceEmbeddingState.RUNNING and not DataSourceEmbeddingState.QUEUED &&
|
||||
(status.State is DataSourceEmbeddingState.FAILED || status.FailedFiles > 0);
|
||||
status is { VectorStoreUnreadable: false, State: not DataSourceEmbeddingState.RUNNING and not DataSourceEmbeddingState.QUEUED } &&
|
||||
(status.State is DataSourceEmbeddingState.FAILED || status.FailedFiles > 0);
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// Offered for the one failure which no further attempt gets past. It is a button of its own
|
||||
/// and not the refresh one, because what it does is not what the user expects of a refresh:
|
||||
/// everything indexed so far is thrown away and paid for again.
|
||||
/// </remarks>
|
||||
private bool CanRepair(DataSourceEmbeddingStatus status)
|
||||
{
|
||||
return this.DataSourceEmbeddingService.CanRefreshDataSource(status.DataSourceId) &&
|
||||
status is { State: DataSourceEmbeddingState.FAILED, VectorStoreUnreadable: true };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -340,4 +355,13 @@ public partial class Embeddings : MSGComponentBase
|
||||
this.ReloadStatuses();
|
||||
await this.InvokeAsync(this.StateHasChanged);
|
||||
}
|
||||
|
||||
private async Task RepairDataSource(DataSourceEmbeddingStatus status)
|
||||
{
|
||||
if (!await DataSourceRepair.ConfirmAndRepairAsync(this.DialogService, this.DataSourceEmbeddingService, status.DataSourceId, status.DataSourceName))
|
||||
return;
|
||||
|
||||
this.ReloadStatuses();
|
||||
await this.InvokeAsync(this.StateHasChanged);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user