mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-04-28 19:19:47 +00:00
Refactored profile settings
This commit is contained in:
parent
f4577519c8
commit
64e32cd1fa
@ -0,0 +1,50 @@
|
|||||||
|
@inherits SettingsPanelBase
|
||||||
|
|
||||||
|
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Person4" HeaderText="Configure Profiles">
|
||||||
|
<MudText Typo="Typo.h4" Class="mb-3">Your Profiles</MudText>
|
||||||
|
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
||||||
|
Store personal data about yourself in various profiles so that the AIs know your personal context.
|
||||||
|
This saves you from having to explain your context each time, for example, in every chat. When you
|
||||||
|
have different roles, you can create a profile for each role.
|
||||||
|
</MudJustifiedText>
|
||||||
|
|
||||||
|
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
||||||
|
Are you a project manager in a research facility? You might want to create a profile for your project
|
||||||
|
management activities, one for your scientific work, and a profile for when you need to write program
|
||||||
|
code. In these profiles, you can record how much experience you have or which methods you like or
|
||||||
|
dislike using. Later, you can choose when and where you want to use each profile.
|
||||||
|
</MudJustifiedText>
|
||||||
|
<MudTable Items="@this.SettingsManager.ConfigurationData.Profiles" Hover="@true" Class="border-dashed border rounded-lg">
|
||||||
|
<ColGroup>
|
||||||
|
<col style="width: 3em;"/>
|
||||||
|
<col/>
|
||||||
|
<col style="width: 40em;"/>
|
||||||
|
</ColGroup>
|
||||||
|
<HeaderContent>
|
||||||
|
<MudTh>#</MudTh>
|
||||||
|
<MudTh>Profile Name</MudTh>
|
||||||
|
<MudTh Style="text-align: left;">Actions</MudTh>
|
||||||
|
</HeaderContent>
|
||||||
|
<RowTemplate>
|
||||||
|
<MudTd>@context.Num</MudTd>
|
||||||
|
<MudTd>@context.Name</MudTd>
|
||||||
|
<MudTd Style="text-align: left;">
|
||||||
|
<MudButton Variant="Variant.Filled" Color="Color.Info" StartIcon="@Icons.Material.Filled.Edit" Class="ma-2" OnClick="() => this.EditProfile(context)">
|
||||||
|
Edit
|
||||||
|
</MudButton>
|
||||||
|
<MudButton Variant="Variant.Filled" Color="Color.Error" StartIcon="@Icons.Material.Filled.Delete" Class="ma-2" OnClick="() => this.DeleteProfile(context)">
|
||||||
|
Delete
|
||||||
|
</MudButton>
|
||||||
|
</MudTd>
|
||||||
|
</RowTemplate>
|
||||||
|
</MudTable>
|
||||||
|
|
||||||
|
@if(this.SettingsManager.ConfigurationData.Profiles.Count == 0)
|
||||||
|
{
|
||||||
|
<MudText Typo="Typo.h6" Class="mt-3">No profiles configured yet.</MudText>
|
||||||
|
}
|
||||||
|
|
||||||
|
<MudButton Variant="Variant.Filled" Color="@Color.Primary" StartIcon="@Icons.Material.Filled.AddRoad" Class="mt-3 mb-6" OnClick="@this.AddProfile">
|
||||||
|
Add Profile
|
||||||
|
</MudButton>
|
||||||
|
</ExpansionPanel>
|
@ -0,0 +1,72 @@
|
|||||||
|
using AIStudio.Dialogs;
|
||||||
|
using AIStudio.Settings;
|
||||||
|
|
||||||
|
using DialogOptions = AIStudio.Dialogs.DialogOptions;
|
||||||
|
|
||||||
|
namespace AIStudio.Components.Settings;
|
||||||
|
|
||||||
|
public partial class SettingsPanelProfiles : SettingsPanelBase
|
||||||
|
{
|
||||||
|
private async Task AddProfile()
|
||||||
|
{
|
||||||
|
var dialogParameters = new DialogParameters<ProfileDialog>
|
||||||
|
{
|
||||||
|
{ x => x.IsEditing, false },
|
||||||
|
};
|
||||||
|
|
||||||
|
var dialogReference = await this.DialogService.ShowAsync<ProfileDialog>("Add Profile", dialogParameters, DialogOptions.FULLSCREEN);
|
||||||
|
var dialogResult = await dialogReference.Result;
|
||||||
|
if (dialogResult is null || dialogResult.Canceled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var addedProfile = (Profile)dialogResult.Data!;
|
||||||
|
addedProfile = addedProfile with { Num = this.SettingsManager.ConfigurationData.NextProfileNum++ };
|
||||||
|
|
||||||
|
this.SettingsManager.ConfigurationData.Profiles.Add(addedProfile);
|
||||||
|
|
||||||
|
await this.SettingsManager.StoreSettings();
|
||||||
|
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task EditProfile(Profile profile)
|
||||||
|
{
|
||||||
|
var dialogParameters = new DialogParameters<ProfileDialog>
|
||||||
|
{
|
||||||
|
{ x => x.DataNum, profile.Num },
|
||||||
|
{ x => x.DataId, profile.Id },
|
||||||
|
{ x => x.DataName, profile.Name },
|
||||||
|
{ x => x.DataNeedToKnow, profile.NeedToKnow },
|
||||||
|
{ x => x.DataActions, profile.Actions },
|
||||||
|
{ x => x.IsEditing, true },
|
||||||
|
};
|
||||||
|
|
||||||
|
var dialogReference = await this.DialogService.ShowAsync<ProfileDialog>("Edit Profile", dialogParameters, DialogOptions.FULLSCREEN);
|
||||||
|
var dialogResult = await dialogReference.Result;
|
||||||
|
if (dialogResult is null || dialogResult.Canceled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var editedProfile = (Profile)dialogResult.Data!;
|
||||||
|
this.SettingsManager.ConfigurationData.Profiles[this.SettingsManager.ConfigurationData.Profiles.IndexOf(profile)] = editedProfile;
|
||||||
|
|
||||||
|
await this.SettingsManager.StoreSettings();
|
||||||
|
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task DeleteProfile(Profile profile)
|
||||||
|
{
|
||||||
|
var dialogParameters = new DialogParameters
|
||||||
|
{
|
||||||
|
{ "Message", $"Are you sure you want to delete the profile '{profile.Name}'?" },
|
||||||
|
};
|
||||||
|
|
||||||
|
var dialogReference = await this.DialogService.ShowAsync<ConfirmDialog>("Delete Profile", dialogParameters, DialogOptions.FULLSCREEN);
|
||||||
|
var dialogResult = await dialogReference.Result;
|
||||||
|
if (dialogResult is null || dialogResult.Canceled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.SettingsManager.ConfigurationData.Profiles.Remove(profile);
|
||||||
|
await this.SettingsManager.StoreSettings();
|
||||||
|
|
||||||
|
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
||||||
|
}
|
||||||
|
}
|
@ -197,55 +197,7 @@
|
|||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
}
|
}
|
||||||
|
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Person4" HeaderText="Configure Profiles">
|
<SettingsPanelProfiles AvailableLLMProvidersFunc="() => this.availableLLMProviders" />
|
||||||
<MudText Typo="Typo.h4" Class="mb-3">Your Profiles</MudText>
|
|
||||||
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
|
||||||
Store personal data about yourself in various profiles so that the AIs know your personal context.
|
|
||||||
This saves you from having to explain your context each time, for example, in every chat. When you
|
|
||||||
have different roles, you can create a profile for each role.
|
|
||||||
</MudJustifiedText>
|
|
||||||
|
|
||||||
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
|
||||||
Are you a project manager in a research facility? You might want to create a profile for your project
|
|
||||||
management activities, one for your scientific work, and a profile for when you need to write program
|
|
||||||
code. In these profiles, you can record how much experience you have or which methods you like or
|
|
||||||
dislike using. Later, you can choose when and where you want to use each profile.
|
|
||||||
</MudJustifiedText>
|
|
||||||
<MudTable Items="@this.SettingsManager.ConfigurationData.Profiles" Hover="@true" Class="border-dashed border rounded-lg">
|
|
||||||
<ColGroup>
|
|
||||||
<col style="width: 3em;"/>
|
|
||||||
<col/>
|
|
||||||
<col style="width: 40em;"/>
|
|
||||||
</ColGroup>
|
|
||||||
<HeaderContent>
|
|
||||||
<MudTh>#</MudTh>
|
|
||||||
<MudTh>Profile Name</MudTh>
|
|
||||||
<MudTh Style="text-align: left;">Actions</MudTh>
|
|
||||||
</HeaderContent>
|
|
||||||
<RowTemplate>
|
|
||||||
<MudTd>@context.Num</MudTd>
|
|
||||||
<MudTd>@context.Name</MudTd>
|
|
||||||
<MudTd Style="text-align: left;">
|
|
||||||
<MudButton Variant="Variant.Filled" Color="Color.Info" StartIcon="@Icons.Material.Filled.Edit" Class="ma-2" OnClick="() => this.EditProfile(context)">
|
|
||||||
Edit
|
|
||||||
</MudButton>
|
|
||||||
<MudButton Variant="Variant.Filled" Color="Color.Error" StartIcon="@Icons.Material.Filled.Delete" Class="ma-2" OnClick="() => this.DeleteProfile(context)">
|
|
||||||
Delete
|
|
||||||
</MudButton>
|
|
||||||
</MudTd>
|
|
||||||
</RowTemplate>
|
|
||||||
</MudTable>
|
|
||||||
|
|
||||||
@if(this.SettingsManager.ConfigurationData.Profiles.Count == 0)
|
|
||||||
{
|
|
||||||
<MudText Typo="Typo.h6" Class="mt-3">No profiles configured yet.</MudText>
|
|
||||||
}
|
|
||||||
|
|
||||||
<MudButton Variant="Variant.Filled" Color="@Color.Primary" StartIcon="@Icons.Material.Filled.AddRoad" Class="mt-3 mb-6" OnClick="@this.AddProfile">
|
|
||||||
Add Profile
|
|
||||||
</MudButton>
|
|
||||||
</ExpansionPanel>
|
|
||||||
|
|
||||||
<SettingsPanelApp AvailableLLMProvidersFunc="() => this.availableLLMProviders" />
|
<SettingsPanelApp AvailableLLMProvidersFunc="() => this.availableLLMProviders" />
|
||||||
<SettingsPanelChat AvailableLLMProvidersFunc="() => this.availableLLMProviders" />
|
<SettingsPanelChat AvailableLLMProvidersFunc="() => this.availableLLMProviders" />
|
||||||
<SettingsPanelWorkspaces AvailableLLMProvidersFunc="() => this.availableLLMProviders" />
|
<SettingsPanelWorkspaces AvailableLLMProvidersFunc="() => this.availableLLMProviders" />
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
using AIStudio.Dialogs;
|
using AIStudio.Dialogs;
|
||||||
using AIStudio.Provider;
|
using AIStudio.Provider;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
using AIStudio.Settings.DataModel;
|
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
@ -259,73 +258,6 @@ public partial class Settings : ComponentBase, IMessageBusReceiver, IDisposable
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Profile related
|
|
||||||
|
|
||||||
private async Task AddProfile()
|
|
||||||
{
|
|
||||||
var dialogParameters = new DialogParameters<ProfileDialog>
|
|
||||||
{
|
|
||||||
{ x => x.IsEditing, false },
|
|
||||||
};
|
|
||||||
|
|
||||||
var dialogReference = await this.DialogService.ShowAsync<ProfileDialog>("Add Profile", dialogParameters, DialogOptions.FULLSCREEN);
|
|
||||||
var dialogResult = await dialogReference.Result;
|
|
||||||
if (dialogResult is null || dialogResult.Canceled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var addedProfile = (Profile)dialogResult.Data!;
|
|
||||||
addedProfile = addedProfile with { Num = this.SettingsManager.ConfigurationData.NextProfileNum++ };
|
|
||||||
|
|
||||||
this.SettingsManager.ConfigurationData.Profiles.Add(addedProfile);
|
|
||||||
|
|
||||||
await this.SettingsManager.StoreSettings();
|
|
||||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task EditProfile(Profile profile)
|
|
||||||
{
|
|
||||||
var dialogParameters = new DialogParameters<ProfileDialog>
|
|
||||||
{
|
|
||||||
{ x => x.DataNum, profile.Num },
|
|
||||||
{ x => x.DataId, profile.Id },
|
|
||||||
{ x => x.DataName, profile.Name },
|
|
||||||
{ x => x.DataNeedToKnow, profile.NeedToKnow },
|
|
||||||
{ x => x.DataActions, profile.Actions },
|
|
||||||
{ x => x.IsEditing, true },
|
|
||||||
};
|
|
||||||
|
|
||||||
var dialogReference = await this.DialogService.ShowAsync<ProfileDialog>("Edit Profile", dialogParameters, DialogOptions.FULLSCREEN);
|
|
||||||
var dialogResult = await dialogReference.Result;
|
|
||||||
if (dialogResult is null || dialogResult.Canceled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var editedProfile = (Profile)dialogResult.Data!;
|
|
||||||
this.SettingsManager.ConfigurationData.Profiles[this.SettingsManager.ConfigurationData.Profiles.IndexOf(profile)] = editedProfile;
|
|
||||||
|
|
||||||
await this.SettingsManager.StoreSettings();
|
|
||||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task DeleteProfile(Profile profile)
|
|
||||||
{
|
|
||||||
var dialogParameters = new DialogParameters
|
|
||||||
{
|
|
||||||
{ "Message", $"Are you sure you want to delete the profile '{profile.Name}'?" },
|
|
||||||
};
|
|
||||||
|
|
||||||
var dialogReference = await this.DialogService.ShowAsync<ConfirmDialog>("Delete Profile", dialogParameters, DialogOptions.FULLSCREEN);
|
|
||||||
var dialogResult = await dialogReference.Result;
|
|
||||||
if (dialogResult is null || dialogResult.Canceled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.SettingsManager.ConfigurationData.Profiles.Remove(profile);
|
|
||||||
await this.SettingsManager.StoreSettings();
|
|
||||||
|
|
||||||
await this.MessageBus.SendMessage<bool>(this, Event.CONFIGURATION_CHANGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Implementation of IMessageBusReceiver
|
#region Implementation of IMessageBusReceiver
|
||||||
|
|
||||||
public Task ProcessMessage<TMsg>(ComponentBase? sendingComponent, Event triggeredEvent, TMsg? data)
|
public Task ProcessMessage<TMsg>(ComponentBase? sendingComponent, Event triggeredEvent, TMsg? data)
|
||||||
|
Loading…
Reference in New Issue
Block a user