mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-04-28 10:39:47 +00:00
Added text summarization assistant
This commit is contained in:
parent
2e18b16de5
commit
4554cde085
@ -0,0 +1,43 @@
|
|||||||
|
@page "/assistant/summarizer"
|
||||||
|
@using AIStudio.Settings
|
||||||
|
@using AIStudio.Tools
|
||||||
|
@inherits AssistantBaseCore
|
||||||
|
|
||||||
|
<MudTextField T="string" @bind-Text="@this.inputText" Validation="@this.ValidatingText" AdornmentIcon="@Icons.Material.Filled.DocumentScanner" Adornment="Adornment.Start" Label="Your input" Variant="Variant.Outlined" Lines="6" AutoGrow="@true" MaxLines="12" Class="mb-3"/>
|
||||||
|
|
||||||
|
<MudStack Row="@true" AlignItems="AlignItems.Center" Class="mb-3">
|
||||||
|
<MudSelect T="CommonLanguages" @bind-Value="@this.selectedTargetLanguage" AdornmentIcon="@Icons.Material.Filled.Translate" Adornment="Adornment.Start" Label="Target language" Variant="Variant.Outlined" Margin="Margin.Dense">
|
||||||
|
@foreach (var targetLanguage in Enum.GetValues<CommonLanguages>())
|
||||||
|
{
|
||||||
|
<MudSelectItem Value="@targetLanguage">@targetLanguage.Name()</MudSelectItem>
|
||||||
|
}
|
||||||
|
</MudSelect>
|
||||||
|
@if (this.selectedTargetLanguage is CommonLanguages.OTHER)
|
||||||
|
{
|
||||||
|
<MudTextField T="string" @bind-Text="@this.customTargetLanguage" Validation="@this.ValidateCustomLanguage" Label="Custom target language" Variant="Variant.Outlined" Margin="Margin.Dense"/>
|
||||||
|
}
|
||||||
|
</MudStack>
|
||||||
|
|
||||||
|
<MudStack Row="@true" AlignItems="AlignItems.Center" Class="mb-3">
|
||||||
|
<MudSelect T="Complexity" @bind-Value="@this.selectedComplexity" AdornmentIcon="@Icons.Material.Filled.Layers" Adornment="Adornment.Start" Label="Target complexity" Variant="Variant.Outlined" Margin="Margin.Dense">
|
||||||
|
@foreach (var targetComplexity in Enum.GetValues<Complexity>())
|
||||||
|
{
|
||||||
|
<MudSelectItem Value="@targetComplexity">@targetComplexity.Name()</MudSelectItem>
|
||||||
|
}
|
||||||
|
</MudSelect>
|
||||||
|
@if (this.selectedComplexity is Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS)
|
||||||
|
{
|
||||||
|
<MudTextField T="string" @bind-Text="@this.expertInField" Validation="@this.ValidateExpertInField" Label="Your expertise" Variant="Variant.Outlined" Margin="Margin.Dense"/>
|
||||||
|
}
|
||||||
|
</MudStack>
|
||||||
|
|
||||||
|
<MudSelect T="Provider" @bind-Value="@this.selectedProvider" Validation="@this.ValidatingProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="Provider" Class="mb-3 rounded-lg" Variant="Variant.Outlined">
|
||||||
|
@foreach (var provider in this.SettingsManager.ConfigurationData.Providers)
|
||||||
|
{
|
||||||
|
<MudSelectItem Value="@provider"/>
|
||||||
|
}
|
||||||
|
</MudSelect>
|
||||||
|
|
||||||
|
<MudButton Variant="Variant.Filled" Class="mb-3" OnClick="() => this.SummarizeText()">
|
||||||
|
Summarize
|
||||||
|
</MudButton>
|
@ -0,0 +1,86 @@
|
|||||||
|
using AIStudio.Provider;
|
||||||
|
using AIStudio.Tools;
|
||||||
|
|
||||||
|
namespace AIStudio.Components.Pages.TextSummarizer;
|
||||||
|
|
||||||
|
public partial class AssistantTextSummarizer : AssistantBaseCore
|
||||||
|
{
|
||||||
|
protected override string Title => "Text Summarizer";
|
||||||
|
|
||||||
|
protected override string Description =>
|
||||||
|
"""
|
||||||
|
Summarize long text into a shorter version while retaining the main points.
|
||||||
|
You might want to change the language of the summary to make it more readable.
|
||||||
|
It is also possible to change the complexity of the summary to make it
|
||||||
|
easy to understand.
|
||||||
|
""";
|
||||||
|
|
||||||
|
protected override string SystemPrompt =>
|
||||||
|
"""
|
||||||
|
You get a long text as input. The user wants to get a summary of the text.
|
||||||
|
The user might want to change the language of the summary. In this case,
|
||||||
|
you should provide a summary in the requested language. Eventually, the user
|
||||||
|
want to change the complexity of the text. In this case, you should provide
|
||||||
|
a summary with the requested complexity. In any case, do not add any information.
|
||||||
|
""";
|
||||||
|
|
||||||
|
private string inputText = string.Empty;
|
||||||
|
private CommonLanguages selectedTargetLanguage;
|
||||||
|
private string customTargetLanguage = string.Empty;
|
||||||
|
private Complexity selectedComplexity;
|
||||||
|
private string expertInField = string.Empty;
|
||||||
|
|
||||||
|
private string? ValidatingText(string text)
|
||||||
|
{
|
||||||
|
if(string.IsNullOrWhiteSpace(text))
|
||||||
|
return "Please provide a text as input. You might copy the desired text from a document or a website.";
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string? ValidatingProvider(AIStudio.Settings.Provider provider)
|
||||||
|
{
|
||||||
|
if(provider.UsedProvider == Providers.NONE)
|
||||||
|
return "Please select a provider.";
|
||||||
|
|
||||||
|
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? ValidateExpertInField(string field)
|
||||||
|
{
|
||||||
|
if(this.selectedComplexity == Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS && string.IsNullOrWhiteSpace(field))
|
||||||
|
return "Please provide your field of expertise.";
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SummarizeText()
|
||||||
|
{
|
||||||
|
await this.form!.Validate();
|
||||||
|
if (!this.inputIsValid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.CreateChatThread();
|
||||||
|
var time = this.AddUserRequest(
|
||||||
|
$"""
|
||||||
|
{this.selectedTargetLanguage.Prompt(this.customTargetLanguage)}
|
||||||
|
{this.selectedComplexity.Prompt(this.expertInField)}
|
||||||
|
|
||||||
|
Please summarize the following text:
|
||||||
|
|
||||||
|
```
|
||||||
|
{this.inputText}
|
||||||
|
```
|
||||||
|
""");
|
||||||
|
|
||||||
|
await this.AddAIResponseAsync(time);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
using AIStudio.Tools;
|
||||||
|
|
||||||
|
namespace AIStudio.Components.Pages.TextSummarizer;
|
||||||
|
|
||||||
|
public static class CommonLanguagePrompts
|
||||||
|
{
|
||||||
|
public static string Prompt(this CommonLanguages language, string customLanguage) => language switch
|
||||||
|
{
|
||||||
|
CommonLanguages.AS_IS => "Do not change the language of the text.",
|
||||||
|
CommonLanguages.OTHER => $"Output you summary in {customLanguage}.",
|
||||||
|
|
||||||
|
_ => $"Output your summary in {language.Name()} ({language}).",
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
namespace AIStudio.Components.Pages.TextSummarizer;
|
||||||
|
|
||||||
|
public enum Complexity
|
||||||
|
{
|
||||||
|
NO_CHANGE,
|
||||||
|
|
||||||
|
SIMPLE_LANGUAGE,
|
||||||
|
TEEN_LANGUAGE,
|
||||||
|
EVERYDAY_LANGUAGE,
|
||||||
|
POPULAR_SCIENCE_LANGUAGE,
|
||||||
|
SCIENTIFIC_LANGUAGE_FIELD_EXPERTS,
|
||||||
|
SCIENTIFIC_LANGUAGE_OTHER_EXPERTS,
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
namespace AIStudio.Components.Pages.TextSummarizer;
|
||||||
|
|
||||||
|
public static class ComplexityExtensions
|
||||||
|
{
|
||||||
|
public static string Name(this Complexity complexity) => complexity switch
|
||||||
|
{
|
||||||
|
Complexity.NO_CHANGE => "No change in complexity",
|
||||||
|
|
||||||
|
Complexity.SIMPLE_LANGUAGE => "Simple language, e.g., for children",
|
||||||
|
Complexity.TEEN_LANGUAGE => "Teen language, e.g., for teenagers",
|
||||||
|
Complexity.EVERYDAY_LANGUAGE => "Everyday language, e.g., for adults",
|
||||||
|
Complexity.POPULAR_SCIENCE_LANGUAGE => "Popular science language, e.g., for people interested in science",
|
||||||
|
Complexity.SCIENTIFIC_LANGUAGE_FIELD_EXPERTS => "Scientific language for experts in this field",
|
||||||
|
Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS => "Scientific language for experts from other fields (interdisciplinary)",
|
||||||
|
|
||||||
|
_ => "No change in complexity",
|
||||||
|
};
|
||||||
|
|
||||||
|
public static string Prompt(this Complexity complexity, string expertInField) => complexity switch
|
||||||
|
{
|
||||||
|
Complexity.NO_CHANGE => "Do not change the complexity of the text.",
|
||||||
|
|
||||||
|
Complexity.SIMPLE_LANGUAGE => "Simplify the language, e.g., for 8 to 12-year-old children. Might use short sentences and simple words. You could use analogies to explain complex terms.",
|
||||||
|
Complexity.TEEN_LANGUAGE => "Use a language suitable for teenagers, e.g., 16 to 19 years old. Might use teenage slang and analogies to explain complex terms.",
|
||||||
|
Complexity.EVERYDAY_LANGUAGE => "Use everyday language suitable for adults. Avoid specific scientific terms. Use everday analogies to explain complex terms.",
|
||||||
|
Complexity.POPULAR_SCIENCE_LANGUAGE => "Use popular science language, e.g., for people interested in science. The text should be easy to understand, though. Use analogies to explain complex terms.",
|
||||||
|
Complexity.SCIENTIFIC_LANGUAGE_FIELD_EXPERTS => "Use scientific language for experts in the field of the texts subject. Use specific terms for this field.",
|
||||||
|
Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS => $"The reader is an expert in {expertInField}. Change the language so that it is suitable. Explain specific terms, so that the reader within his field can understand the text. You might use analogies to explain complex terms.",
|
||||||
|
|
||||||
|
_ => "Do not change the complexity of the text.",
|
||||||
|
};
|
||||||
|
}
|
22
app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs
Normal file
22
app/MindWork AI Studio/Tools/CommonLanguageExtensions.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
|
public static class CommonLanguageExtensions
|
||||||
|
{
|
||||||
|
public static string Name(this CommonLanguages language) => language switch
|
||||||
|
{
|
||||||
|
CommonLanguages.AS_IS => "Do not change the language",
|
||||||
|
|
||||||
|
CommonLanguages.EN_US => "English (US)",
|
||||||
|
CommonLanguages.EN_GB => "English (UK)",
|
||||||
|
CommonLanguages.ZH_CN => "Chinese (Simplified)",
|
||||||
|
CommonLanguages.HI_IN => "Hindi (India)",
|
||||||
|
CommonLanguages.ES_ES => "Spanish (Spain)",
|
||||||
|
CommonLanguages.FR_FR => "French (France)",
|
||||||
|
CommonLanguages.DE_DE => "German (Germany)",
|
||||||
|
CommonLanguages.DE_AT => "German (Austria)",
|
||||||
|
CommonLanguages.DE_CH => "German (Switzerland)",
|
||||||
|
CommonLanguages.JA_JP => "Japanese (Japan)",
|
||||||
|
|
||||||
|
_ => "Other",
|
||||||
|
};
|
||||||
|
}
|
19
app/MindWork AI Studio/Tools/CommonLanguages.cs
Normal file
19
app/MindWork AI Studio/Tools/CommonLanguages.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
|
public enum CommonLanguages
|
||||||
|
{
|
||||||
|
AS_IS,
|
||||||
|
|
||||||
|
EN_US,
|
||||||
|
EN_GB,
|
||||||
|
ZH_CN,
|
||||||
|
HI_IN,
|
||||||
|
ES_ES,
|
||||||
|
FR_FR,
|
||||||
|
DE_DE,
|
||||||
|
DE_CH,
|
||||||
|
DE_AT,
|
||||||
|
JA_JP,
|
||||||
|
|
||||||
|
OTHER,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user