Prompt anpassung und addon option hinzugefügt

This commit is contained in:
klappstuhl24 2023-08-04 14:42:03 +02:00
parent 70da97e23b
commit a44b6ea5a8
2 changed files with 61 additions and 33 deletions

View File

@ -48,7 +48,7 @@
</ChildContent>
</RadzenPanel>
<RadzenButton Visible=@_buttonVisible Click=@DoStuff>Generate</RadzenButton>
<RadzenButton Visible=@_buttonVisible Click=@(async ()=> await DoStuff(true))>Generate</RadzenButton>
<RadzenPanel AllowCollapse="true" Style="width: 500px;" Text="Zeige Prompt">
<ChildContent>
@ -71,12 +71,20 @@
<RadzenImage Path=@_imageUrl></RadzenImage>
<RadzenText Visible=@_addonsVisible TextStyle="TextStyle.H4">Verändere hier dein Bild durch Worte:</RadzenText>
<RadzenTextBox Visible=@_addonsVisible @bind-Value=@addons Placeholder="Mehr Farben" />
<RadzenButton Visible=@_bothVisible Click=@(async ()=> await DoStuff(false))>Generate</RadzenButton>
</RadzenStack>
@code {
private int maxAddons = 2;
private int amountOfAddons = 0; // wird später geändert
private string _imageDescriptionPrompt = "Zusätzlich zu dem Promt erkläre kurz auf deutsch, warum du dich für diese Umsetzung des Titels entschieden hast und gib zusätzlich eine Interpretation des Bildes an. Beginne diesen Teil immer mit \"Beschreibung: \". Zuletzt Beschreibe das Bild und die verbundenen Emotionen mit drei Worten und beginne den Teil mit \"Keywords: \".";
private bool _progressVisible = false;
private bool _buttonVisible = true;
private bool _addonsVisible = false;
private bool _bothVisible = false;
public string BusyMessage { get; set; } = "Initial Message";
@ -119,7 +127,8 @@
Ich glaube, eigentlich bedeutet es eher, wie <em>deterministisch</em> die Ausgabe ist.<br />
Bei 0.0 kommt immer fast die selbe Antwort. Bei zu hohen Werten kommt nur noch Schwachsinn.<br />
OpenAI empfielt einen Wert von ca. 0.9 für kreative Anwendungen.
</div>,
</div>
,
new() { Position = TooltipPosition.Bottom, Duration = null});
private string _imagePrompt = "\"Painting of a soccer match with the Hamburger SV team scoring multiple goals, vibrant colors and dynamic brushstrokes.\" Watercolor + ink on paper, Pen drawing, wet-on-wet technique, dry-on-dry technique, dabbing technique.";
@ -127,6 +136,9 @@
private float temperature = 0.9f;
private string request = "";
private string addons = "";
private OpenAIAPI api = new OpenAIAPI("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");
private Conversation converse;
private string _basePrompt;
@ -177,44 +189,51 @@
_imageUrl = await JSRuntime.InvokeAsync<string>("DoSexyStuffBridge", _imagePrompt);
}
private async Task DoStuff()
private async Task DoStuff(bool newPic)
{
// 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 (converse == null || newPic)
{
amountOfAddons = maxAddons;
_addonsVisible = false;
_bothVisible = _buttonVisible && _addonsVisible;
await UpdateBusyMessage("Kirstens Assistent zerbricht sich über deine Idee den Kopf...");
_basePrompt = await File.ReadAllTextAsync($"{Directory.GetCurrentDirectory()}{@"/wwwroot/prompt.txt"}");
OpenAIAPI api = new OpenAIAPI("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");
ChatRequest chatRequest = new ChatRequest
{
Temperature = temperature,
Model = Model.ChatGPTTurbo,
};
Conversation converse = api.Chat.CreateConversation(chatRequest);
converse = api.Chat.CreateConversation(chatRequest);
converse.AppendUserInput(_basePrompt + " " + request);
string response = await converse.GetResponseFromChatbotAsync();
// Der Propt sollte dafür sorgen, dass ChatGPT einen Absatz zwischen Bild-Promt und der Erklärung macht.
int lineBreak = response.IndexOf('\n');
if (lineBreak == -1)
}
else
{
// TODO: Error
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.";
converse.AppendUserInput(addonsPrompt1 + addons + addonsPrompt2);
}
}
_imagePrompt = response.Substring(0, lineBreak);
_imageDescription = response.Substring(lineBreak);
_imagePrompt = await converse.GetResponseFromChatbotAsync();
_imagePrompt += " Watercolor + ink on paper, Pen drawing, wet-on-wet technique, dry-on-dry technique, dabbing technique.";
converse.AppendUserInput(_imageDescriptionPrompt);
_imageDescription = await converse.GetResponseFromChatbotAsync();
await UpdateBusyMessage("Kirstens Assistent hat eine Idee! Er wird sie nun malen...");
Task makeImagesTask = GenerateImage();
//CancellationTokenSource cancelFunnyMessages = new CancellationTokenSource();
@ -230,6 +249,17 @@
_progressVisible = false;
_buttonVisible = true;
if (amountOfAddons > 0)
{
_addonsVisible = true;
_bothVisible = _buttonVisible && _addonsVisible;
await InvokeAsync(StateHasChanged);
}
else
{
_addonsVisible = false;
_bothVisible = false;
}
}
}

View File

@ -116,8 +116,6 @@ Hier findest du Beispiele, wie der Promt aussehen soll:
“Painting of a female botanist surrounded by exotic plants in a greenhouse.”
“Painting of an ancient castle at night, with a full moon, gargoyles, and shadows.”
Bitte nutze für den Prompt maximal 20 Wörter.
Füge hinten an den Promt immer " Watercolor + ink on paper, Pen drawing, wet-on-wet technique, dry-on-dry technique, dabbing technique" an.
Zusätzlich zu dem Promt erkläre kurz auf deutsch danach, warum du dich für diese Umsetzung des Titels entschieden hast.
Bitte nutze für den Prompt maximal 20 Wörter und achte darauf, dass der Prompt auf englisch ist.
Den Titel für den zu erstellenden Promt ist: