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

167 lines
5.6 KiB
C#
Raw Normal View History

using AIStudio.Chat;
2026-01-29 12:07:52 +00:00
using AIStudio.Dialogs.Settings;
namespace AIStudio.Assistants.PowerPoint;
public partial class PowerPoint : AssistantBaseCore<SettingsDialogPowerPoint>
{
2026-01-29 12:50:20 +00:00
public override Tools.Components Component => Tools.Components.POWER_POINT_ASSISTANT;
2026-01-29 12:07:52 +00:00
2026-01-29 12:50:20 +00:00
protected override string Title => T("Power Point");
2026-01-29 12:07:52 +00:00
2026-01-29 12:50:20 +00:00
protected override string Description => T("Create and refine PowerPoint slide text from a topic or outline.");
2026-01-29 12:07:52 +00:00
protected override string SystemPrompt =>
$$"""
You are a professional presentation editor and writer.
Create a clear, single-slide outline from the user's inputs.
{{this.selectedTargetLanguage.PromptTranslation(this.customTargetLanguage)}}
Inputs:
- "Your title": the main title.
{{this.inputText}}
- "Your content": the source text.
{{this.selectedTargetGroup.Prompt()}}
Rule for creating the individual subheadings:
- If {{this.numberOfSheets}} is NOT 0
- Generate exactly {{this.numberOfSheets}} precise subheadings, each heading represents one slide in a presentation.
- If {{this.timeSpecification}} is NOT 0
- Generate exactly {{this.calculatedNumberOfSlides}} precise subheadings, each heading represents one slide in a presentation.
- If either parameter is 0, ignore that rules.
- Each subheadings must have:
- A clear, concise, and thematically meaningful heading.
- 3 to 7 bullet points (max 7) summarizing the slides content.
- Each bullet point must be max 12 words.
Output requirements:
- Output only Markdown.
- Start with a single H1 title from "Your title".
- Then add headings with own bullet lists 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.
2026-01-29 12:07:52 +00:00
""";
protected override bool AllowProfiles => false;
protected override IReadOnlyList<IButtonData> FooterButtons => [];
2026-01-29 12:50:20 +00:00
protected override string SubmitText => T("Create Power Point");
2026-01-29 12:07:52 +00:00
protected override Func<Task> SubmitAction => this.CreatePowerPoint;
2026-01-29 12:07:52 +00:00
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;
2026-01-29 12:07:52 +00:00
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;
private double numberOfSheets;
private decimal timeSpecification;
private int calculatedNumberOfSlides = 0;
2026-01-29 12:07:52 +00:00
#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");
2026-01-29 12:07:52 +00:00
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 int CalculateNumberOfSlides()
{
return this.calculatedNumberOfSlides = (int)Math.Round(this.timeSpecification / (decimal)1.5);
}
2026-01-29 12:07:52 +00:00
private string UserPromptContext()
{
if(string.IsNullOrWhiteSpace(this.inputContext))
return string.Empty;
return $"""
The given context is:
```
{this.inputContext}
```
""";
}
private async Task CreatePowerPoint()
2026-01-29 12:07:52 +00:00
{
await this.form!.Validate();
if (!this.inputIsValid)
return;
this.calculatedNumberOfSlides = this.timeSpecification > 0 ? this.CalculateNumberOfSlides() : 0;
2026-01-29 12:07:52 +00:00
this.CreateChatThread();
var time = this.AddUserRequest(
$"""
{this.UserPromptContext()}
```
{this.inputText}
```
""");
await this.AddAIResponseAsync(time);
}
}