From 9fd35176a827c2a31cf6fe9710a9eeb71ba48342 Mon Sep 17 00:00:00 2001 From: Nils Kruthoff Date: Tue, 15 Sep 2026 14:16:58 +0200 Subject: [PATCH] injecting existing data source options into dynamic assistants --- .../Dynamic/AssistantDynamic.razor.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs index 82ffae9b..52212730 100644 --- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs +++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs @@ -4,6 +4,7 @@ using AIStudio.Chat; using AIStudio.Dialogs; using AIStudio.Dialogs.Settings; using AIStudio.Settings; +using AIStudio.Settings.DataModel; using AIStudio.Tools.AssistantSessions; using AIStudio.Tools.PluginSystem; using AIStudio.Tools.PluginSystem.Assistants; @@ -69,6 +70,7 @@ public partial class AssistantDynamic : AssistantBaseCore private PluginAssistantAudit? audit; private string securityMessage = string.Empty; private bool isSecurityBlocked; + private DataSourceOptions dataSourceOptions = new(); private PluginAssistants? pendingChatLauncher; private const string ASSISTANT_QUERY_KEY = "assistantId"; private static readonly Dictionary SPELLCHECK_ATTRIBUTES = new(); @@ -88,6 +90,7 @@ public partial class AssistantDynamic : AssistantBaseCore private static readonly AssistantSessionStateKey AUDIT_STATE_KEY = new(nameof(audit)); private static readonly AssistantSessionStateKey SECURITY_MESSAGE_STATE_KEY = new(nameof(securityMessage)); private static readonly AssistantSessionStateKey IS_SECURITY_BLOCKED_STATE_KEY = new(nameof(isSecurityBlocked)); + private static readonly AssistantSessionStateKey DATA_SOURCE_OPTIONS_STATE_KEY = new(nameof(dataSourceOptions)); private bool CanReviseCurrentAssistant => this.assistantPlugin is { IsInternal: false, IsManagedByConfigServer: false } && !string.IsNullOrWhiteSpace(this.assistantPlugin.PluginPath); @@ -110,6 +113,7 @@ public partial class AssistantDynamic : AssistantBaseCore state.Set(AUDIT_STATE_KEY, this.audit); state.Set(SECURITY_MESSAGE_STATE_KEY, this.securityMessage); state.Set(IS_SECURITY_BLOCKED_STATE_KEY, this.isSecurityBlocked); + state.Set(DATA_SOURCE_OPTIONS_STATE_KEY, this.dataSourceOptions.CreateCopy()); } /// @@ -131,6 +135,7 @@ public partial class AssistantDynamic : AssistantBaseCore state.Restore(AUDIT_STATE_KEY, value => this.audit = value); state.Restore(SECURITY_MESSAGE_STATE_KEY, value => this.securityMessage = value); state.Restore(IS_SECURITY_BLOCKED_STATE_KEY, value => this.isSecurityBlocked = value); + state.Restore(DATA_SOURCE_OPTIONS_STATE_KEY, value => this.dataSourceOptions = value.CreateCopy()); } #region Implementation of AssistantBase @@ -207,6 +212,12 @@ public partial class AssistantDynamic : AssistantBaseCore await this.OpenChatLauncherAsync(launcherPlugin); } + protected override Task OnDefaultsAppliedAsync() + { + this.dataSourceOptions = this.SettingsManager.ConfigurationData.Chat.PreselectedDataSourceOptions.CreateCopy(); + return Task.CompletedTask; + } + protected override void ResetForm() { this.assistantState.Clear(); @@ -693,10 +704,17 @@ public partial class AssistantDynamic : AssistantBaseCore } this.CreateChatThread(); + this.ChatThread!.DataSourceOptions = this.dataSourceOptions.CreateCopy(); var time = this.AddUserRequest(await this.CollectUserPromptAsync(), false, this.CollectFileAttachments()); await this.AddAIResponseAsync(time); } + private async Task DataSourceOptionsChanged(DataSourceOptions options) + { + this.dataSourceOptions = options.CreateCopy(); + await this.CheckpointAssistantSession(); + } + private string CollectUserPromptFallback(IEnumerable components) { var prompt = new StringBuilder();