From a72ec276b8275c6e5c9953bd74f48d2353773351 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Thu, 15 Jan 2026 22:05:32 +0100 Subject: [PATCH] Refactored the system prompt to use a dynamic date and time processing --- .../Agenda/AssistantAgenda.razor.cs | 2 +- .../DocumentAnalysisAssistant.razor.cs | 2 +- .../Assistants/EMail/AssistantEMail.razor.cs | 2 +- .../AssistantGrammarSpelling.razor.cs | 2 +- .../JobPosting/AssistantJobPostings.razor.cs | 2 +- .../LegalCheck/AssistantLegalCheck.razor.cs | 2 +- .../MyTasks/AssistantMyTasks.razor.cs | 2 +- .../AssistantRewriteImprove.razor.cs | 2 +- .../Synonym/AssistantSynonyms.razor.cs | 2 +- .../AssistantTextSummarizer.razor.cs | 2 +- .../Translation/AssistantTranslation.razor.cs | 2 +- app/MindWork AI Studio/Chat/ChatThread.cs | 35 ++++++++++++++----- app/MindWork AI Studio/Chat/SystemPrompts.cs | 16 +-------- .../Components/ChatComponent.razor.cs | 4 +-- .../Components/Workspaces.razor.cs | 2 +- .../Dialogs/ChatTemplateDialog.razor.cs | 2 +- 16 files changed, 42 insertions(+), 39 deletions(-) diff --git a/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs b/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs index 2b2d4254..c0571c7c 100644 --- a/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs +++ b/app/MindWork AI Studio/Assistants/Agenda/AssistantAgenda.razor.cs @@ -99,7 +99,7 @@ public partial class AssistantAgenda : AssistantBaseCore protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs b/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs index 66d3594d..d0265178 100644 --- a/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs +++ b/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs @@ -120,7 +120,7 @@ public partial class DocumentAnalysisAssistant : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs b/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs index 52e2de65..cc0629d0 100644 --- a/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs +++ b/app/MindWork AI Studio/Assistants/EMail/AssistantEMail.razor.cs @@ -28,7 +28,7 @@ public partial class AssistantEMail : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs b/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs index 1caff4db..6025f133 100644 --- a/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs +++ b/app/MindWork AI Studio/Assistants/GrammarSpelling/AssistantGrammarSpelling.razor.cs @@ -43,7 +43,7 @@ public partial class AssistantGrammarSpelling : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/JobPosting/AssistantJobPostings.razor.cs b/app/MindWork AI Studio/Assistants/JobPosting/AssistantJobPostings.razor.cs index ccb69575..21b183f0 100644 --- a/app/MindWork AI Studio/Assistants/JobPosting/AssistantJobPostings.razor.cs +++ b/app/MindWork AI Studio/Assistants/JobPosting/AssistantJobPostings.razor.cs @@ -53,7 +53,7 @@ public partial class AssistantJobPostings : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs b/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs index 6edc4d92..c0b502ee 100644 --- a/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs +++ b/app/MindWork AI Studio/Assistants/LegalCheck/AssistantLegalCheck.razor.cs @@ -30,7 +30,7 @@ public partial class AssistantLegalCheck : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs b/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs index 3d6de527..fa5d1e27 100644 --- a/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs +++ b/app/MindWork AI Studio/Assistants/MyTasks/AssistantMyTasks.razor.cs @@ -33,7 +33,7 @@ public partial class AssistantMyTasks : AssistantBaseCore protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs b/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs index a13460b1..44aa94d2 100644 --- a/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs +++ b/app/MindWork AI Studio/Assistants/RewriteImprove/AssistantRewriteImprove.razor.cs @@ -44,7 +44,7 @@ public partial class AssistantRewriteImprove : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs b/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs index bde446ad..3581a5d3 100644 --- a/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs +++ b/app/MindWork AI Studio/Assistants/Synonym/AssistantSynonyms.razor.cs @@ -55,7 +55,7 @@ public partial class AssistantSynonyms : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs b/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs index bf64d18a..257ff39c 100644 --- a/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs +++ b/app/MindWork AI Studio/Assistants/TextSummarizer/AssistantTextSummarizer.razor.cs @@ -32,7 +32,7 @@ public partial class AssistantTextSummarizer : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs b/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs index 760b4670..51359e40 100644 --- a/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs +++ b/app/MindWork AI Studio/Assistants/Translation/AssistantTranslation.razor.cs @@ -31,7 +31,7 @@ public partial class AssistantTranslation : AssistantBaseCore (this.chatThread ?? new()) with { - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, }; protected override void ResetForm() diff --git a/app/MindWork AI Studio/Chat/ChatThread.cs b/app/MindWork AI Studio/Chat/ChatThread.cs index 134c555f..26c3d4d2 100644 --- a/app/MindWork AI Studio/Chat/ChatThread.cs +++ b/app/MindWork AI Studio/Chat/ChatThread.cs @@ -1,3 +1,5 @@ +using System.Globalization; + using AIStudio.Components; using AIStudio.Settings; using AIStudio.Settings.DataModel; @@ -91,7 +93,7 @@ public sealed record ChatThread // Use the information from the chat template, if provided. Otherwise, use the default system prompt // string systemPromptTextWithChatTemplate; - var logMessage = $"Using no chat template for chat thread '{chatThread.Name}'."; + var firstLogMessage = $"Using no chat template for chat thread '{chatThread.Name}'."; if (string.IsNullOrWhiteSpace(chatThread.SelectedChatTemplate)) systemPromptTextWithChatTemplate = chatThread.SystemPrompt; else @@ -109,7 +111,7 @@ public sealed record ChatThread systemPromptTextWithChatTemplate = chatThread.SystemPrompt; else { - logMessage = $"Using chat template '{chatTemplate.Name}' for chat thread '{chatThread.Name}'."; + firstLogMessage = $"Using chat template '{chatTemplate.Name}' for chat thread '{chatThread.Name}'."; this.allowProfile = chatTemplate.AllowProfileUsage; systemPromptTextWithChatTemplate = chatTemplate.ToSystemPrompt(); } @@ -122,8 +124,8 @@ public sealed record ChatThread // default system prompt: chatThread = chatThread with { SystemPrompt = systemPromptTextWithChatTemplate }; - LOGGER.LogInformation(logMessage); - + LOGGER.LogInformation(firstLogMessage); + // // Add augmented data, if available: // @@ -149,7 +151,7 @@ public sealed record ChatThread // Add information from the profile if available and allowed: // string systemPromptText; - logMessage = $"Using no profile for chat thread '{chatThread.Name}'."; + var secondLogMessage = $"Using no profile for chat thread '{chatThread.Name}'."; if (string.IsNullOrWhiteSpace(chatThread.SelectedProfile) || this.allowProfile is false) systemPromptText = systemPromptWithAugmentedData; else @@ -163,11 +165,11 @@ public sealed record ChatThread else { var profile = settingsManager.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == chatThread.SelectedProfile); - if(profile == default) + if(profile is null) systemPromptText = systemPromptWithAugmentedData; else { - logMessage = $"Using profile '{profile.Name}' for chat thread '{chatThread.Name}'."; + secondLogMessage = $"Using profile '{profile.Name}' for chat thread '{chatThread.Name}'."; systemPromptText = $""" {systemPromptWithAugmentedData} @@ -178,8 +180,23 @@ public sealed record ChatThread } } - LOGGER.LogInformation(logMessage); - return systemPromptText; + LOGGER.LogInformation(secondLogMessage); + + // + // Prepend the current date and time to the system prompt: + // + var nowUtc = DateTime.UtcNow; + var nowLocal = DateTime.Now; + var currentDateTime = string.Create( + new CultureInfo("en-US"), + $"Today is {nowUtc:MMMM d, yyyy h:mm tt} (UTC) and {nowLocal:MMMM d, yyyy h:mm tt} (local time)." + ); + + return $""" + {currentDateTime} + + {systemPromptText} + """; } /// diff --git a/app/MindWork AI Studio/Chat/SystemPrompts.cs b/app/MindWork AI Studio/Chat/SystemPrompts.cs index f3b199f4..6f60e603 100644 --- a/app/MindWork AI Studio/Chat/SystemPrompts.cs +++ b/app/MindWork AI Studio/Chat/SystemPrompts.cs @@ -1,20 +1,6 @@ -using System.Globalization; - namespace AIStudio.Chat; public static class SystemPrompts { - public static string Default - { - get - { - var nowUtc = DateTime.UtcNow; - var nowLocal = DateTime.Now; - - return string.Create( - new CultureInfo("en-US"), - $"Today is {nowUtc:MMMM d, yyyy h:mm tt} (UTC) and {nowLocal:MMMM d, yyyy h:mm tt} (local time)." - ); - } - } + public const string DEFAULT = "You are a helpful assistant."; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/ChatComponent.razor.cs b/app/MindWork AI Studio/Components/ChatComponent.razor.cs index adb2c546..f6110e41 100644 --- a/app/MindWork AI Studio/Components/ChatComponent.razor.cs +++ b/app/MindWork AI Studio/Components/ChatComponent.razor.cs @@ -439,7 +439,7 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable SelectedProvider = this.Provider.Id, SelectedProfile = this.currentProfile.Id, SelectedChatTemplate = this.currentChatTemplate.Id, - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, WorkspaceId = this.currentWorkspaceId, ChatId = Guid.NewGuid(), DataSourceOptions = this.earlyDataSourceOptions, @@ -679,7 +679,7 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable SelectedProvider = this.Provider.Id, SelectedProfile = this.currentProfile.Id, SelectedChatTemplate = this.currentChatTemplate.Id, - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, WorkspaceId = this.currentWorkspaceId, ChatId = Guid.NewGuid(), Name = string.Empty, diff --git a/app/MindWork AI Studio/Components/Workspaces.razor.cs b/app/MindWork AI Studio/Components/Workspaces.razor.cs index 3762b247..f3564e65 100644 --- a/app/MindWork AI Studio/Components/Workspaces.razor.cs +++ b/app/MindWork AI Studio/Components/Workspaces.razor.cs @@ -573,7 +573,7 @@ public partial class Workspaces : MSGComponentBase WorkspaceId = workspaceId, ChatId = Guid.NewGuid(), Name = string.Empty, - SystemPrompt = SystemPrompts.Default, + SystemPrompt = SystemPrompts.DEFAULT, Blocks = [], }; diff --git a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs index 166a8c4f..0aa16ddf 100644 --- a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs @@ -263,7 +263,7 @@ public partial class ChatTemplateDialog : MSGComponentBase private void UseDefaultSystemPrompt() { - this.DataSystemPrompt = SystemPrompts.Default; + this.DataSystemPrompt = SystemPrompts.DEFAULT; } private void Cancel() => this.MudDialog.Cancel();