using System.Linq.Expressions; using AIStudio.Provider; namespace AIStudio.Settings.DataModel; /// /// Stores the settings of the BeyondFacts Lab, which an organization may manage. /// /// The managed-configuration selector. public sealed class DataBeyondFactsLab(Expression>? configSelection = null) { /// /// The lowest minimum confidence the BeyondFacts Lab accepts, whatever the person or their organization configures. /// /// /// Unpublished research is the usual material of the lab. The built-in confidence schemes give this level /// to the cloud providers of the region one trusts and to self-hosted models; HIGH alone would leave only /// self-hosted models. A higher minimum of the person or the organization wins. /// public const ConfidenceLevel MINIMUM_CONFIDENCE_FLOOR = ConfidenceLevel.MEDIUM; /// /// The most characters the notes of an organization may have, see OrganizationRules. /// /// /// The chats of the steps receive the notes with every request, so they take room in the context of the model /// each time. A configuration plugin with longer notes leaves the lab without any, and the log says why. /// public const int ORGANIZATION_RULES_MAX_CHARACTERS = 2_000; /// /// Initializes unmanaged settings of the BeyondFacts Lab. /// public DataBeyondFactsLab() : this(null) { } /// /// Gets or sets the provider which new preparations start with. /// public string PreselectedProvider { get; set; } = ManagedConfiguration.Register(configSelection, value => value.PreselectedProvider, string.Empty); /// /// Gets or sets the minimum confidence a provider needs for the lab. /// /// /// A value below MINIMUM_CONFIDENCE_FLOOR has no effect, see ComponentsExtensions.MinimumConfidence. /// public ConfidenceLevel MinimumProviderConfidence { get; set; } = ManagedConfiguration.Register(configSelection, value => value.MinimumProviderConfidence, MINIMUM_CONFIDENCE_FLOOR); /// /// Gets or sets whether files in the folder for prompt overrides replace the prompts which come with the lab. /// /// /// The option serves the further development of the prompts, e.g., by the research team behind the lab, not the /// preparation of an appearance. An organization may switch it off and lock it. /// public bool AllowPromptOverrides { get; set; } = ManagedConfiguration.Register(configSelection, value => value.AllowPromptOverrides, false); /// /// Gets or sets the notes of the organization for public appearances, e.g., to contact the press office before /// every public event; empty without any. Markdown, with LF line breaks and without spaces around it. /// /// /// Only a configuration plugin sets them; the options of the lab offer no field. The lab shows them word for /// word, and the chats of the steps receive them as information along with the first message, never in the /// system prompt, so that the rules of the lab prevail where the notes contradict them. /// public string OrganizationRules { get; set; } = ManagedConfiguration.Register(configSelection, value => value.OrganizationRules, string.Empty); /// /// Gets or sets the hash of the notes the person confirmed, see BflNotice; empty while they confirmed none. /// /// /// Only the person can confirm the notes, so an organization cannot manage this setting. /// public string AcceptedNoticeHash { get; set; } = string.Empty; }