Merge branch 'Datenbank'

This commit is contained in:
Simon Lübeß
2023-10-10 20:20:02 +02:00
26 changed files with 506 additions and 128 deletions

View File

@ -4,11 +4,16 @@
@using OpenAI_API.Chat
@using OpenAI_API.Models
@using System.Diagnostics
@using DataAccess.Data
@using DataAccess.Models
@inject IConfiguration Config
@inject TooltipService TooltipService
@inject DialogService DialogService
@inject BildInfoData BildInfoData;
@inject WunschInfoData WunschInfoData;
<PageTitle>AiArt</PageTitle>
<section class="about_section layout_padding" style="background-image: url('images/5KeineAngstvorFehlern2014.jpeg'); background-size: cover; background-repeat: no-repeat; background-blend-mode:lighten">
@ -244,7 +249,7 @@
private string _inferenceApiKey = "";
private string _openAiApiKey = "";
protected override Task OnInitializedAsync()
protected override async Task OnInitializedAsync()
{
_inferenceApiKey = Config.GetValue<string>("API:HF_Inference");
_openAiApiKey = Config.GetValue<string>("API:OpenAI");
@ -258,74 +263,37 @@
_client.DefaultRequestHeaders.Clear();
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {_inferenceApiKey}");
return base.OnInitializedAsync();
// BildInfoModel bildInfo = new()
// {
// BildBeschreibung = "Test",
// BildPrompt = "Tost",
// Dateiname = "Task",
// Datum = DateTime.Now,
// GPTModel = "Geht dich nichts an",
// ImageModel = "Jup",
// Wunsch = request
// };
// try
// {
// //await BildInfoData.AddBildInfo(bildInfo);
// }
// catch (Exception e)
// {
// Console.WriteLine(e);
// throw;
// }
await base.OnInitializedAsync();
}
/// <summary>
/// Geneiert das Bild für den aktuellen <see cref="_imagePrompt"/>
/// </summary>
public async Task GenerateImageAsync()
{
var postData = new
{
inputs = _imagePrompt
};
JsonContent content = JsonContent.Create(postData);
async Task FailedToDrawImage()
{
bool? retry = await DialogService.Confirm("Leider konnte das Bild nicht gemalt werden. Möchtest du es noch eimal versuchen?", "Ups, ein Fehler ist aufgetreten...",
new ConfirmOptions { OkButtonText = "Ja", CancelButtonText = "Nein" });
if (retry == true)
await GenerateImageAsync();
}
try
{
var inferenceModelUrl = "https://api-inference.huggingface.co/models/Nacken/kkkk-sdxl-5000";
var response = await _client.PostAsync(inferenceModelUrl, content);
if (response?.IsSuccessStatusCode == true)
{
await using Stream imageStream = await response.Content.ReadAsStreamAsync();
using Image image = await Image.LoadAsync(imageStream);
string imgUrl = $"generated_images/{DateTime.Now:dd_MM_yyyy_hh_mm_s}.jpg";
string mapPath = $"./wwwroot/{imgUrl}";
await image.SaveAsJpegAsync(mapPath);
_imageUrl = imgUrl;
}
else
{
Console.WriteLine($"Image conversion failed: {response}");
if (Debugger.IsAttached)
Debugger.Break();
await FailedToDrawImage();
}
}
catch (Exception exception)
{
Console.WriteLine($"Image request failed: {exception}");
if (Debugger.IsAttached)
Debugger.Break();
await FailedToDrawImage();
}
}
/// <summary>
/// Geneiert das Bild für den aktuellen <see cref="_imagePrompt"/>
/// </summary>
public async Task<string?> GenerateImageAsync(string prompt, bool isRetry = false)
public async Task<string?> GenerateImageAsync(string prompt, WunschInfoModel wunschInfo, bool isRetry = false)
{
var postData = new
{
@ -354,7 +322,7 @@
if (retry == true)
{
return await GenerateImageAsync(prompt, true);
return await GenerateImageAsync(prompt, wunschInfo, true);
}
return null;
@ -362,7 +330,9 @@
try
{
var inferenceModelUrl = "https://api-inference.huggingface.co/models/Nacken/kkkk-sdxl-5000";
const string modelName = "Nacken/kkkk-sdxl-5000";
var inferenceModelUrl = $"https://api-inference.huggingface.co/models/{modelName}";
var response = await _client.PostAsync(inferenceModelUrl, content);
@ -372,16 +342,25 @@
using Image image = await Image.LoadAsync(imageStream);
string imgUrl = $"generated_images/{DateTime.Now:dd_MM_yyyy_hh_mm_s_fffffff}.jpg";
DateTime imageDate = DateTime.Now;
BildInfoModel bildInfo = new()
{
Dateiname = "PlaceHolder",
Datum = imageDate,
ImageModel = modelName,
WunschId = wunschInfo.Id
};
await BildInfoData.AddBildInfoAsync(bildInfo);
string imgUrl = $"generated_images/Image_{bildInfo.Id}.jpg";
string mapPath = $"./wwwroot/{imgUrl}";
await image.SaveAsJpegAsync(mapPath);
// Hier speichern wir die Daten in die 'info_texts.txt'-Datei
string infoTextsPath = Path.Combine(_environment.WebRootPath, "generated_images", "info_texts.txt");
string desc = _imageDescription.Replace("\r\n", "").Replace("\n", "").Replace("\r", "");
string newLine = $"{imgUrl}: {request}, {desc}\n";
await File.AppendAllTextAsync(infoTextsPath, newLine);
bildInfo.Dateiname = imgUrl;
await BildInfoData.UpdateBildInfoDateinameAsync(bildInfo);
return imgUrl;
}
@ -463,11 +442,23 @@
_imageDescription = await converse.GetResponseFromChatbotAsync();
await UpdateBusyMessage("Kirstens Assistent hat eine Idee! Er wird sie nun malen...");
WunschInfoModel wunschInfo = new()
{
BildBeschreibung = _imageDescription,
BildPrompt = _imagePrompt,
Datum = DateTime.Now,
GPTModel = converse.Model,
Wunsch = request
};
// TODO: Try
await WunschInfoData.AddWunschInfoAsync(wunschInfo);
// Vier Bilder generieren
for (int i = 0; i < 4; i++)
{
_imageUrls[i] = await GenerateImageAsync(_imagePrompt);
_imageUrls[i] = await GenerateImageAsync(_imagePrompt, wunschInfo);
_imageStates[i] = ImageState.FadeIn;
await InvokeAsync(StateHasChanged);
}