using AIStudio.Assistants.Agenda; using AIStudio.Assistants.Coding; using AIStudio.Assistants.IconFinder; using AIStudio.Assistants.RewriteImprove; using AIStudio.Assistants.TextSummarizer; using AIStudio.Assistants.EMail; using AIStudio.Provider; using AIStudio.Settings.DataModel; using AIStudio.Tools.PluginSystem; using WritingStylesRewrite = AIStudio.Assistants.RewriteImprove.WritingStyles; using WritingStylesEMail = AIStudio.Assistants.EMail.WritingStyles; namespace AIStudio.Settings; /// /// A data structure to map a name to a value. /// /// The name of the value, to be displayed in the UI. /// The value to be stored. /// The type of the value to store. public readonly record struct ConfigurationSelectData(string Name, T Value); /// /// A static factory class to get the lists of selectable values. /// public static class ConfigurationSelectDataFactory { private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ConfigurationSelectDataFactory).Namespace, nameof(ConfigurationSelectDataFactory)); public static IEnumerable> GetLangBehaviorData() { foreach (var behavior in Enum.GetValues()) yield return new(behavior.Name(), behavior); } public static IEnumerable> GetLanguagesData() { foreach (var runningPlugin in PluginFactory.RunningPlugins) { if(runningPlugin is ILanguagePlugin languagePlugin) yield return new(languagePlugin.LangName, runningPlugin.Id); } } public static IEnumerable> GetLoadingChatProviderBehavior() { yield return new(TB("When possible, use the LLM provider which was used for each chat in the first place"), LoadingChatProviderBehavior.USE_CHAT_PROVIDER_IF_AVAILABLE); yield return new(TB("Use the latest LLM provider, which was used before; use the default chat provider initially"), LoadingChatProviderBehavior.ALWAYS_USE_LATEST_CHAT_PROVIDER); yield return new(TB("Always use the default chat provider when loading chats"), LoadingChatProviderBehavior.ALWAYS_USE_DEFAULT_CHAT_PROVIDER); } public static IEnumerable> GetAddChatProviderBehavior() { yield return new(TB("Use the latest LLM provider, which was used before; use the default chat provider initially"), AddChatProviderBehavior.ADDED_CHATS_USE_LATEST_PROVIDER); yield return new(TB("Always use the default chat provider for new chats"), AddChatProviderBehavior.ADDED_CHATS_USE_DEFAULT_PROVIDER); } public static IEnumerable> GetSendBehaviorData() { yield return new(TB("No key is sending the input"), SendBehavior.NO_KEY_IS_SENDING); yield return new(TB("Modifier key + enter is sending the input"), SendBehavior.MODIFER_ENTER_IS_SENDING); yield return new(TB("Enter is sending the input"), SendBehavior.ENTER_IS_SENDING); } public static IEnumerable> GetUpdateBehaviorData() { yield return new(TB("No automatic update checks"), UpdateBehavior.NO_CHECK); yield return new(TB("Once at startup"), UpdateBehavior.ONCE_STARTUP); yield return new(TB("Check every hour"), UpdateBehavior.HOURLY); yield return new(TB("Check every day"), UpdateBehavior.DAILY); yield return new (TB("Check every week"), UpdateBehavior.WEEKLY); } public static IEnumerable> GetWorkspaceStorageBehaviorData() { yield return new(TB("Disable workspaces"), WorkspaceStorageBehavior.DISABLE_WORKSPACES); yield return new(TB("Store chats automatically"), WorkspaceStorageBehavior.STORE_CHATS_AUTOMATICALLY); yield return new(TB("Store chats manually"), WorkspaceStorageBehavior.STORE_CHATS_MANUALLY); } public static IEnumerable> GetWorkspaceStorageTemporaryMaintenancePolicyData() { yield return new(TB("No automatic maintenance for disappearing chats; old chats will never be deleted"), WorkspaceStorageTemporaryMaintenancePolicy.NO_AUTOMATIC_MAINTENANCE); yield return new(TB("Delete disappearing chats older than 7 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_7_DAYS); yield return new(TB("Delete disappearing chats older than 30 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_30_DAYS); yield return new(TB("Delete disappearing chats older than 90 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_90_DAYS); yield return new(TB("Delete disappearing chats older than 180 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_180_DAYS); yield return new(TB("Delete disappearing chats older than 1 year"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_365_DAYS); } public static IEnumerable> GetWorkspaceDisplayBehaviorData() { yield return new(TB("Toggle the overlay: the chat uses all the space, workspaces are temporarily shown"), WorkspaceDisplayBehavior.TOGGLE_OVERLAY); yield return new(TB("Toggle the sidebar: show the workspaces next to the chat when desired"), WorkspaceDisplayBehavior.TOGGLE_SIDEBAR); yield return new(TB("Sidebar is always visible: show the workspaces next to the chat all the time"), WorkspaceDisplayBehavior.SIDEBAR_ALWAYS_VISIBLE); } public static IEnumerable> GetPreviewVisibility() { yield return new(TB("All preview features are hidden"), PreviewVisibility.NONE); yield return new(TB("Also show features ready for release; these should be stable"), PreviewVisibility.RELEASE_CANDIDATE); yield return new(TB("Also show features in beta: these are almost ready for release; expect some bugs"), PreviewVisibility.BETA); yield return new(TB("Also show features in alpha: these are in development; expect bugs and missing features"), PreviewVisibility.ALPHA); yield return new(TB("Show also prototype features: these are works in progress; expect bugs and missing features"), PreviewVisibility.PROTOTYPE); yield return new(TB("Show also experimental features: these are experimental; expect bugs, missing features, many changes"), PreviewVisibility.EXPERIMENTAL); } public static IEnumerable> GetPreviewFeaturesData(SettingsManager settingsManager) { foreach (var source in settingsManager.ConfigurationData.App.PreviewVisibility.GetPreviewFeatures().Where(x => !x.IsReleased())) yield return new(source.GetPreviewDescription(), source); } public static IEnumerable> GetSendToChatDataSourceBehaviorData() { foreach (var behavior in Enum.GetValues()) yield return new(behavior.Description(), behavior); } public static IEnumerable> GetNavBehaviorData() { yield return new(TB("Navigation expands on mouse hover"), NavBehavior.EXPAND_ON_HOVER); yield return new(TB("Navigation never expands, but there are tooltips"), NavBehavior.NEVER_EXPAND_USE_TOOLTIPS); yield return new(TB("Navigation never expands, no tooltips"), NavBehavior.NEVER_EXPAND_NO_TOOLTIPS); yield return new(TB("Always expand navigation"), NavBehavior.ALWAYS_EXPAND); } public static IEnumerable> GetIconSourcesData() { foreach (var source in Enum.GetValues()) yield return new(source.Name(), source); } public static IEnumerable> GetCommonLanguagesData() { foreach (var language in Enum.GetValues()) yield return new(language.Name(), language); } public static IEnumerable> GetCommonLanguagesTranslationData() { foreach (var language in Enum.GetValues()) if(language is CommonLanguages.AS_IS) yield return new(TB("Not yet specified"), language); else yield return new(language.Name(), language); } public static IEnumerable> GetCommonLanguagesOptionalData() { foreach (var language in Enum.GetValues()) if(language is CommonLanguages.AS_IS) yield return new(TB("Do not specify the language"), language); else yield return new(language.Name(), language); } public static IEnumerable> GetCommonCodingLanguagesData() { foreach (var language in Enum.GetValues()) yield return new(language.Name(), language); } public static IEnumerable> GetComplexityData() { foreach (var complexity in Enum.GetValues()) yield return new(complexity.Name(), complexity); } public static IEnumerable> GetNumberParticipantsData() { foreach (var number in Enum.GetValues()) yield return new(number.Name(), number); } public static IEnumerable> GetWritingStyles4RewriteData() { foreach (var style in Enum.GetValues()) yield return new(style.Name(), style); } public static IEnumerable> GetWritingStyles4EMailData() { foreach (var style in Enum.GetValues()) yield return new(style.Name(), style); } public static IEnumerable> GetSentenceStructureData() { foreach (var voice in Enum.GetValues()) yield return new(voice.Name(), voice); } public static IEnumerable> GetProfilesData(IEnumerable profiles) { foreach (var profile in profiles.GetAllProfiles()) yield return new(profile.Name, profile.Id); } public static IEnumerable> GetConfidenceSchemesData() { foreach (var scheme in Enum.GetValues()) yield return new(scheme.GetListDescription(), scheme); } public static IEnumerable> GetConfidenceLevelsData(SettingsManager settingsManager, bool restrictToGlobalMinimum = false) { var minimumLevel = ConfidenceLevel.NONE; if(restrictToGlobalMinimum && settingsManager.ConfigurationData.LLMProviders is { EnforceGlobalMinimumConfidence: true, GlobalMinimumConfidence: not ConfidenceLevel.NONE and not ConfidenceLevel.UNKNOWN }) minimumLevel = settingsManager.ConfigurationData.LLMProviders.GlobalMinimumConfidence; foreach (var level in Enum.GetValues()) { if(level is ConfidenceLevel.NONE) yield return new(TB("No minimum confidence level chosen"), level); if(level < minimumLevel) continue; switch (level) { case ConfidenceLevel.NONE: case ConfidenceLevel.UNKNOWN: continue; default: yield return new(level.GetName(), level); break; } } } public static IEnumerable> GetThemesData() { foreach (var theme in Enum.GetValues()) yield return new(theme.GetName(), theme); } }