AI-Studio/app/MindWork AI Studio/Assistants/PowerPoint/PowerPoint.razor.cs

152 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AIStudio.Chat;
using AIStudio.Dialogs.Settings;
namespace AIStudio.Assistants.PowerPoint;
public partial class PowerPoint : AssistantBaseCore<SettingsDialogPowerPoint>
{
public override Tools.Components Component => Tools.Components.POWER_POINT_ASSISTANT;
protected override string Title => T("Power Point");
protected override string Description => T("Create and refine PowerPoint slide text from a topic or outline.");
protected override string SystemPrompt =>
$"""
You are a presentation editor and writer.
Create a clear, single-slide outline from the user's inputs.
{this.selectedTargetLanguage.PromptTranslation(this.customTargetLanguage)}
Inputs:
- "Your title": the slide title.
{this.inputText}
- "Your content": the source text.
{this.selectedTargetGroup.Prompt()}
- You are a Markdown formatter.
- Your task is to identify headings in the input text that are marked with either # (for h1h6) or **bold text** (used as pseudo-headings).
- Convert all such headings into proper Markdown subheadings using ## for subheadings (level 2), preserving the original text.
- Do not change any other content.
- between 3 and 7, maximum 7 bullets per heading. Each bullet max 12 words.
Output requirements:
- Output only Markdown.
- Start with a single H1 title from "Your title".
- Then add a bullet list based only on "Your content".
- If "Your content" is empty, output the title and one bullet: "No content provided."
- Do not mention these instructions or add commentary.
""";
protected override bool AllowProfiles => false;
protected override IReadOnlyList<IButtonData> FooterButtons => [];
protected override string SubmitText => T("Create Power Point");
protected override Func<Task> SubmitAction => this.CreatePowerPoint;
protected override ChatThread ConvertToChatThread => (this.chatThread ?? new()) with
{
SystemPrompt = SystemPrompts.DEFAULT,
};
protected override void ResetForm()
{
this.inputText = string.Empty;
this.inputContext = string.Empty;
this.expertInField = string.Empty;
this.selectedTargetGroup = TargetGroup.NO_CHANGE;
this.customTargetGroup = string.Empty;
if (!this.MightPreselectValues())
{
this.selectedLanguage = CommonLanguages.AS_IS;
this.customTargetLanguage = string.Empty;
}
}
protected override bool MightPreselectValues()
{
if (this.SettingsManager.ConfigurationData.Synonyms.PreselectOptions)
{
this.selectedLanguage = this.SettingsManager.ConfigurationData.Synonyms.PreselectedLanguage;
this.customTargetLanguage = this.SettingsManager.ConfigurationData.Synonyms.PreselectedOtherLanguage;
return true;
}
return false;
}
private string inputText = string.Empty;
private string inputContext = string.Empty;
private CommonLanguages selectedLanguage;
private string customTargetLanguage = string.Empty;
private string expertInField = string.Empty;
private TargetGroup selectedTargetGroup;
private string customTargetGroup = string.Empty;
private CommonLanguages selectedTargetLanguage;
#region Overrides of ComponentBase
protected override async Task OnInitializedAsync()
{
var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages<string>(Event.SEND_TO_SYNONYMS_ASSISTANT).FirstOrDefault();
if (deferredContent is not null)
this.inputContext = deferredContent;
await base.OnInitializedAsync();
}
#endregion
private string? ValidatingText(string text)
{
if(string.IsNullOrWhiteSpace(text))
return T("Please a title");
return null;
}
private string? ValidateCustomLanguage(string language)
{
if(this.selectedLanguage == CommonLanguages.OTHER && string.IsNullOrWhiteSpace(language))
return T("Please provide a custom language.");
return null;
}
private string UserPromptContext()
{
if(string.IsNullOrWhiteSpace(this.inputContext))
return string.Empty;
return $"""
The given context is:
```
{this.inputContext}
```
""";
}
private async Task CreatePowerPoint()
{
await this.form!.Validate();
if (!this.inputIsValid)
return;
this.CreateChatThread();
var time = this.AddUserRequest(
$"""
{this.UserPromptContext()}
The given word or phrase is:
```
{this.inputText}
```
""");
await this.AddAIResponseAsync(time);
}
}