Add support for context materials in SWOT Analysis

This commit is contained in:
hart_s3 committed 2026-09-03 14:25:02 +02:00
1 parent 4b04a3b2c8
commit f74f4030be
3 files changed
+53 -17

No files matched your search

@@ -1,4 +1,5 @@
using AIStudio.Dialogs.Settings;
using AIStudio.Chat;
using AIStudio.Dialogs.Settings;
using AIStudio.Tools.AssistantSessions;
namespace AIStudio.Assistants.SWOTAnalysis;
@@ -50,6 +51,7 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
{
this.inputText = string.Empty;
this.analysisGoal = string.Empty;
this.contextMaterials.Clear();
if (!this.MightPreselectValues())
{
this.showWebContentReader = false;
@@ -80,6 +82,7 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
private string inputText = string.Empty;
private string analysisGoal = string.Empty;
private string importantAspects = string.Empty;
private HashSet<FileAttachment> contextMaterials = [];
private bool isAgentRunning;
private CommonLanguages selectedTargetLanguage = CommonLanguages.AS_IS;
private string customTargetLanguage = string.Empty;
@@ -88,6 +91,7 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
private static readonly AssistantSessionStateKey<string> INPUT_TEXT_STATE_KEY = new(nameof(inputText));
private static readonly AssistantSessionStateKey<string> ANALYSIS_GOAL_STATE_KEY = new(nameof(analysisGoal));
private static readonly AssistantSessionStateKey<string> IMPORTANT_ASPECTS_STATE_KEY = new(nameof(importantAspects));
private static readonly AssistantSessionStateKey<HashSet<FileAttachment>> CONTEXT_MATERIALS_STATE_KEY = new(nameof(contextMaterials));
private static readonly AssistantSessionStateKey<bool> IS_AGENT_RUNNING_STATE_KEY = new(nameof(isAgentRunning));
private static readonly AssistantSessionStateKey<CommonLanguages> SELECTED_TARGET_LANGUAGE_STATE_KEY = new(nameof(selectedTargetLanguage));
private static readonly AssistantSessionStateKey<string> CUSTOM_TARGET_LANGUAGE_STATE_KEY = new(nameof(customTargetLanguage));
@@ -100,6 +104,7 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
state.Set(INPUT_TEXT_STATE_KEY, this.inputText);
state.Set(ANALYSIS_GOAL_STATE_KEY, this.analysisGoal);
state.Set(IMPORTANT_ASPECTS_STATE_KEY, this.importantAspects);
state.SetHashSet(CONTEXT_MATERIALS_STATE_KEY, this.contextMaterials);
state.Set(IS_AGENT_RUNNING_STATE_KEY, this.isAgentRunning);
state.Set(SELECTED_TARGET_LANGUAGE_STATE_KEY, this.selectedTargetLanguage);
state.Set(CUSTOM_TARGET_LANGUAGE_STATE_KEY, this.customTargetLanguage);
@@ -113,6 +118,7 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
state.Restore(INPUT_TEXT_STATE_KEY, value => this.inputText = value);
state.Restore(ANALYSIS_GOAL_STATE_KEY, value => this.analysisGoal = value);
state.Restore(IMPORTANT_ASPECTS_STATE_KEY, value => this.importantAspects = value);
state.RestoreHashSet(CONTEXT_MATERIALS_STATE_KEY, this.contextMaterials);
state.Restore(IS_AGENT_RUNNING_STATE_KEY, value => this.isAgentRunning = value);
state.Restore(SELECTED_TARGET_LANGUAGE_STATE_KEY, value => this.selectedTargetLanguage = value);
state.Restore(CUSTOM_TARGET_LANGUAGE_STATE_KEY, value => this.customTargetLanguage = value);
@@ -139,6 +145,14 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
return null;
}
private string? ValidatingAnalysisGoal(string text)
{
if (string.IsNullOrWhiteSpace(text))
return T("Please describe the goal the SWOT analysis should support.");
return null;
}
private string? ValidateCustomLanguage(string language)
{
if (this.selectedTargetLanguage == CommonLanguages.OTHER && string.IsNullOrWhiteSpace(language))
@@ -149,9 +163,7 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
private string BuildUserRequest()
{
var analysisGoal = string.IsNullOrWhiteSpace(this.analysisGoal)
? "No specific analysis goal was provided."
: $"Analysis goal: {this.analysisGoal}";
var analysisGoal = $"Analysis goal: {this.analysisGoal}";
var analysisFocus = string.IsNullOrWhiteSpace(this.importantAspects)
? "No additional analysis focus was provided."
: $"Analysis focus: {this.importantAspects}";
@@ -175,7 +187,7 @@ public partial class AssistantSWOTAnalysis : AssistantBaseCore<SettingsDialogSWO
return;
this.CreateChatThread();
var time = this.AddUserRequest(this.BuildUserRequest(), hideContentFromUser: true);
var time = this.AddUserRequest(this.BuildUserRequest(), hideContentFromUser: true, this.contextMaterials.ToList());
await this.AddAIResponseAsync(time);
}