mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-05-02 20:59:48 +00:00
148 lines
5.8 KiB
C#
148 lines
5.8 KiB
C#
using System.Text;
|
|
|
|
using AIStudio.Components;
|
|
using AIStudio.Settings.DataModel;
|
|
|
|
namespace AIStudio.Assistants.BiasDay;
|
|
|
|
public partial class BiasOfTheDayAssistant : AssistantBaseCore
|
|
{
|
|
public override Tools.Components Component => Tools.Components.BIAS_DAY_ASSISTANT;
|
|
|
|
protected override string Title => "Bias of the Day";
|
|
|
|
protected override string Description =>
|
|
"""
|
|
Learn about a different cognitive bias every day. You have the opportunity to ask your questions to the LLM.
|
|
""";
|
|
|
|
protected override string SystemPrompt => $"""
|
|
You are a friendly, helpful expert on cognitive bias. You studied psychology and
|
|
have a lot of experience. You explain a bias every day. Today's bias belongs to
|
|
the category: "{this.biasOfTheDay.Category.ToName()}". We have the following
|
|
thoughts on this category:
|
|
|
|
{this.biasOfTheDay.Category.GetThoughts()}
|
|
|
|
Today's bias is:
|
|
{this.biasOfTheDay.Description}
|
|
{this.SystemPromptSources()}
|
|
Important: you use the following language: {this.SystemPromptLanguage()}. Please
|
|
ask the user a personal question at the end to encourage them to think about
|
|
this bias.
|
|
""";
|
|
|
|
protected override IReadOnlyList<IButtonData> FooterButtons => [];
|
|
|
|
protected override string SubmitText => "Show me the bias of the day";
|
|
|
|
protected override Func<Task> SubmitAction => this.TellBias;
|
|
|
|
protected override bool ShowSendTo => false;
|
|
|
|
protected override bool ShowCopyResult => false;
|
|
|
|
protected override bool ShowReset => false;
|
|
|
|
protected override void ResetFrom()
|
|
{
|
|
if (!this.MightPreselectValues())
|
|
{
|
|
this.selectedTargetLanguage = CommonLanguages.AS_IS;
|
|
this.customTargetLanguage = string.Empty;
|
|
}
|
|
}
|
|
|
|
protected override bool MightPreselectValues()
|
|
{
|
|
if (this.SettingsManager.ConfigurationData.BiasOfTheDay.PreselectOptions)
|
|
{
|
|
this.selectedTargetLanguage = this.SettingsManager.ConfigurationData.BiasOfTheDay.PreselectedTargetLanguage;
|
|
this.customTargetLanguage = this.SettingsManager.ConfigurationData.BiasOfTheDay.PreselectedOtherLanguage;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private Bias biasOfTheDay = BiasCatalog.NONE;
|
|
private CommonLanguages selectedTargetLanguage = CommonLanguages.AS_IS;
|
|
private string customTargetLanguage = string.Empty;
|
|
|
|
private string? ValidateTargetLanguage(CommonLanguages language)
|
|
{
|
|
if(language is CommonLanguages.AS_IS)
|
|
return "Please select a target language for the bias.";
|
|
|
|
return null;
|
|
}
|
|
|
|
private string? ValidateCustomLanguage(string language)
|
|
{
|
|
if(this.selectedTargetLanguage == CommonLanguages.OTHER && string.IsNullOrWhiteSpace(language))
|
|
return "Please provide a custom language.";
|
|
|
|
return null;
|
|
}
|
|
|
|
private string SystemPromptSources()
|
|
{
|
|
var sb = new StringBuilder();
|
|
if (this.biasOfTheDay.Links.Count > 0)
|
|
{
|
|
sb.AppendLine();
|
|
sb.AppendLine("Please share the following sources with the user as a Markdown list:");
|
|
foreach (var link in this.biasOfTheDay.Links)
|
|
sb.AppendLine($"- {link}");
|
|
|
|
sb.AppendLine();
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
private string SystemPromptLanguage()
|
|
{
|
|
if(this.selectedTargetLanguage is CommonLanguages.OTHER)
|
|
return this.customTargetLanguage;
|
|
|
|
return this.selectedTargetLanguage.Name();
|
|
}
|
|
|
|
private async Task TellBias()
|
|
{
|
|
if(this.SettingsManager.ConfigurationData.BiasOfTheDay.RestrictOneBiasPerDay)
|
|
{
|
|
if(this.SettingsManager.ConfigurationData.BiasOfTheDay.DateLastBiasDrawn == DateOnly.FromDateTime(DateTime.Now))
|
|
{
|
|
MessageBus.INSTANCE.DeferMessage(this, Event.LOAD_CHAT,
|
|
new LoadChat
|
|
{
|
|
WorkspaceId = Workspaces.WORKSPACE_ID_BIAS,
|
|
ChatId = this.SettingsManager.ConfigurationData.BiasOfTheDay.BiasOfTheDayChatId,
|
|
});
|
|
|
|
this.NavigationManager.NavigateTo(Routes.CHAT);
|
|
return;
|
|
}
|
|
}
|
|
|
|
await this.form!.Validate();
|
|
if (!this.inputIsValid)
|
|
return;
|
|
|
|
this.biasOfTheDay = BiasCatalog.GetRandomBias(this.SettingsManager.ConfigurationData.BiasOfTheDay.UsedBias);
|
|
var chatId = this.CreateChatThread(Workspaces.WORKSPACE_ID_BIAS, this.biasOfTheDay.Name);
|
|
this.SettingsManager.ConfigurationData.BiasOfTheDay.BiasOfTheDayChatId = chatId;
|
|
this.SettingsManager.ConfigurationData.BiasOfTheDay.DateLastBiasDrawn = DateOnly.FromDateTime(DateTime.Now);
|
|
await this.SettingsManager.StoreSettings();
|
|
var time = this.AddUserRequest(
|
|
"""
|
|
Please tell me about the bias of the day.
|
|
""", true);
|
|
|
|
// Start the AI response without waiting for it to finish:
|
|
_ = this.AddAIResponseAsync(time);
|
|
await this.SendToAssistant(Tools.Components.CHAT, default);
|
|
}
|
|
} |