templates/index.html aktualisiert
This commit is contained in:
@@ -81,16 +81,23 @@
|
|||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbar-controls {
|
.toolbar-controls select,
|
||||||
display: flex;
|
.toolbar-controls input,
|
||||||
gap: 10px;
|
.toolbar-controls button {
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toolbar-controls select, .toolbar-controls button {
|
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
border: 1px solid #bdc3c7;
|
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 {
|
.save-btn {
|
||||||
@@ -132,6 +139,11 @@
|
|||||||
<select id="ai-model">
|
<select id="ai-model">
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<span id="ollama-url-container" style="display: none; align-items: center; gap: 5px; margin-left: 10px;">
|
||||||
|
<label for="ollama-url">URL:</label>
|
||||||
|
<input type="text" id="ollama-url" placeholder="http://127.0.0.1:11434/v1" style="width: 200px;">
|
||||||
|
</span>
|
||||||
|
|
||||||
<button class="save-btn" onclick="saveSettings()">Speichern</button>
|
<button class="save-btn" onclick="saveSettings()">Speichern</button>
|
||||||
<span id="settings-status"></span>
|
<span id="settings-status"></span>
|
||||||
</div>
|
</div>
|
||||||
@@ -364,6 +376,9 @@
|
|||||||
currentSettings = await res.json();
|
currentSettings = await res.json();
|
||||||
|
|
||||||
document.getElementById('ai-provider').value = currentSettings.provider;
|
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);
|
updateModelDropdown(true);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Fehler beim Laden der Einstellungen:", e);
|
console.error("Fehler beim Laden der Einstellungen:", e);
|
||||||
@@ -373,21 +388,30 @@
|
|||||||
function updateModelDropdown(isInitialLoad = false) {
|
function updateModelDropdown(isInitialLoad = false) {
|
||||||
const provider = document.getElementById('ai-provider').value;
|
const provider = document.getElementById('ai-provider').value;
|
||||||
const modelSelect = document.getElementById('ai-model');
|
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
|
// Modelle des gewählten Providers einfügen
|
||||||
modelOptions[provider].forEach(m => {
|
if(modelOptions[provider]) {
|
||||||
const opt = document.createElement('option');
|
modelOptions[provider].forEach(m => {
|
||||||
opt.value = m;
|
const opt = document.createElement('option');
|
||||||
opt.textContent = m;
|
opt.value = m;
|
||||||
modelSelect.appendChild(opt);
|
opt.textContent = m;
|
||||||
});
|
modelSelect.appendChild(opt);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (isInitialLoad) {
|
if (isInitialLoad) {
|
||||||
// Das aktuell gespeicherte Modell setzen
|
|
||||||
const savedModel = currentSettings[`${provider}_model`];
|
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)) {
|
if (savedModel && !modelOptions[provider].includes(savedModel)) {
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = savedModel;
|
opt.value = savedModel;
|
||||||
@@ -402,6 +426,7 @@
|
|||||||
async function saveSettings() {
|
async function saveSettings() {
|
||||||
const provider = document.getElementById('ai-provider').value;
|
const provider = document.getElementById('ai-provider').value;
|
||||||
const model = document.getElementById('ai-model').value;
|
const model = document.getElementById('ai-model').value;
|
||||||
|
const ollamaUrl = document.getElementById('ollama-url').value; // NEU
|
||||||
const statusEl = document.getElementById('settings-status');
|
const statusEl = document.getElementById('settings-status');
|
||||||
|
|
||||||
statusEl.textContent = "Speichere...";
|
statusEl.textContent = "Speichere...";
|
||||||
@@ -411,15 +436,19 @@
|
|||||||
await fetch('/api/settings', {
|
await fetch('/api/settings', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
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.textContent = "✅ Gespeichert!";
|
||||||
statusEl.style.color = "#2ecc71";
|
statusEl.style.color = "#2ecc71";
|
||||||
|
|
||||||
// Aktualisiere unsere lokalen Daten
|
|
||||||
currentSettings.provider = provider;
|
currentSettings.provider = provider;
|
||||||
currentSettings[`${provider}_model`] = model;
|
currentSettings[`${provider}_model`] = model;
|
||||||
|
currentSettings.ollama_base_url = ollamaUrl;
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
statusEl.textContent = "❌ Fehler";
|
statusEl.textContent = "❌ Fehler";
|
||||||
|
|||||||
Reference in New Issue
Block a user