mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-07-22 16:22:56 +00:00
Moved the data source settings into the data selection component
This commit is contained in:
parent
4d375a5890
commit
3963589e21
@ -3,7 +3,7 @@
|
|||||||
@if (this.SelectionMode is DataSourceSelectionMode.SELECTION_MODE)
|
@if (this.SelectionMode is DataSourceSelectionMode.SELECTION_MODE)
|
||||||
{
|
{
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<MudTooltip Text="Select the data sources you want to use here." Placement="Placement.Top">
|
<MudTooltip Text="Select the data you want to use here." Placement="Placement.Top">
|
||||||
@if (this.PopoverTriggerMode is PopoverTriggerMode.ICON)
|
@if (this.PopoverTriggerMode is PopoverTriggerMode.ICON)
|
||||||
{
|
{
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.Source" Class="@this.PopoverButtonClasses" OnClick="@(() => this.ToggleDataSourceSelection())"/>
|
<MudIconButton Icon="@Icons.Material.Filled.Source" Class="@this.PopoverButtonClasses" OnClick="@(() => this.ToggleDataSourceSelection())"/>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudButton Variant="Variant.Filled" StartIcon="@Icons.Material.Filled.Source" Class="@this.PopoverButtonClasses" OnClick="@(() => this.ToggleDataSourceSelection())">
|
<MudButton Variant="Variant.Filled" StartIcon="@Icons.Material.Filled.Source" Class="@this.PopoverButtonClasses" OnClick="@(() => this.ToggleDataSourceSelection())">
|
||||||
Select data sources
|
Select data
|
||||||
</MudButton>
|
</MudButton>
|
||||||
}
|
}
|
||||||
</MudTooltip>
|
</MudTooltip>
|
||||||
@ -21,7 +21,13 @@
|
|||||||
<MudCardHeader>
|
<MudCardHeader>
|
||||||
<CardHeaderContent>
|
<CardHeaderContent>
|
||||||
<PreviewPrototype/>
|
<PreviewPrototype/>
|
||||||
<MudText Typo="Typo.h5">Data Source Selection</MudText>
|
<MudStack Row="true" AlignItems="AlignItems.Center">
|
||||||
|
<MudText Typo="Typo.h5">Data Source Selection</MudText>
|
||||||
|
<MudSpacer/>
|
||||||
|
<MudTooltip Text="Manage your data sources" Placement="Placement.Top">
|
||||||
|
<MudIconButton Variant="Variant.Filled" Icon="@Icons.Material.Filled.Settings" OnClick="@this.OpenSettingsDialog"/>
|
||||||
|
</MudTooltip>
|
||||||
|
</MudStack>
|
||||||
</CardHeaderContent>
|
</CardHeaderContent>
|
||||||
</MudCardHeader>
|
</MudCardHeader>
|
||||||
<MudCardContent Style="min-width: 24em; max-height: 60vh; max-width: 45vw; overflow: auto;">
|
<MudCardContent Style="min-width: 24em; max-height: 60vh; max-width: 45vw; overflow: auto;">
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
using AIStudio.Dialogs.Settings;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
using AIStudio.Settings.DataModel;
|
using AIStudio.Settings.DataModel;
|
||||||
using AIStudio.Tools.Services;
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
using DialogOptions = AIStudio.Dialogs.DialogOptions;
|
||||||
|
|
||||||
namespace AIStudio.Components;
|
namespace AIStudio.Components;
|
||||||
|
|
||||||
public partial class DataSourceSelection : ComponentBase, IMessageBusReceiver, IDisposable
|
public partial class DataSourceSelection : ComponentBase, IMessageBusReceiver, IDisposable
|
||||||
@ -45,7 +48,7 @@ public partial class DataSourceSelection : ComponentBase, IMessageBusReceiver, I
|
|||||||
private DataSourceService DataSourceService { get; init; } = null!;
|
private DataSourceService DataSourceService { get; init; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
private ILogger<DataSourceSelection> Logger { get; init; } = null!;
|
private IDialogService DialogService { get; init; } = null!;
|
||||||
|
|
||||||
private bool internalChange;
|
private bool internalChange;
|
||||||
private bool showDataSourceSelection;
|
private bool showDataSourceSelection;
|
||||||
@ -131,6 +134,20 @@ public partial class DataSourceSelection : ComponentBase, IMessageBusReceiver, I
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
private async Task OpenSettingsDialog()
|
||||||
|
{
|
||||||
|
this.showDataSourceSelection = false;
|
||||||
|
this.StateHasChanged();
|
||||||
|
|
||||||
|
var dialogParameters = new DialogParameters();
|
||||||
|
var dialogReference = await this.DialogService.ShowAsync<SettingsDialogDataSources>(null, dialogParameters, DialogOptions.FULLSCREEN);
|
||||||
|
await dialogReference.Result;
|
||||||
|
await this.LoadAndApplyFilters();
|
||||||
|
|
||||||
|
this.showDataSourceSelection = true;
|
||||||
|
this.StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
private SelectionMode GetListSelectionMode() => this.aiBasedSourceSelection ? MudBlazor.SelectionMode.SingleSelection : MudBlazor.SelectionMode.MultiSelection;
|
private SelectionMode GetListSelectionMode() => this.aiBasedSourceSelection ? MudBlazor.SelectionMode.SingleSelection : MudBlazor.SelectionMode.MultiSelection;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
@ -20,8 +21,11 @@ public abstract class SettingsDialogBase : ComponentBase
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected MessageBus MessageBus { get; init; } = null!;
|
protected MessageBus MessageBus { get; init; } = null!;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected RustService RustService { get; init; } = null!;
|
||||||
|
|
||||||
protected readonly List<ConfigurationSelectData<string>> availableLLMProviders = new();
|
protected readonly List<ConfigurationSelectData<string>> availableLLMProviders = new();
|
||||||
|
protected readonly List<ConfigurationSelectData<string>> availableEmbeddingProviders = new();
|
||||||
|
|
||||||
#region Overrides of ComponentBase
|
#region Overrides of ComponentBase
|
||||||
|
|
||||||
@ -29,6 +33,7 @@ public abstract class SettingsDialogBase : ComponentBase
|
|||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
this.UpdateProviders();
|
this.UpdateProviders();
|
||||||
|
this.UpdateEmbeddingProviders();
|
||||||
base.OnInitialized();
|
base.OnInitialized();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,4 +48,11 @@ public abstract class SettingsDialogBase : ComponentBase
|
|||||||
foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
|
foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
|
||||||
this.availableLLMProviders.Add(new (provider.InstanceName, provider.Id));
|
this.availableLLMProviders.Add(new (provider.InstanceName, provider.Id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateEmbeddingProviders()
|
||||||
|
{
|
||||||
|
this.availableEmbeddingProviders.Clear();
|
||||||
|
foreach (var provider in this.SettingsManager.ConfigurationData.EmbeddingProviders)
|
||||||
|
this.availableEmbeddingProviders.Add(new (provider.Name, provider.Id));
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,13 +1,15 @@
|
|||||||
@using AIStudio.Settings.DataModel
|
@using AIStudio.Settings.DataModel
|
||||||
@inherits SettingsPanelBase
|
@inherits SettingsDialogBase
|
||||||
|
|
||||||
@if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager))
|
<MudDialog>
|
||||||
{
|
<TitleContent>
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.IntegrationInstructions" HeaderText="Configure Data Sources">
|
|
||||||
<PreviewPrototype/>
|
<PreviewPrototype/>
|
||||||
<MudText Typo="Typo.h4" Class="mb-3">
|
<MudText Typo="Typo.h6" Class="d-flex align-center">
|
||||||
|
<MudIcon Icon="@Icons.Material.Filled.IntegrationInstructions" Class="mr-2"/>
|
||||||
Configured Data Sources
|
Configured Data Sources
|
||||||
</MudText>
|
</MudText>
|
||||||
|
</TitleContent>
|
||||||
|
<DialogContent>
|
||||||
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
||||||
You might configure different data sources. A data source can include one file, all files
|
You might configure different data sources. A data source can include one file, all files
|
||||||
in a directory, or data from your company. Later, you can incorporate these data sources
|
in a directory, or data from your company. Later, you can incorporate these data sources
|
||||||
@ -57,5 +59,8 @@
|
|||||||
<MudMenuItem OnClick="() => this.AddDataSource(DataSourceType.LOCAL_DIRECTORY)">Local Directory</MudMenuItem>
|
<MudMenuItem OnClick="() => this.AddDataSource(DataSourceType.LOCAL_DIRECTORY)">Local Directory</MudMenuItem>
|
||||||
<MudMenuItem OnClick="() => this.AddDataSource(DataSourceType.LOCAL_FILE)">Local File</MudMenuItem>
|
<MudMenuItem OnClick="() => this.AddDataSource(DataSourceType.LOCAL_FILE)">Local File</MudMenuItem>
|
||||||
</MudMenu>
|
</MudMenu>
|
||||||
</ExpansionPanel>
|
</DialogContent>
|
||||||
}
|
<DialogActions>
|
||||||
|
<MudButton OnClick="@this.Close" Variant="Variant.Filled">Close</MudButton>
|
||||||
|
</DialogActions>
|
||||||
|
</MudDialog>
|
@ -1,35 +1,11 @@
|
|||||||
using AIStudio.Dialogs;
|
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
using AIStudio.Settings.DataModel;
|
using AIStudio.Settings.DataModel;
|
||||||
using AIStudio.Tools.ERIClient.DataModel;
|
using AIStudio.Tools.ERIClient.DataModel;
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Components;
|
namespace AIStudio.Dialogs.Settings;
|
||||||
|
|
||||||
using DialogOptions = AIStudio.Dialogs.DialogOptions;
|
public partial class SettingsDialogDataSources : SettingsDialogBase
|
||||||
|
|
||||||
namespace AIStudio.Components.Settings;
|
|
||||||
|
|
||||||
public partial class SettingsPanelDataSources : SettingsPanelBase
|
|
||||||
{
|
{
|
||||||
[Parameter]
|
|
||||||
public List<ConfigurationSelectData<string>> AvailableDataSources { get; set; } = new();
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public EventCallback<List<ConfigurationSelectData<string>>> AvailableDataSourcesChanged { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public Func<IReadOnlyList<ConfigurationSelectData<string>>> AvailableEmbeddingsFunc { get; set; } = () => [];
|
|
||||||
|
|
||||||
#region Overrides of ComponentBase
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
await this.UpdateDataSources();
|
|
||||||
await base.OnInitializedAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private string GetEmbeddingName(IDataSource dataSource)
|
private string GetEmbeddingName(IDataSource dataSource)
|
||||||
{
|
{
|
||||||
if(dataSource is IInternalDataSource internalDataSource)
|
if(dataSource is IInternalDataSource internalDataSource)
|
||||||
@ -56,7 +32,7 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
var localFileDialogParameters = new DialogParameters<DataSourceLocalFileDialog>
|
var localFileDialogParameters = new DialogParameters<DataSourceLocalFileDialog>
|
||||||
{
|
{
|
||||||
{ x => x.IsEditing, false },
|
{ x => x.IsEditing, false },
|
||||||
{ x => x.AvailableEmbeddings, this.AvailableEmbeddingsFunc() }
|
{ x => x.AvailableEmbeddings, this.availableEmbeddingProviders }
|
||||||
};
|
};
|
||||||
|
|
||||||
var localFileDialogReference = await this.DialogService.ShowAsync<DataSourceLocalFileDialog>("Add Local File as Data Source", localFileDialogParameters, DialogOptions.FULLSCREEN);
|
var localFileDialogReference = await this.DialogService.ShowAsync<DataSourceLocalFileDialog>("Add Local File as Data Source", localFileDialogParameters, DialogOptions.FULLSCREEN);
|
||||||
@ -73,7 +49,7 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
var localDirectoryDialogParameters = new DialogParameters<DataSourceLocalDirectoryDialog>
|
var localDirectoryDialogParameters = new DialogParameters<DataSourceLocalDirectoryDialog>
|
||||||
{
|
{
|
||||||
{ x => x.IsEditing, false },
|
{ x => x.IsEditing, false },
|
||||||
{ x => x.AvailableEmbeddings, this.AvailableEmbeddingsFunc() }
|
{ x => x.AvailableEmbeddings, this.availableEmbeddingProviders }
|
||||||
};
|
};
|
||||||
|
|
||||||
var localDirectoryDialogReference = await this.DialogService.ShowAsync<DataSourceLocalDirectoryDialog>("Add Local Directory as Data Source", localDirectoryDialogParameters, DialogOptions.FULLSCREEN);
|
var localDirectoryDialogReference = await this.DialogService.ShowAsync<DataSourceLocalDirectoryDialog>("Add Local Directory as Data Source", localDirectoryDialogParameters, DialogOptions.FULLSCREEN);
|
||||||
@ -107,7 +83,6 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this.SettingsManager.ConfigurationData.DataSources.Add(addedDataSource);
|
this.SettingsManager.ConfigurationData.DataSources.Add(addedDataSource);
|
||||||
await this.UpdateDataSources();
|
|
||||||
await this.SettingsManager.StoreSettings();
|
await this.SettingsManager.StoreSettings();
|
||||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||||
}
|
}
|
||||||
@ -122,7 +97,7 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
{
|
{
|
||||||
{ x => x.IsEditing, true },
|
{ x => x.IsEditing, true },
|
||||||
{ x => x.DataSource, localFile },
|
{ x => x.DataSource, localFile },
|
||||||
{ x => x.AvailableEmbeddings, this.AvailableEmbeddingsFunc() }
|
{ x => x.AvailableEmbeddings, this.availableEmbeddingProviders }
|
||||||
};
|
};
|
||||||
|
|
||||||
var localFileDialogReference = await this.DialogService.ShowAsync<DataSourceLocalFileDialog>("Edit Local File Data Source", localFileDialogParameters, DialogOptions.FULLSCREEN);
|
var localFileDialogReference = await this.DialogService.ShowAsync<DataSourceLocalFileDialog>("Edit Local File Data Source", localFileDialogParameters, DialogOptions.FULLSCREEN);
|
||||||
@ -138,7 +113,7 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
{
|
{
|
||||||
{ x => x.IsEditing, true },
|
{ x => x.IsEditing, true },
|
||||||
{ x => x.DataSource, localDirectory },
|
{ x => x.DataSource, localDirectory },
|
||||||
{ x => x.AvailableEmbeddings, this.AvailableEmbeddingsFunc() }
|
{ x => x.AvailableEmbeddings, this.availableEmbeddingProviders }
|
||||||
};
|
};
|
||||||
|
|
||||||
var localDirectoryDialogReference = await this.DialogService.ShowAsync<DataSourceLocalDirectoryDialog>("Edit Local Directory Data Source", localDirectoryDialogParameters, DialogOptions.FULLSCREEN);
|
var localDirectoryDialogReference = await this.DialogService.ShowAsync<DataSourceLocalDirectoryDialog>("Edit Local Directory Data Source", localDirectoryDialogParameters, DialogOptions.FULLSCREEN);
|
||||||
@ -170,7 +145,6 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
|
|
||||||
this.SettingsManager.ConfigurationData.DataSources[this.SettingsManager.ConfigurationData.DataSources.IndexOf(dataSource)] = editedDataSource;
|
this.SettingsManager.ConfigurationData.DataSources[this.SettingsManager.ConfigurationData.DataSources.IndexOf(dataSource)] = editedDataSource;
|
||||||
|
|
||||||
await this.UpdateDataSources();
|
|
||||||
await this.SettingsManager.StoreSettings();
|
await this.SettingsManager.StoreSettings();
|
||||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||||
}
|
}
|
||||||
@ -210,7 +184,6 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
{
|
{
|
||||||
this.SettingsManager.ConfigurationData.DataSources.Remove(dataSource);
|
this.SettingsManager.ConfigurationData.DataSources.Remove(dataSource);
|
||||||
await this.SettingsManager.StoreSettings();
|
await this.SettingsManager.StoreSettings();
|
||||||
await this.UpdateDataSources();
|
|
||||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -247,13 +220,4 @@ public partial class SettingsPanelDataSources : SettingsPanelBase
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task UpdateDataSources()
|
|
||||||
{
|
|
||||||
this.AvailableDataSources.Clear();
|
|
||||||
foreach (var dataSource in this.SettingsManager.ConfigurationData.DataSources)
|
|
||||||
this.AvailableDataSources.Add(new (dataSource.Name, dataSource.Id));
|
|
||||||
|
|
||||||
await this.AvailableDataSourcesChanged.InvokeAsync(this.AvailableDataSources);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -12,8 +12,8 @@
|
|||||||
@if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager))
|
@if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager))
|
||||||
{
|
{
|
||||||
<SettingsPanelEmbeddings AvailableLLMProvidersFunc="() => this.availableLLMProviders" @bind-AvailableEmbeddingProviders="@this.availableEmbeddingProviders"/>
|
<SettingsPanelEmbeddings AvailableLLMProvidersFunc="() => this.availableLLMProviders" @bind-AvailableEmbeddingProviders="@this.availableEmbeddingProviders"/>
|
||||||
<SettingsPanelDataSources AvailableLLMProvidersFunc="() => this.availableLLMProviders" AvailableEmbeddingsFunc="() => this.availableEmbeddingProviders" @bind-AvailableDataSources="@this.availableDataSources"/>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
<SettingsPanelProfiles AvailableLLMProvidersFunc="() => this.availableLLMProviders"/>
|
<SettingsPanelProfiles AvailableLLMProvidersFunc="() => this.availableLLMProviders"/>
|
||||||
<SettingsPanelApp AvailableLLMProvidersFunc="() => this.availableLLMProviders"/>
|
<SettingsPanelApp AvailableLLMProvidersFunc="() => this.availableLLMProviders"/>
|
||||||
<SettingsPanelChat AvailableLLMProvidersFunc="() => this.availableLLMProviders"/>
|
<SettingsPanelChat AvailableLLMProvidersFunc="() => this.availableLLMProviders"/>
|
||||||
|
@ -14,7 +14,6 @@ public partial class Settings : ComponentBase, IMessageBusReceiver, IDisposable
|
|||||||
|
|
||||||
private List<ConfigurationSelectData<string>> availableLLMProviders = new();
|
private List<ConfigurationSelectData<string>> availableLLMProviders = new();
|
||||||
private List<ConfigurationSelectData<string>> availableEmbeddingProviders = new();
|
private List<ConfigurationSelectData<string>> availableEmbeddingProviders = new();
|
||||||
private List<ConfigurationSelectData<string>> availableDataSources = new();
|
|
||||||
|
|
||||||
#region Overrides of ComponentBase
|
#region Overrides of ComponentBase
|
||||||
|
|
||||||
|
2
app/MindWork AI Studio/wwwroot/changelog/v0.9.37.md
Normal file
2
app/MindWork AI Studio/wwwroot/changelog/v0.9.37.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# v0.9.37, build 212 (2025-03-16 xx:xx UTC)
|
||||||
|
- Moved the data source settings into the data selection component.
|
Loading…
Reference in New Issue
Block a user