diff --git a/templates/index.html b/templates/index.html index d7de7a9..df0ee9f 100644 --- a/templates/index.html +++ b/templates/index.html @@ -272,41 +272,51 @@ const provider = providerSelect.value; - // Sichtbarkeit umschalten + // URL-Feld nur bei Ollama einblenden if (provider === "ollama") { urlContainer.style.display = "flex"; - - // AUTOMATIK: Modelle von Ollama abrufen - const baseUrl = ollamaUrlInput.value.replace(/\/v1\/?$/, ''); // Entfernt /v1 für den API-Check - if (baseUrl) { - try { - const response = await fetch(`${baseUrl}/api/tags`); - const data = await response.json(); - - modelSelect.innerHTML = ''; - data.models.forEach(m => { - const opt = document.createElement('option'); - opt.value = m.name; // Nimmt den exakten Namen inkl. Tag (z.B. gemma3:4b) - opt.textContent = m.name; - modelSelect.appendChild(opt); - }); - console.log("Ollama Modelle geladen:", data.models); - } catch (e) { - console.error("Konnte Ollama Modelle nicht laden:", e); - // Fallback auf die statische Liste, falls der Server offline ist - fillStaticModels(provider, modelSelect); - } - } } else { urlContainer.style.display = "none"; + } + + // Lade-Indikator setzen, damit du siehst, dass etwas passiert + modelSelect.innerHTML = ''; + + try { + // Wir fragen jetzt DEIN Backend, nicht die Anbieter direkt! + // Wir schicken die Provider-Wahl und (falls Ollama) die URL mit. + const targetUrl = (provider === "ollama") ? ollamaUrlInput.value : ""; + + const response = await fetch(`/api/models?provider=${provider}&url=${encodeURIComponent(targetUrl)}`); + + if (!response.ok) throw new Error("Backend antwortet nicht korrekt"); + + const data = await response.json(); + + modelSelect.innerHTML = ''; // Lade-Text entfernen + + // Wenn das Backend Modelle liefert, füllen wir das Dropdown + if (data.models && data.models.length > 0) { + data.models.forEach(m => { + const opt = document.createElement('option'); + opt.value = m; + opt.textContent = m; + modelSelect.appendChild(opt); + }); + } else { + // Fallback, falls die Liste leer ist + fillStaticModels(provider, modelSelect); + } + } catch (e) { + console.error("Konnte Modelle nicht laden, nutze Standard-Liste:", e); fillStaticModels(provider, modelSelect); } - // Gespeicherten Wert setzen (nur beim ersten Laden) + // Gespeichertes Modell wiederherstellen (beim Neuladen der Seite) if (isInitialLoad && currentSettings) { const savedModel = currentSettings[`${provider}_model`]; if (savedModel) { - // Falls das Modell noch nicht im Dropdown ist (weil es neu geladen wurde), hinzufügen + // Falls das gespeicherte Modell nicht in der Liste ist, fügen wir es an if (!Array.from(modelSelect.options).some(opt => opt.value === savedModel)) { const opt = document.createElement('option'); opt.value = savedModel;