mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-04-28 08:19:47 +00:00
Add I18N assistant for localization of AI Studio content
This commit is contained in:
parent
3e13d50302
commit
d4cde9956d
@ -0,0 +1,5 @@
|
|||||||
|
@attribute [Route(Routes.ASSISTANT_AI_STUDIO_I18N)]
|
||||||
|
@inherits AssistantBaseCore<AIStudio.Dialogs.Settings.SettingsDialogI18N>
|
||||||
|
|
||||||
|
<EnumSelection T="CommonLanguages" NameFunc="@(language => language.NameSelecting())" @bind-Value="@this.selectedTargetLanguage" ValidateSelection="@this.ValidatingTargetLanguage" Icon="@Icons.Material.Filled.Translate" Label="Target language" AllowOther="@true" OtherValue="CommonLanguages.OTHER" @bind-OtherInput="@this.customTargetLanguage" ValidateOther="@this.ValidateCustomLanguage" LabelOther="Custom target language" />
|
||||||
|
<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
|
@ -0,0 +1,72 @@
|
|||||||
|
using AIStudio.Dialogs.Settings;
|
||||||
|
|
||||||
|
namespace AIStudio.Assistants.I18N;
|
||||||
|
|
||||||
|
public partial class AssistantI18N : AssistantBaseCore<SettingsDialogI18N>
|
||||||
|
{
|
||||||
|
public override Tools.Components Component => Tools.Components.I18N_ASSISTANT;
|
||||||
|
|
||||||
|
protected override string Title => "Localization";
|
||||||
|
|
||||||
|
protected override string Description =>
|
||||||
|
"""
|
||||||
|
Translate MindWork AI Studio text content into another language.
|
||||||
|
""";
|
||||||
|
|
||||||
|
protected override string SystemPrompt =>
|
||||||
|
"""
|
||||||
|
TODO
|
||||||
|
""";
|
||||||
|
|
||||||
|
protected override bool AllowProfiles => false;
|
||||||
|
|
||||||
|
protected override IReadOnlyList<IButtonData> FooterButtons => [];
|
||||||
|
|
||||||
|
protected override string SubmitText => "Localize AI Studio";
|
||||||
|
|
||||||
|
protected override Func<Task> SubmitAction => this.LocalizeText;
|
||||||
|
|
||||||
|
protected override void ResetForm()
|
||||||
|
{
|
||||||
|
if (!this.MightPreselectValues())
|
||||||
|
{
|
||||||
|
this.selectedTargetLanguage = CommonLanguages.AS_IS;
|
||||||
|
this.customTargetLanguage = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool MightPreselectValues()
|
||||||
|
{
|
||||||
|
if (this.SettingsManager.ConfigurationData.I18N.PreselectOptions)
|
||||||
|
{
|
||||||
|
this.selectedTargetLanguage = this.SettingsManager.ConfigurationData.I18N.PreselectedTargetLanguage;
|
||||||
|
this.customTargetLanguage = this.SettingsManager.ConfigurationData.I18N.PreselectOtherLanguage;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CommonLanguages selectedTargetLanguage;
|
||||||
|
private string customTargetLanguage = string.Empty;
|
||||||
|
|
||||||
|
private string? ValidatingTargetLanguage(CommonLanguages language)
|
||||||
|
{
|
||||||
|
if(language == CommonLanguages.AS_IS)
|
||||||
|
return "Please select a target language.";
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string? ValidateCustomLanguage(string language)
|
||||||
|
{
|
||||||
|
if(this.selectedTargetLanguage == CommonLanguages.OTHER && string.IsNullOrWhiteSpace(language))
|
||||||
|
return "Please provide a custom language.";
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task LocalizeText()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
@using AIStudio.Settings
|
||||||
|
@inherits SettingsDialogBase
|
||||||
|
|
||||||
|
<MudDialog>
|
||||||
|
<TitleContent>
|
||||||
|
<MudText Typo="Typo.h6" Class="d-flex align-center">
|
||||||
|
<MudIcon Icon="@Icons.Material.Filled.Edit" Class="mr-2" />
|
||||||
|
@T("Assistant: Localization")
|
||||||
|
</MudText>
|
||||||
|
</TitleContent>
|
||||||
|
<DialogContent>
|
||||||
|
<MudPaper Class="pa-3 mb-8 border-dashed border rounded-lg">
|
||||||
|
<ConfigurationOption OptionDescription="Preselect localization options?" LabelOn="Localization options are preselected" LabelOff="No localization options are preselected" State="@(() => this.SettingsManager.ConfigurationData.I18N.PreselectOptions)" StateUpdate="@(updatedState => this.SettingsManager.ConfigurationData.I18N.PreselectOptions = updatedState)" OptionHelp="When enabled, you can preselect the localization options. This is might be useful when you prefer a specific language or LLM model."/>
|
||||||
|
<ConfigurationSelect OptionDescription="@T("Preselect the target language")" Disabled="@(() => !this.SettingsManager.ConfigurationData.I18N.PreselectOptions)" SelectedValue="@(() => this.SettingsManager.ConfigurationData.I18N.PreselectedTargetLanguage)" Data="@ConfigurationSelectDataFactory.GetCommonLanguagesOptionalData()" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.I18N.PreselectedTargetLanguage = selectedValue)" OptionHelp="@T("Which target language should be preselected?")"/>
|
||||||
|
@if (this.SettingsManager.ConfigurationData.I18N.PreselectedTargetLanguage is CommonLanguages.OTHER)
|
||||||
|
{
|
||||||
|
<ConfigurationText OptionDescription="@T("Preselect another target language")" Disabled="@(() => !this.SettingsManager.ConfigurationData.I18N.PreselectOptions)" Icon="@Icons.Material.Filled.Translate" Text="@(() => this.SettingsManager.ConfigurationData.I18N.PreselectOtherLanguage)" TextUpdate="@(updatedText => this.SettingsManager.ConfigurationData.I18N.PreselectOtherLanguage = updatedText)"/>
|
||||||
|
}
|
||||||
|
<ConfigurationProviderSelection Component="Components.I18N_ASSISTANT" Data="@this.availableLLMProviders" Disabled="@(() => !this.SettingsManager.ConfigurationData.I18N.PreselectOptions)" SelectedValue="@(() => this.SettingsManager.ConfigurationData.I18N.PreselectedProvider)" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.I18N.PreselectedProvider = selectedValue)"/>
|
||||||
|
</MudPaper>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<MudButton OnClick="@this.Close" Variant="Variant.Filled">
|
||||||
|
@T("Close")
|
||||||
|
</MudButton>
|
||||||
|
</DialogActions>
|
||||||
|
</MudDialog>
|
@ -0,0 +1,7 @@
|
|||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
namespace AIStudio.Dialogs.Settings;
|
||||||
|
|
||||||
|
public partial class SettingsDialogI18N : SettingsDialogBase
|
||||||
|
{
|
||||||
|
}
|
@ -61,10 +61,6 @@
|
|||||||
<ProjectReference Include="..\SourceCodeRules\SourceCodeRules\SourceCodeRules.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
|
<ProjectReference Include="..\SourceCodeRules\SourceCodeRules\SourceCodeRules.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="Assistants\I18N\" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<!-- Read the meta data file -->
|
<!-- Read the meta data file -->
|
||||||
<Target Name="ReadMetaData" BeforeTargets="BeforeBuild">
|
<Target Name="ReadMetaData" BeforeTargets="BeforeBuild">
|
||||||
<Error Text="The ../../metadata.txt file was not found!" Condition="!Exists('../../metadata.txt')" />
|
<Error Text="The ../../metadata.txt file was not found!" Condition="!Exists('../../metadata.txt')" />
|
||||||
|
@ -51,5 +51,12 @@
|
|||||||
}
|
}
|
||||||
</MudStack>
|
</MudStack>
|
||||||
|
|
||||||
|
<MudText Typo="Typo.h4" Class="mb-2 mr-3 mt-6">
|
||||||
|
AI Studio Development
|
||||||
|
</MudText>
|
||||||
|
<MudStack Row="@true" Wrap="@Wrap.Wrap" Class="mb-3">
|
||||||
|
<AssistantBlock TSettings="SettingsDialogI18N" Name="@T("Localization")" Description="@T("Translate AI Studio text content into other languages")" Icon="@Icons.Material.Filled.Translate" Link="@Routes.ASSISTANT_AI_STUDIO_I18N"/>
|
||||||
|
</MudStack>
|
||||||
|
|
||||||
</InnerScrolling>
|
</InnerScrolling>
|
||||||
</div>
|
</div>
|
@ -26,5 +26,6 @@ public sealed partial class Routes
|
|||||||
public const string ASSISTANT_JOB_POSTING = "/assistant/job-posting";
|
public const string ASSISTANT_JOB_POSTING = "/assistant/job-posting";
|
||||||
public const string ASSISTANT_BIAS = "/assistant/bias-of-the-day";
|
public const string ASSISTANT_BIAS = "/assistant/bias-of-the-day";
|
||||||
public const string ASSISTANT_ERI = "/assistant/eri";
|
public const string ASSISTANT_ERI = "/assistant/eri";
|
||||||
|
public const string ASSISTANT_AI_STUDIO_I18N = "/assistant/ai-studio/i18n";
|
||||||
// ReSharper restore InconsistentNaming
|
// ReSharper restore InconsistentNaming
|
||||||
}
|
}
|
@ -100,4 +100,6 @@ public sealed class Data
|
|||||||
public DataJobPostings JobPostings { get; init; } = new();
|
public DataJobPostings JobPostings { get; init; } = new();
|
||||||
|
|
||||||
public DataBiasOfTheDay BiasOfTheDay { get; init; } = new();
|
public DataBiasOfTheDay BiasOfTheDay { get; init; } = new();
|
||||||
|
|
||||||
|
public DataI18N I18N { get; init; } = new();
|
||||||
}
|
}
|
24
app/MindWork AI Studio/Settings/DataModel/DataI18N.cs
Normal file
24
app/MindWork AI Studio/Settings/DataModel/DataI18N.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
namespace AIStudio.Settings.DataModel;
|
||||||
|
|
||||||
|
public class DataI18N
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Preselect any I18N options?
|
||||||
|
/// </summary>
|
||||||
|
public bool PreselectOptions { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Preselect the target language?
|
||||||
|
/// </summary>
|
||||||
|
public CommonLanguages PreselectedTargetLanguage { get; set; } = CommonLanguages.EN_GB;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Preselect any other language?
|
||||||
|
/// </summary>
|
||||||
|
public string PreselectOtherLanguage { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Which LLM provider should be preselected?
|
||||||
|
/// </summary>
|
||||||
|
public string PreselectedProvider { get; set; } = string.Empty;
|
||||||
|
}
|
@ -18,6 +18,7 @@ public enum Components
|
|||||||
JOB_POSTING_ASSISTANT,
|
JOB_POSTING_ASSISTANT,
|
||||||
BIAS_DAY_ASSISTANT,
|
BIAS_DAY_ASSISTANT,
|
||||||
ERI_ASSISTANT,
|
ERI_ASSISTANT,
|
||||||
|
I18N_ASSISTANT,
|
||||||
|
|
||||||
CHAT,
|
CHAT,
|
||||||
APP_SETTINGS,
|
APP_SETTINGS,
|
||||||
|
@ -10,8 +10,11 @@ public static class ComponentsExtensions
|
|||||||
public static bool AllowSendTo(this Components component) => component switch
|
public static bool AllowSendTo(this Components component) => component switch
|
||||||
{
|
{
|
||||||
Components.NONE => false,
|
Components.NONE => false,
|
||||||
|
|
||||||
Components.ERI_ASSISTANT => false,
|
Components.ERI_ASSISTANT => false,
|
||||||
Components.BIAS_DAY_ASSISTANT => false,
|
Components.BIAS_DAY_ASSISTANT => false,
|
||||||
|
Components.I18N_ASSISTANT => false,
|
||||||
|
|
||||||
Components.APP_SETTINGS => false,
|
Components.APP_SETTINGS => false,
|
||||||
|
|
||||||
Components.AGENT_TEXT_CONTENT_CLEANER => false,
|
Components.AGENT_TEXT_CONTENT_CLEANER => false,
|
||||||
@ -36,6 +39,7 @@ public static class ComponentsExtensions
|
|||||||
Components.MY_TASKS_ASSISTANT => "My Tasks Assistant",
|
Components.MY_TASKS_ASSISTANT => "My Tasks Assistant",
|
||||||
Components.JOB_POSTING_ASSISTANT => "Job Posting Assistant",
|
Components.JOB_POSTING_ASSISTANT => "Job Posting Assistant",
|
||||||
Components.ERI_ASSISTANT => "ERI Server",
|
Components.ERI_ASSISTANT => "ERI Server",
|
||||||
|
Components.I18N_ASSISTANT => "Localization Assistant",
|
||||||
|
|
||||||
Components.CHAT => "New Chat",
|
Components.CHAT => "New Chat",
|
||||||
|
|
||||||
@ -99,6 +103,7 @@ public static class ComponentsExtensions
|
|||||||
Components.JOB_POSTING_ASSISTANT => settingsManager.ConfigurationData.JobPostings.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.JobPostings.PreselectedProvider) : default,
|
Components.JOB_POSTING_ASSISTANT => settingsManager.ConfigurationData.JobPostings.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.JobPostings.PreselectedProvider) : default,
|
||||||
Components.BIAS_DAY_ASSISTANT => settingsManager.ConfigurationData.BiasOfTheDay.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.BiasOfTheDay.PreselectedProvider) : default,
|
Components.BIAS_DAY_ASSISTANT => settingsManager.ConfigurationData.BiasOfTheDay.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.BiasOfTheDay.PreselectedProvider) : default,
|
||||||
Components.ERI_ASSISTANT => settingsManager.ConfigurationData.ERI.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.ERI.PreselectedProvider) : default,
|
Components.ERI_ASSISTANT => settingsManager.ConfigurationData.ERI.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.ERI.PreselectedProvider) : default,
|
||||||
|
Components.I18N_ASSISTANT => settingsManager.ConfigurationData.I18N.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.I18N.PreselectedProvider) : default,
|
||||||
|
|
||||||
Components.CHAT => settingsManager.ConfigurationData.Chat.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Chat.PreselectedProvider) : default,
|
Components.CHAT => settingsManager.ConfigurationData.Chat.PreselectOptions ? settingsManager.ConfigurationData.Providers.FirstOrDefault(x => x.Id == settingsManager.ConfigurationData.Chat.PreselectedProvider) : default,
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user