mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-13 04:33:49 +00:00
Add enterprise config support via env vars & Windows registry (#491)
This commit is contained in:
1 parent
b88b78a08e
commit
e8cfce05fe
33 files changed
+1061
-98
No files matched your search
@@ -23,6 +23,8 @@ public readonly record struct Provider(
|
||||
LLMProviders UsedLLMProvider,
|
||||
Model Model,
|
||||
bool IsSelfHosted = false,
|
||||
bool IsEnterpriseConfiguration = false,
|
||||
Guid EnterpriseConfigurationPluginId = default,
|
||||
string Hostname = "http://localhost:1234",
|
||||
Host Host = Host.NONE,
|
||||
HFInferenceProvider HFInferenceProvider = HFInferenceProvider.NONE) : ISecretId
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
using System.Linq.Expressions;
|
||||
|
||||
namespace AIStudio.Settings;
|
||||
|
||||
public sealed class SettingsLocker
|
||||
{
|
||||
private static readonly ILogger<SettingsLocker> LOGGER = Program.LOGGER_FACTORY.CreateLogger<SettingsLocker>();
|
||||
private readonly Dictionary<string, Dictionary<string, Guid>> lockedProperties = new();
|
||||
|
||||
public void Register<T>(Expression<Func<T, object>> propertyExpression, Guid configurationPluginId)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
if (!this.lockedProperties.ContainsKey(className))
|
||||
this.lockedProperties[className] = [];
|
||||
|
||||
this.lockedProperties[className].TryAdd(propertyName, configurationPluginId);
|
||||
}
|
||||
|
||||
public void Remove<T>(Expression<Func<T, object>> propertyExpression)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
if (this.lockedProperties.TryGetValue(className, out var props))
|
||||
{
|
||||
if (props.Remove(propertyName))
|
||||
{
|
||||
// If the property was removed, check if the class has no more locked properties:
|
||||
if (props.Count == 0)
|
||||
this.lockedProperties.Remove(className);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Guid GetConfigurationPluginId<T>(Expression<Func<T, object>> propertyExpression)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
if (this.lockedProperties.TryGetValue(className, out var props) && props.TryGetValue(propertyName, out var configurationPluginId))
|
||||
return configurationPluginId;
|
||||
|
||||
// No configuration plugin ID found for this property:
|
||||
return Guid.Empty;
|
||||
}
|
||||
|
||||
public bool IsLocked<T>(Expression<Func<T, object>> propertyExpression)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
return this.lockedProperties.TryGetValue(className, out var props) && props.ContainsKey(propertyName);
|
||||
}
|
||||
|
||||
private static MemberExpression GetMemberExpression<T>(Expression<Func<T, object>> expression)
|
||||
{
|
||||
switch (expression.Body)
|
||||
{
|
||||
// Case for value types, which are wrapped in UnaryExpression:
|
||||
case UnaryExpression { NodeType: ExpressionType.Convert } unaryExpression:
|
||||
return (MemberExpression)unaryExpression.Operand;
|
||||
|
||||
// Case for reference types, which are directly MemberExpressions:
|
||||
case MemberExpression memberExpression:
|
||||
return memberExpression;
|
||||
|
||||
default:
|
||||
LOGGER.LogError($"Expression '{expression}' is not a valid property expression.");
|
||||
throw new ArgumentException($"Expression '{expression}' is not a valid property expression.", nameof(expression));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -159,7 +159,7 @@ public sealed class SettingsManager
|
||||
/// </summary>
|
||||
/// <param name="plugin">The plugin to check.</param>
|
||||
/// <returns>True, when the plugin is enabled, false otherwise.</returns>
|
||||
public bool IsPluginEnabled(IPluginMetadata plugin) => this.ConfigurationData.EnabledPlugins.Contains(plugin.Id);
|
||||
public bool IsPluginEnabled(IPluginMetadata plugin) => plugin.Type is PluginType.CONFIGURATION || this.ConfigurationData.EnabledPlugins.Contains(plugin.Id);
|
||||
|
||||
/// <summary>
|
||||
/// Returns the active language plugin.
|
||||
|
||||
Reference in new issue
Block a user