Refactor settings.html to handle Ollama CLI errors and improve model selection
This commit is contained in:
@@ -126,38 +126,36 @@
|
|||||||
close.addEventListener('click', rollback);
|
close.addEventListener('click', rollback);
|
||||||
|
|
||||||
|
|
||||||
const modelDiv = document.getElementById('ollama-model-selectors');
|
const container = document.getElementById('ollama-model-selectors');
|
||||||
// Vorher: deine Standard-Settings holen
|
const res = await window.electronAPI.ollamaList();
|
||||||
|
|
||||||
// 1. Modelle holen
|
if (res.status === 'no-cli') {
|
||||||
const ollamaRes = await window.electronAPI.ollamaList();
|
container.innerHTML = `
|
||||||
if (ollamaRes.error) {
|
<div style="color:red;font-weight:bold;margin:1em 0;">
|
||||||
modelDiv.innerHTML = `
|
!! You need to install Ollama to use intelligent message & README generation !!
|
||||||
<div style="color:red; font-weight:bold; margin:1em 0;">
|
</div>`;
|
||||||
!! You need to install Ollama to use intelligent message & readme generation !!
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. qwen2.5-coder-Modelle filtern
|
// Wenn CLI lief, aber Fehler beim Parsen, oder einfach keine Daten:
|
||||||
const qwenModels = ollamaRes.models
|
const allModels = Array.isArray(res.models) ? res.models : [];
|
||||||
.filter(m => /^qwen2\.5-coder(:[\w\d\-]+)?$/.test(m.name || m.model))
|
// Filter für qwen2.5-coder
|
||||||
.map(m => m.name || m.model);
|
const qwenModels = allModels
|
||||||
|
.map(m => m.name || m.model)
|
||||||
|
.filter(name => /^qwen2\.5-coder(:[\w\d\-.]+)?$/.test(name));
|
||||||
|
|
||||||
// 3. Kein Modell? Pull-Buttons zeigen!
|
|
||||||
if (!qwenModels.length) {
|
if (!qwenModels.length) {
|
||||||
modelDiv.innerHTML = `
|
// Keine passenden Modelle → Pull-Buttons zeigen
|
||||||
|
container.innerHTML = `
|
||||||
<button id="pullCommitModelBtn" style="margin-bottom:8px;">
|
<button id="pullCommitModelBtn" style="margin-bottom:8px;">
|
||||||
ollama pull qwen2.5-coder:7b
|
ollama pull qwen2.5-coder:7b
|
||||||
</button><br>
|
</button><br>
|
||||||
<button id="pullReadmeModelBtn">
|
<button id="pullReadmeModelBtn">
|
||||||
ollama pull qwen2.5-coder:32b
|
ollama pull qwen2.5-coder:32b
|
||||||
</button>
|
</button>`;
|
||||||
`;
|
|
||||||
document.getElementById('pullCommitModelBtn').onclick = async () => {
|
document.getElementById('pullCommitModelBtn').onclick = async () => {
|
||||||
await window.electronAPI.ollamaPull('qwen2.5-coder:7b');
|
await window.electronAPI.ollamaPull('qwen2.5-coder:7b');
|
||||||
location.reload(); // Reload Settings-Dialog
|
location.reload();
|
||||||
};
|
};
|
||||||
document.getElementById('pullReadmeModelBtn').onclick = async () => {
|
document.getElementById('pullReadmeModelBtn').onclick = async () => {
|
||||||
await window.electronAPI.ollamaPull('qwen2.5-coder:32b');
|
await window.electronAPI.ollamaPull('qwen2.5-coder:32b');
|
||||||
@@ -166,36 +164,31 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Dropdowns rendern
|
// Endlich: Dropdowns!
|
||||||
function makeOptions(models, preferred) {
|
const makeOpts = (models, selected) =>
|
||||||
return models.map(m => `<option value="${m}"${m.includes(preferred) ? ' selected' : ''}>${m}</option>`).join('');
|
models.map(m => `<option value="${m}"${m===selected?' selected':''}>${m}</option>`).join('');
|
||||||
}
|
|
||||||
// Defaults wählen
|
// Defaults (oder aus Settings lesen)
|
||||||
const commitDefault = qwenModels.find(m => m.includes('7b')) || qwenModels[0];
|
const commitDefault = qwenModels.find(m => m.includes('7b')) || qwenModels[0];
|
||||||
const readmeDefault = qwenModels.find(m => m.includes('32b')) || qwenModels[0];
|
const readmeDefault = qwenModels.find(m => m.includes('32b')) || qwenModels[0];
|
||||||
|
const currentCommit = await window.settingsAPI.getCommitModel?.() || commitDefault;
|
||||||
|
const currentReadme= await window.settingsAPI.getReadmeModel?.() || readmeDefault;
|
||||||
|
|
||||||
// Werte ggf. aus dem Store holen!
|
container.innerHTML = `
|
||||||
const currentCommitModel = await window.settingsAPI.getCommitModel?.() || commitDefault;
|
<label><strong>Model for commit message generation:</strong></label>
|
||||||
const currentReadmeModel = await window.settingsAPI.getReadmeModel?.() || readmeDefault;
|
|
||||||
|
|
||||||
modelDiv.innerHTML = `
|
|
||||||
<label style="font-weight:bold;">Model for commit message generation:</label>
|
|
||||||
<select id="commitModelSelect">
|
<select id="commitModelSelect">
|
||||||
${makeOptions(qwenModels, currentCommitModel)}
|
${makeOpts(qwenModels, currentCommit)}
|
||||||
</select>
|
</select>
|
||||||
<br>
|
<br><label><strong>Model for README generation:</strong></label>
|
||||||
<label style="font-weight:bold;">Model for README generation:</label>
|
|
||||||
<select id="readmeModelSelect">
|
<select id="readmeModelSelect">
|
||||||
${makeOptions(qwenModels, currentReadmeModel)}
|
${makeOpts(qwenModels, currentReadme)}
|
||||||
</select>
|
</select>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
// Werte speichern bei Auswahl
|
|
||||||
document.getElementById('commitModelSelect').onchange = e =>
|
document.getElementById('commitModelSelect').onchange = e =>
|
||||||
window.settingsAPI.setCommitModel?.(e.target.value);
|
window.settingsAPI.setCommitModel(e.target.value);
|
||||||
document.getElementById('readmeModelSelect').onchange = e =>
|
document.getElementById('readmeModelSelect').onchange = e =>
|
||||||
window.settingsAPI.setReadmeModel?.(e.target.value);
|
window.settingsAPI.setReadmeModel(e.target.value);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user