Prompts überarbeitet und "Änderungswunsch"
This commit is contained in:
@ -6,6 +6,7 @@
|
||||
@using DataAccess.Data
|
||||
@using DataAccess.Models
|
||||
@using KIKunstKirstenKlöckner.Data
|
||||
@using System.Diagnostics
|
||||
|
||||
@inject IConfiguration Config
|
||||
@inject TooltipService TooltipService
|
||||
@ -23,8 +24,9 @@
|
||||
<RadzenStack Orientation="Orientation.Vertical" AlignItems="AlignItems.Center">
|
||||
<h1>Wunschbilder von KI nur für dich</h1>
|
||||
<RadzenText TextStyle="TextStyle.H2">Nenne uns deinen Wunsch:</RadzenText>
|
||||
<RadzenTextBox @bind-Value=@request Placeholder="Dein Wunsch"/>
|
||||
|
||||
<RadzenTextBox @bind-Value=@_userIdea Placeholder="Dein Wunsch"/>
|
||||
|
||||
@* Zusätzliche Optionen *@
|
||||
<RadzenPanel AllowCollapse="true" Style="width: 500px;" Text="Mehr Optionen">
|
||||
<ChildContent>
|
||||
<RadzenCard class="rz-mt-4">
|
||||
@ -56,7 +58,7 @@
|
||||
</ChildContent>
|
||||
</RadzenPanel>
|
||||
|
||||
<RadzenButton Visible=@_buttonVisible Click=@(async ()=> await GenerateImagesAsync(true))>Generate</RadzenButton>
|
||||
<RadzenButton Visible=@_buttonVisible Click=@(async ()=> await GenerateImagesAsync())>Generate</RadzenButton>
|
||||
|
||||
<RadzenText TextStyle="TextStyle.H4">Die Idee, die gemalt wird:</RadzenText>
|
||||
|
||||
@ -70,8 +72,8 @@
|
||||
<RadzenImage Path=@_imageUrl></RadzenImage>
|
||||
|
||||
<RadzenText Visible=@_addonsVisible TextStyle="TextStyle.H2">Verändere hier dein Bild durch Worte:</RadzenText>
|
||||
<RadzenTextBox Visible=@_addonsVisible @bind-Value=@addons Placeholder="z.B. Mehr Farben" />
|
||||
<RadzenButton Visible=@_bothVisible Click=@(async ()=> await GenerateImagesAsync(false))>Generate</RadzenButton>
|
||||
<RadzenTextBox Visible=@_addonsVisible @bind-Value=@_updateRequest Placeholder="z.B. Mehr Farben" />
|
||||
<RadzenButton Visible=@_bothVisible Click=@(async ()=> await UpdateImagesAsync())>Generate</RadzenButton>
|
||||
|
||||
<RadzenCard>
|
||||
<RadzenRow Style="width:24.5em" Gap="0.5rem" RowGap="0.5rem">
|
||||
@ -153,8 +155,8 @@
|
||||
private float _temperature = 0.9f;
|
||||
private int? width = 1024;
|
||||
private int? height = 1024;
|
||||
private string request = "";
|
||||
private string addons = "";
|
||||
private string _userIdea = "";
|
||||
private string _updateRequest = "";
|
||||
private OpenAIAPI _openAiApi;
|
||||
private Conversation? _conversation;
|
||||
|
||||
@ -163,6 +165,8 @@
|
||||
|
||||
private string _imageUrl;
|
||||
|
||||
private WunschInfoModel? _wunschInfo;
|
||||
|
||||
//protected override async Task OnInitializedAsync()
|
||||
//{
|
||||
// _basePrompt = await File.ReadAllTextAsync($"{Directory.GetCurrentDirectory()}{@"\wwwroot\prompt.txt"}");
|
||||
@ -217,17 +221,15 @@
|
||||
_conversation = _openAiApi.Chat.CreateConversation(chatRequest);
|
||||
|
||||
// Wunsch an GPT senden und Bild Idee anfordern
|
||||
_conversation.AppendUserInput(ideaBasePrompt + " " + request);
|
||||
_conversation.AppendUserInput(ideaBasePrompt + " " + _userIdea);
|
||||
_imageIdea = await _conversation.GetResponseFromChatbotAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fordert für mehrere Bilder Bild-Prompts an und generiert die dazugehörigen Bilder.
|
||||
/// </summary>
|
||||
private async Task RequestImagesAsync(WunschInfoModel wunschInfo)
|
||||
private async Task RequestImagesAsync(WunschInfoModel wunschInfo, string requestImagePrompt)
|
||||
{
|
||||
string requestImagePrompt = await File.ReadAllTextAsync($"{Directory.GetCurrentDirectory()}{@"/wwwroot/image_prompt.txt"}");
|
||||
|
||||
// Nachricht mit Bildpromt anfrage senden
|
||||
_conversation!.AppendUserInput(requestImagePrompt);
|
||||
|
||||
@ -236,7 +238,7 @@
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
imagePromts[i] = RequestPromptAndGenerateImageAsync(i, wunschInfo);
|
||||
imagePromts[i] = RequestImagePromptAndGenerateImageAsync(i, wunschInfo);
|
||||
}
|
||||
|
||||
await Task.WhenAll(imagePromts);
|
||||
@ -247,7 +249,7 @@
|
||||
/// </summary>
|
||||
/// <param name="index">Der Index des Bildes (für UI zeug)</param>
|
||||
/// <param name="wunschInfo">Der Wunsch für den ein Bild erzeugt wird.</param>
|
||||
private async Task RequestPromptAndGenerateImageAsync(int index, WunschInfoModel wunschInfo)
|
||||
private async Task RequestImagePromptAndGenerateImageAsync(int index, WunschInfoModel wunschInfo)
|
||||
{
|
||||
// Bild Prompt von ChatGPT anfordern
|
||||
string imagePrompt = await _conversation!.GetResponseFromChatbotAsync();
|
||||
@ -310,56 +312,35 @@
|
||||
/// <summary>
|
||||
/// Generiert Bilder oder aktualisiert sie mit dem neuen Prompt.
|
||||
/// </summary>
|
||||
/// <param name="generateNewImage">Wenn <see langword="true"/>, werden neue Bilder generiert; sonst wird die vorhandene Idee bearbeitet.</param>
|
||||
private async Task GenerateImagesAsync(bool generateNewImage)
|
||||
private async Task GenerateImagesAsync()
|
||||
{
|
||||
// Der Dialog blokiert so lange, wie der er offen ist, deshalb dürfen wir hier nicht warten, da wir sonst nie mit der Arbeit anfangen...
|
||||
//Task busyDialog = ShowBusyDialog();
|
||||
_progressVisible = true;
|
||||
_buttonVisible = false;
|
||||
|
||||
if (_conversation == null || generateNewImage)
|
||||
{
|
||||
ClearOldGeneration();
|
||||
ClearOldGeneration();
|
||||
|
||||
amountOfAddons = maxAddons;
|
||||
_addonsVisible = false;
|
||||
_bothVisible = _buttonVisible && _addonsVisible;
|
||||
await UpdateBusyMessage("Kirstens Assistent zerbricht sich über deine Idee den Kopf...");
|
||||
amountOfAddons = maxAddons;
|
||||
_addonsVisible = false;
|
||||
_bothVisible = _buttonVisible && _addonsVisible;
|
||||
await UpdateBusyMessage("Kirstens Assistent zerbricht sich über deine Idee den Kopf...");
|
||||
|
||||
await RequestImageIdeaAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotImplementedException("Verändern von Idees ist nicht implementiert");
|
||||
// if (amountOfAddons > 0)
|
||||
// {
|
||||
// amountOfAddons--;
|
||||
// _bothVisible = _buttonVisible && _addonsVisible;
|
||||
// await UpdateBusyMessage("Kirstens Assistent passt das Bild an deine Wünsche an...");
|
||||
// string addonsPrompt1 = "Erstelle einen neuen Prompt auf englisch mit den gleichen Restriktionen auf Basis des Alten mit folgender Anpassung: ";
|
||||
// string addonsPrompt2 = ". Denke daran nur den Prompt zu generieren und noch keine Beschreibung oder ähnliches.";
|
||||
|
||||
// _conversation.AppendUserInput(addonsPrompt1 + addons + addonsPrompt2);
|
||||
// }
|
||||
}
|
||||
await RequestImageIdeaAsync();
|
||||
|
||||
await UpdateBusyMessage("Kirstens Assistent hat eine Idee! Er wird sie nun malen...");
|
||||
|
||||
WunschInfoModel wunschInfo = new()
|
||||
_wunschInfo = new()
|
||||
{
|
||||
BildBeschreibung = _imageIdea,
|
||||
BildPrompt = "Individuelle Bild Prompts",
|
||||
Datum = DateTime.Now,
|
||||
GPTModel = _conversation.Model,
|
||||
Wunsch = request,
|
||||
// TODO: Wenn wir Wünsche überarbeiten können wir hier diesen hier referenzieren
|
||||
GPTModel = _conversation!.Model,
|
||||
Wunsch = _userIdea,
|
||||
VorherigerWunsch = null
|
||||
};
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
await WunschInfoData.AddWunschInfoAsync(wunschInfo);
|
||||
await WunschInfoData.AddWunschInfoAsync(_wunschInfo);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@ -371,7 +352,9 @@
|
||||
return;
|
||||
}
|
||||
|
||||
await RequestImagesAsync(wunschInfo);
|
||||
string requestImagePrompt = await File.ReadAllTextAsync($"{Directory.GetCurrentDirectory()}{@"/wwwroot/image_prompt.txt"}");
|
||||
|
||||
await RequestImagesAsync(_wunschInfo, requestImagePrompt);
|
||||
|
||||
_progressVisible = false;
|
||||
_buttonVisible = true;
|
||||
@ -387,4 +370,37 @@
|
||||
_bothVisible = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task UpdateImagesAsync()
|
||||
{
|
||||
Debug.Assert(_conversation != null);
|
||||
|
||||
string updatePrompt = $"Gebe nun einen neuen Prompt unter berücksichtigung vorheriger Anweisungen und passe ihn folgender Maßen an: {_updateRequest}";
|
||||
|
||||
_wunschInfo = new()
|
||||
{
|
||||
BildBeschreibung = _updateRequest,
|
||||
BildPrompt = "Individuelle Bild Prompts",
|
||||
Datum = DateTime.Now,
|
||||
GPTModel = _conversation.Model,
|
||||
Wunsch = _userIdea,
|
||||
VorherigerWunsch = _wunschInfo!.Id
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
await WunschInfoData.AddWunschInfoAsync(_wunschInfo);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
NotificationService.Notify(new NotificationMessage()
|
||||
{
|
||||
Summary = "Es ist ein Fehler aufgetreten, bitte versuche es erneut."
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
await RequestImagesAsync(_wunschInfo, updatePrompt);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user