Replace default_model with force_model (model lock)

Removes DEFAULT_MODEL in favour of a force_model setting configurable
via the admin UI. When set, every proxy request's model field is
overridden, preventing uncoordinated model switches during lab sessions.
Updates schemas, admin API, all three proxy endpoints, frontend,
init_db, and docs (README, DOCKERHUB, KURZANLEITUNG).
This commit is contained in:
Oliver Hofmann
2026-05-08 08:02:16 +02:00
parent cced65693c
commit 34b108f4df
9 changed files with 41 additions and 34 deletions
+11 -11
View File
@@ -95,8 +95,8 @@ function SettingsSection({ password }) {
const { models, reachable } = res.data;
setOllamaReachable(reachable);
setAvailableModels(models);
if (models.length > 0 && !models.includes(currentModel)) {
setSettings(s => ({ ...s, default_model: models[0] }));
if (models.length > 0 && currentModel && !models.includes(currentModel)) {
setSettings(s => ({ ...s, force_model: models[0] }));
}
} catch {
setOllamaReachable(false);
@@ -115,7 +115,7 @@ function SettingsSection({ password }) {
const s = settingsRes.data;
setSettings(s);
setProxyEndpoint(proxyRes.data.endpoint);
fetchModels(s.ollama_url, s.default_model);
fetchModels(s.ollama_url, s.force_model);
}).catch(() => setError('Einstellungen konnten nicht geladen werden.'));
}, []);
@@ -152,7 +152,7 @@ function SettingsSection({ password }) {
type="url"
value={settings.ollama_url}
onChange={(e) => setSettings({ ...settings, ollama_url: e.target.value })}
onBlur={(e) => fetchModels(e.target.value, settings.default_model)}
onBlur={(e) => fetchModels(e.target.value, settings.force_model)}
placeholder="http://localhost:11434"
required
/>
@@ -162,23 +162,23 @@ function SettingsSection({ password }) {
</div>
</div>
<div className="settings-row">
<label>Standard-Modell</label>
<label>Aktives Modell (Lock)</label>
{modelsLoading ? (
<span className="settings-value">Lade Modelle…</span>
) : availableModels.length > 0 ? (
<select
value={settings.default_model}
onChange={(e) => setSettings({ ...settings, default_model: e.target.value })}
value={settings.force_model || ""}
onChange={(e) => setSettings({ ...settings, force_model: e.target.value || null })}
>
<option value="">— kein Lock —</option>
{availableModels.map(m => <option key={m} value={m}>{m}</option>)}
</select>
) : (
<input
type="text"
value={settings.default_model}
onChange={(e) => setSettings({ ...settings, default_model: e.target.value })}
placeholder="llama3"
required
value={settings.force_model || ""}
onChange={(e) => setSettings({ ...settings, force_model: e.target.value || null })}
placeholder="leer = kein Lock"
/>
)}
</div>