mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-18 08:58:00 +00:00
Always show the embedding status in the navigation
This commit is contained in:
6 files changed
+37
-10
No files matched your search
@@ -8701,6 +8701,9 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Show details"
|
|||||||
-- Security notice
|
-- Security notice
|
||||||
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4004397997"] = "Security notice"
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4004397997"] = "Security notice"
|
||||||
|
|
||||||
|
-- All data sources are up to date.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4055300176"] = "All data sources are up to date."
|
||||||
|
|
||||||
-- Information
|
-- Information
|
||||||
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information"
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information"
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
|
|||||||
private readonly SemaphoreSlim mandatoryInfoDialogSemaphore = new(1, 1);
|
private readonly SemaphoreSlim mandatoryInfoDialogSemaphore = new(1, 1);
|
||||||
private readonly SemaphoreSlim promptInjectionDialogSemaphore = new(1, 1);
|
private readonly SemaphoreSlim promptInjectionDialogSemaphore = new(1, 1);
|
||||||
|
|
||||||
private DataSourceEmbeddingOverview embeddingOverview = new(false, DataSourceEmbeddingState.COMPLETED, 0, 0, 0);
|
private DataSourceEmbeddingOverview embeddingOverview = new(DataSourceEmbeddingState.COMPLETED, 0, 0, 0);
|
||||||
private IReadOnlyCollection<NavBarItem> navItems = [];
|
private IReadOnlyCollection<NavBarItem> navItems = [];
|
||||||
private NavBarItem embeddingItem = new (string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, false);
|
private NavBarItem embeddingItem = new (string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, false);
|
||||||
private bool showEmbeddingStatusIcon;
|
private bool showEmbeddingStatusIcon;
|
||||||
@@ -459,13 +459,29 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
|
|||||||
private void LoadEmbeddingItem()
|
private void LoadEmbeddingItem()
|
||||||
{
|
{
|
||||||
this.embeddingOverview = this.DataSourceEmbeddingService.GetOverview();
|
this.embeddingOverview = this.DataSourceEmbeddingService.GetOverview();
|
||||||
this.showEmbeddingStatusIcon = this.embeddingOverview.IsVisible;
|
|
||||||
|
//
|
||||||
|
// The entry is shown whenever local RAG is available, in every state. Hiding it while
|
||||||
|
// nothing was running looked tidier, but a data source which was just added has no status
|
||||||
|
// yet: the service creates one when the run begins. The icon was therefore missing during
|
||||||
|
// the very moment the user was waiting for it. What the entry does communicate is its
|
||||||
|
// state, through the icon below.
|
||||||
|
//
|
||||||
|
// The preview feature is what gates it now. The route itself is not gated, so without this
|
||||||
|
// check, users who have no RAG at all would get a navigation entry for it.
|
||||||
|
//
|
||||||
|
this.showEmbeddingStatusIcon = PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager);
|
||||||
|
|
||||||
var palette = this.ColorTheme.GetCurrentPalette(this.SettingsManager);
|
var palette = this.ColorTheme.GetCurrentPalette(this.SettingsManager);
|
||||||
(string icon, string lightcolor, string darkcolor) embeddingIcon = this.embeddingOverview.State switch
|
(string icon, string lightcolor, string darkcolor) embeddingIcon = this.embeddingOverview.State switch
|
||||||
{
|
{
|
||||||
(DataSourceEmbeddingState.FAILED) => (Icons.Material.Filled.Warning, palette.Error.Value, "#d32f2f"),
|
DataSourceEmbeddingState.FAILED => (Icons.Material.Filled.Warning, palette.Error.Value, "#d32f2f"),
|
||||||
(DataSourceEmbeddingState.QUEUED) => (Icons.Material.Filled.Sync, palette.Info.Value, "#1976d2"),
|
DataSourceEmbeddingState.QUEUED => (Icons.Material.Filled.Sync, palette.Info.Value, "#1976d2"),
|
||||||
_ => (Icons.Material.Filled.Sync, palette.Warning.Value, "#d29f00"),
|
DataSourceEmbeddingState.RUNNING => (Icons.Material.Filled.Sync, palette.Warning.Value, "#d29f00"),
|
||||||
|
|
||||||
|
// Nothing to do: the entry keeps the colors of its neighbors, so a permanently visible
|
||||||
|
// icon does not draw attention while there is nothing to attend to:
|
||||||
|
_ => (Icons.Material.Filled.CloudDone, palette.DarkLighten, palette.GrayLight),
|
||||||
};
|
};
|
||||||
this.embeddingItem = new NavBarItem(T("Embeddings"), embeddingIcon.icon, embeddingIcon.lightcolor, embeddingIcon.darkcolor, Routes.EMBEDDINGS, false);
|
this.embeddingItem = new NavBarItem(T("Embeddings"), embeddingIcon.icon, embeddingIcon.lightcolor, embeddingIcon.darkcolor, Routes.EMBEDDINGS, false);
|
||||||
}
|
}
|
||||||
@@ -480,7 +496,10 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan
|
|||||||
DataSourceEmbeddingState.FAILED => this.embeddingOverview.FailedFiles > 0
|
DataSourceEmbeddingState.FAILED => this.embeddingOverview.FailedFiles > 0
|
||||||
? string.Format(T("Some embeddings failed. {0} file(s) need attention."), this.embeddingOverview.FailedFiles)
|
? string.Format(T("Some embeddings failed. {0} file(s) need attention."), this.embeddingOverview.FailedFiles)
|
||||||
: T("Some embeddings failed and need attention."),
|
: T("Some embeddings failed and need attention."),
|
||||||
_ => string.Empty
|
|
||||||
|
// The entry is always visible, so its resting state needs words as well. An empty tooltip
|
||||||
|
// would leave the user guessing what the icon is there for:
|
||||||
|
_ => T("All data sources are up to date.")
|
||||||
};
|
};
|
||||||
|
|
||||||
private async Task ShowUpdateDialog()
|
private async Task ShowUpdateDialog()
|
||||||
|
|||||||
+3
@@ -8703,6 +8703,9 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Details anzeigen
|
|||||||
-- Security notice
|
-- Security notice
|
||||||
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4004397997"] = "Sicherheitshinweis"
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4004397997"] = "Sicherheitshinweis"
|
||||||
|
|
||||||
|
-- All data sources are up to date.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4055300176"] = "Alle Datenquellen sind auf dem neuesten Stand."
|
||||||
|
|
||||||
-- Information
|
-- Information
|
||||||
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information"
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information"
|
||||||
|
|
||||||
|
|||||||
+3
@@ -8703,6 +8703,9 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Show details"
|
|||||||
-- Security notice
|
-- Security notice
|
||||||
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4004397997"] = "Security notice"
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4004397997"] = "Security notice"
|
||||||
|
|
||||||
|
-- All data sources are up to date.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4055300176"] = "All data sources are up to date."
|
||||||
|
|
||||||
-- Information
|
-- Information
|
||||||
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information"
|
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information"
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
namespace AIStudio.Tools.Services;
|
namespace AIStudio.Tools.Services;
|
||||||
|
|
||||||
public sealed record DataSourceEmbeddingOverview(bool IsVisible, DataSourceEmbeddingState State, int IndexedFiles, int TotalFiles, int FailedFiles);
|
public sealed record DataSourceEmbeddingOverview(DataSourceEmbeddingState State, int IndexedFiles, int TotalFiles, int FailedFiles);
|
||||||
@@ -95,7 +95,6 @@ public sealed partial class DataSourceEmbeddingService(SettingsManager settingsM
|
|||||||
{
|
{
|
||||||
var total = Math.Max(activeStatus.TotalFiles, 1);
|
var total = Math.Max(activeStatus.TotalFiles, 1);
|
||||||
return new(
|
return new(
|
||||||
true,
|
|
||||||
activeStatus.State,
|
activeStatus.State,
|
||||||
activeStatus.IndexedFiles,
|
activeStatus.IndexedFiles,
|
||||||
total,
|
total,
|
||||||
@@ -106,9 +105,9 @@ public sealed partial class DataSourceEmbeddingService(SettingsManager settingsM
|
|||||||
.FirstOrDefault(status => status.State is DataSourceEmbeddingState.FAILED || status.FailedFiles > 0);
|
.FirstOrDefault(status => status.State is DataSourceEmbeddingState.FAILED || status.FailedFiles > 0);
|
||||||
|
|
||||||
if (failedStatus is not null)
|
if (failedStatus is not null)
|
||||||
return new(true, DataSourceEmbeddingState.FAILED, failedStatus.IndexedFiles, failedStatus.TotalFiles, failedStatus.FailedFiles);
|
return new(DataSourceEmbeddingState.FAILED, failedStatus.IndexedFiles, failedStatus.TotalFiles, failedStatus.FailedFiles);
|
||||||
|
|
||||||
return new(false, DataSourceEmbeddingState.COMPLETED, 0, 0, 0);
|
return new(DataSourceEmbeddingState.COMPLETED, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task QueueAllInternalDataSourcesAsync()
|
public Task QueueAllInternalDataSourcesAsync()
|
||||||
|
|||||||
Reference in new issue
Block a user