diff --git a/templates/index.html b/templates/index.html index d2c5990..48b78ae 100644 --- a/templates/index.html +++ b/templates/index.html @@ -81,16 +81,23 @@ font-size: 1.2em; } - .toolbar-controls { - display: flex; - gap: 10px; - align-items: center; - } - - .toolbar-controls select, .toolbar-controls button { + .toolbar-controls select, + .toolbar-controls input, + .toolbar-controls button { padding: 5px 10px; border-radius: 4px; border: 1px solid #bdc3c7; + color: #333; /* Dunkle Schrift erzwingen */ + background-color: #fff; /* Weißen Hintergrund erzwingen */ + } + + /* WICHTIG: Den Speichern-Button überschreiben wir wieder, damit er grün mit weißer Schrift bleibt */ + .save-btn { + background-color: #27ae60; + color: white !important; + border: none; + cursor: pointer; + font-weight: bold; } .save-btn { @@ -132,6 +139,11 @@ + + @@ -364,6 +376,9 @@ currentSettings = await res.json(); document.getElementById('ai-provider').value = currentSettings.provider; + // NEU: Ollama URL laden + document.getElementById('ollama-url').value = currentSettings.ollama_url || "http://127.0.0.1:11434/v1"; + updateModelDropdown(true); } catch (e) { console.error("Fehler beim Laden der Einstellungen:", e); @@ -373,21 +388,30 @@ function updateModelDropdown(isInitialLoad = false) { const provider = document.getElementById('ai-provider').value; const modelSelect = document.getElementById('ai-model'); - modelSelect.innerHTML = ''; // Leeren + const ollamaContainer = document.getElementById('ollama-url-container'); // NEU + + // NEU: URL-Feld nur anzeigen, wenn Ollama gewählt ist + if (provider === 'ollama') { + ollamaContainer.style.display = 'flex'; + } else { + ollamaContainer.style.display = 'none'; + } + + modelSelect.innerHTML = ''; // Modelle des gewählten Providers einfügen - modelOptions[provider].forEach(m => { - const opt = document.createElement('option'); - opt.value = m; - opt.textContent = m; - modelSelect.appendChild(opt); - }); + if(modelOptions[provider]) { + modelOptions[provider].forEach(m => { + const opt = document.createElement('option'); + opt.value = m; + opt.textContent = m; + modelSelect.appendChild(opt); + }); + } if (isInitialLoad) { - // Das aktuell gespeicherte Modell setzen const savedModel = currentSettings[`${provider}_model`]; - // Falls das in der .env gespeicherte Modell nicht in unserer Liste ist, fügen wir es hinzu if (savedModel && !modelOptions[provider].includes(savedModel)) { const opt = document.createElement('option'); opt.value = savedModel; @@ -402,6 +426,7 @@ async function saveSettings() { const provider = document.getElementById('ai-provider').value; const model = document.getElementById('ai-model').value; + const ollamaUrl = document.getElementById('ollama-url').value; // NEU const statusEl = document.getElementById('settings-status'); statusEl.textContent = "Speichere..."; @@ -411,15 +436,19 @@ await fetch('/api/settings', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ provider, model }) + body: JSON.stringify({ + provider: provider, + model: model, + ollama_base_url: ollamaUrl // NEU + }) }); statusEl.textContent = "✅ Gespeichert!"; statusEl.style.color = "#2ecc71"; - // Aktualisiere unsere lokalen Daten currentSettings.provider = provider; currentSettings[`${provider}_model`] = model; + currentSettings.ollama_base_url = ollamaUrl; } catch (e) { statusEl.textContent = "❌ Fehler";