@page "/settings" @inject ISettingsService SettingsService @inject IThemeService ThemeService @inject IOllamaService OllamaService @inject NavigationManager Navigation @inject IJSRuntime JSRuntime @inject IProjectService ProjectService @T("Einstellungen", "Settings") - Author Buddy

@T("Benutzer", "User")

@T("Modelle", "Models")

@T("Ollama Server", "Ollama Server")

@T("Adresse des Ollama-Servers", "Ollama server address")

@T("Design", "Appearance")

@T("Sprache", "Language")

@T("Lektor-System-Prompt", "Editor system prompt")

@T("Fact-Check-Vorlage", "Fact check template")

@T("Rechtschreibpr\u00fcfungs-Prompt", "Spell check prompt")

@T("Advocatus Diaboli", "Advocatus Diaboli")

@T("Hook-Finder", "Hook finder")

@T("ELI5-Vereinfachung", "ELI5-Simplification")

@if (!string.IsNullOrEmpty(statusMessage)) { @statusMessage }
@code { private string ragModel = "llama3.2"; private string styleModel = "llama3.2"; private string spellingModel = "phi3:mini"; private string selectedTheme = "light"; private string ollamaUrl = "http://localhost:11434"; private string lektorPrompt = string.Empty; private string factCheckTemplate = string.Empty; private string spellingPrompt = string.Empty; private string advocatusDiaboliPrompt = string.Empty; private string hookFinderPrompt = string.Empty; private string eli5Prompt = string.Empty; private string selectedLanguage = "de"; private string newProjectName = string.Empty; private string newUserName = string.Empty; private string statusMessage = string.Empty; private List availableModels = new(); private List users = new(); private int selectedUserId; private string T(string de, string en) => selectedLanguage == "en" ? en : de; protected override async Task OnInitializedAsync() { users = await SettingsService.GetUsersAsync(); var current = await SettingsService.GetCurrentUserAsync(); selectedUserId = current.Id; await LoadUserSettings(); try { var models = await OllamaService.GetLocalModelsAsync(); availableModels = models.ToList(); } catch { availableModels = new(); } } private async Task LoadUserSettings() { ragModel = await SettingsService.GetRagModelAsync() ?? "llama3.2"; styleModel = await SettingsService.GetStyleModelAsync() ?? "llama3.2"; spellingModel = await SettingsService.GetSpellingModelAsync() ?? "phi3:mini"; selectedTheme = await SettingsService.GetThemeAsync() ?? "light"; ollamaUrl = await SettingsService.GetOllamaUrlAsync() ?? "http://localhost:11434"; lektorPrompt = await SettingsService.GetLektorSystemPromptAsync() ?? string.Empty; factCheckTemplate = await SettingsService.GetFactCheckTemplateAsync() ?? string.Empty; spellingPrompt = await SettingsService.GetSpellingPromptAsync() ?? string.Empty; advocatusDiaboliPrompt = await SettingsService.GetAdvocatusDiaboliPromptAsync() ?? string.Empty; hookFinderPrompt = await SettingsService.GetHookFinderPromptAsync() ?? string.Empty; eli5Prompt = await SettingsService.GetEli5PromptAsync() ?? string.Empty; selectedLanguage = await SettingsService.GetLanguageAsync() ?? "de"; } private async Task SwitchUser(ChangeEventArgs e) { var userId = int.Parse(e.Value?.ToString() ?? "0"); await SettingsService.SetCurrentUserAsync(userId); selectedUserId = userId; await LoadUserSettings(); } private async Task AddUser() { if (string.IsNullOrWhiteSpace(newUserName)) return; var user = await SettingsService.CreateUserAsync(newUserName); users.Add(user); newUserName = string.Empty; statusMessage = T($"Benutzer '{user.Name}' erstellt.", $"User '{user.Name}' created."); } private async Task SaveSettings() { await SettingsService.SaveOllamaUrlAsync(ollamaUrl); OllamaService.Reconfigure(ollamaUrl); if (!string.IsNullOrWhiteSpace(ragModel)) { var ok = await OllamaService.TestEmbeddingAsync(ragModel); if (!ok) { statusMessage = selectedLanguage == "en" ? $"Model '{ragModel}' does not support embeddings. RAG model not saved." : $"Modell '{ragModel}' unterstützt keine Embeddings. RAG-Modell nicht gespeichert."; return; } } await SettingsService.SaveRagModelAsync(ragModel); await SettingsService.SaveStyleModelAsync(styleModel); await SettingsService.SaveSpellingModelAsync(spellingModel); await SettingsService.SaveThemeAsync(selectedTheme); await SettingsService.SaveLektorSystemPromptAsync(lektorPrompt); await SettingsService.SaveFactCheckTemplateAsync(factCheckTemplate); await SettingsService.SaveSpellingPromptAsync(spellingPrompt); await SettingsService.SaveAdvocatusDiaboliPromptAsync(advocatusDiaboliPrompt); await SettingsService.SaveHookFinderPromptAsync(hookFinderPrompt); await SettingsService.SaveEli5PromptAsync(eli5Prompt); await SettingsService.SaveLanguageAsync(selectedLanguage); statusMessage = T("Einstellungen gespeichert.", "Settings saved."); await ThemeService.ApplyTheme(selectedTheme); } }