@page "/quick-markdown"
@attribute [Authorize(Roles = "Administrator,Blogger")]
@inject IOllamaService OllamaService
@inject OllamaSettings Settings
@inject IJSRuntime JS
@inject IAuthService AuthService
@inject ISettingsService SettingsService
@inject NavigationManager Navigation
@rendermode InteractiveServer
Quick Markdown
Quick Markdown
Erzeugt aus einem Text und einem System-Prompt direkt formatiertes Markdown – ohne Projekt oder Speicherung.
@if (!string.IsNullOrEmpty(_error))
{
@_error
}
@if (!string.IsNullOrEmpty(_modelNotice))
{
@_modelNotice
}
@code {
private string _systemPrompt = string.Empty;
private string _inputText = string.Empty;
private string _output = string.Empty;
private string _error = string.Empty;
private string _modelNotice = string.Empty;
private bool _isBusy;
private double _temperature = 0.3;
protected override async Task OnInitializedAsync()
{
var user = await AuthService.GetCurrentUserAsync();
if (user == null || !user.HasAnyRole(UserRole.Administrator, UserRole.Blogger))
{
Navigation.NavigateTo("/");
return;
}
_systemPrompt = await SettingsService.GetQuickMarkdownPromptAsync()
?? Settings.GetQuickMarkdownDefaultPrompt(Settings.Language);
_temperature = await SettingsService.GetQuickMarkdownTempAsync();
_modelNotice = $"Verwendetes Modell: {Settings.StyleModel} (via {Settings.Backend})";
}
private async Task SaveSettings()
{
await SettingsService.SaveQuickMarkdownPromptAsync(_systemPrompt);
await SettingsService.SaveQuickMarkdownTempAsync(_temperature);
}
private async Task ResetToDefault()
{
_systemPrompt = Settings.GetQuickMarkdownDefaultPrompt(Settings.Language);
_temperature = Settings.QuickMarkdownTemp;
await SaveSettings();
}
private async Task Generate()
{
if (string.IsNullOrWhiteSpace(_inputText)) return;
_isBusy = true;
_error = string.Empty;
_output = string.Empty;
try
{
var result = await OllamaService.Chat(Settings.StyleModel, _inputText, _systemPrompt, _temperature);
_output = result;
}
catch (Exception ex)
{
_error = $"Fehler bei der Generierung: {ex.Message}";
}
finally
{
_isBusy = false;
}
}
private async Task CopyOutput()
{
if (string.IsNullOrEmpty(_output)) return;
await JS.InvokeVoidAsync("navigator.clipboard.writeText", _output);
}
private void ClearOutput()
{
_output = string.Empty;
_error = string.Empty;
}
}