diff --git a/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor b/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor new file mode 100644 index 00000000..2fe167a9 --- /dev/null +++ b/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor @@ -0,0 +1,5 @@ +@attribute [Route(Routes.ASSISTANT_AI_STUDIO_I18N)] +@inherits AssistantBaseCore + + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor.cs b/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor.cs new file mode 100644 index 00000000..460a978a --- /dev/null +++ b/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor.cs @@ -0,0 +1,72 @@ +using AIStudio.Dialogs.Settings; + +namespace AIStudio.Assistants.I18N; + +public partial class AssistantI18N : AssistantBaseCore +{ + 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 FooterButtons => []; + + protected override string SubmitText => "Localize AI Studio"; + + protected override Func 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() + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogI18N.razor b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogI18N.razor new file mode 100644 index 00000000..b1de7e2f --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogI18N.razor @@ -0,0 +1,27 @@ +@using AIStudio.Settings +@inherits SettingsDialogBase + + + + + + @T("Assistant: Localization") + + + + + + + @if (this.SettingsManager.ConfigurationData.I18N.PreselectedTargetLanguage is CommonLanguages.OTHER) + { + + } + + + + + + @T("Close") + + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogI18N.razor.cs b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogI18N.razor.cs new file mode 100644 index 00000000..afa917d8 --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogI18N.razor.cs @@ -0,0 +1,7 @@ +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Dialogs.Settings; + +public partial class SettingsDialogI18N : SettingsDialogBase +{ +} \ No newline at end of file diff --git a/app/MindWork AI Studio/MindWork AI Studio.csproj b/app/MindWork AI Studio/MindWork AI Studio.csproj index 2480a8fe..267f377e 100644 --- a/app/MindWork AI Studio/MindWork AI Studio.csproj +++ b/app/MindWork AI Studio/MindWork AI Studio.csproj @@ -61,10 +61,6 @@ - - - - diff --git a/app/MindWork AI Studio/Pages/Assistants.razor b/app/MindWork AI Studio/Pages/Assistants.razor index 2acaa4ca..6827cb71 100644 --- a/app/MindWork AI Studio/Pages/Assistants.razor +++ b/app/MindWork AI Studio/Pages/Assistants.razor @@ -50,6 +50,13 @@ } + + + AI Studio Development + + + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Routes.razor.cs b/app/MindWork AI Studio/Routes.razor.cs index b6318820..d59bffac 100644 --- a/app/MindWork AI Studio/Routes.razor.cs +++ b/app/MindWork AI Studio/Routes.razor.cs @@ -26,5 +26,6 @@ public sealed partial class Routes public const string ASSISTANT_JOB_POSTING = "/assistant/job-posting"; public const string ASSISTANT_BIAS = "/assistant/bias-of-the-day"; public const string ASSISTANT_ERI = "/assistant/eri"; + public const string ASSISTANT_AI_STUDIO_I18N = "/assistant/ai-studio/i18n"; // ReSharper restore InconsistentNaming } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/Data.cs b/app/MindWork AI Studio/Settings/DataModel/Data.cs index b47eba49..439427bc 100644 --- a/app/MindWork AI Studio/Settings/DataModel/Data.cs +++ b/app/MindWork AI Studio/Settings/DataModel/Data.cs @@ -100,4 +100,6 @@ public sealed class Data public DataJobPostings JobPostings { get; init; } = new(); public DataBiasOfTheDay BiasOfTheDay { get; init; } = new(); + + public DataI18N I18N { get; init; } = new(); } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/DataI18N.cs b/app/MindWork AI Studio/Settings/DataModel/DataI18N.cs new file mode 100644 index 00000000..fae02c2e --- /dev/null +++ b/app/MindWork AI Studio/Settings/DataModel/DataI18N.cs @@ -0,0 +1,24 @@ +namespace AIStudio.Settings.DataModel; + +public class DataI18N +{ + /// + /// Preselect any I18N options? + /// + public bool PreselectOptions { get; set; } + + /// + /// Preselect the target language? + /// + public CommonLanguages PreselectedTargetLanguage { get; set; } = CommonLanguages.EN_GB; + + /// + /// Preselect any other language? + /// + public string PreselectOtherLanguage { get; set; } = string.Empty; + + /// + /// Which LLM provider should be preselected? + /// + public string PreselectedProvider { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Components.cs b/app/MindWork AI Studio/Tools/Components.cs index d65a5c5d..62eb2bf9 100644 --- a/app/MindWork AI Studio/Tools/Components.cs +++ b/app/MindWork AI Studio/Tools/Components.cs @@ -18,6 +18,7 @@ public enum Components JOB_POSTING_ASSISTANT, BIAS_DAY_ASSISTANT, ERI_ASSISTANT, + I18N_ASSISTANT, CHAT, APP_SETTINGS, diff --git a/app/MindWork AI Studio/Tools/ComponentsExtensions.cs b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs index 6112debb..2247b6e6 100644 --- a/app/MindWork AI Studio/Tools/ComponentsExtensions.cs +++ b/app/MindWork AI Studio/Tools/ComponentsExtensions.cs @@ -10,8 +10,11 @@ public static class ComponentsExtensions public static bool AllowSendTo(this Components component) => component switch { Components.NONE => false, + Components.ERI_ASSISTANT => false, Components.BIAS_DAY_ASSISTANT => false, + Components.I18N_ASSISTANT => false, + Components.APP_SETTINGS => false, Components.AGENT_TEXT_CONTENT_CLEANER => false, @@ -36,6 +39,7 @@ public static class ComponentsExtensions Components.MY_TASKS_ASSISTANT => "My Tasks Assistant", Components.JOB_POSTING_ASSISTANT => "Job Posting Assistant", Components.ERI_ASSISTANT => "ERI Server", + Components.I18N_ASSISTANT => "Localization Assistant", 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.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.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,