Skip to content

Commit 4ea461c

Browse files
authored
fix(ui): correctly map watchdog fields (#9022)
Fixes: #9018 Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
1 parent 042a9b8 commit 4ea461c

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

core/http/react-ui/src/pages/Settings.jsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ export default function Settings() {
140140
if (loading) return <div className="page" style={{ display: 'flex', justifyContent: 'center', padding: 'var(--spacing-xl)' }}><LoadingSpinner size="lg" /></div>
141141
if (!settings) return <div className="page"><div className="empty-state"><p className="empty-state-text">Settings not available</p></div></div>
142142

143-
const watchdogEnabled = settings.watchdog_idle || settings.watchdog_busy
143+
const watchdogEnabled = settings.watchdog_idle_enabled || settings.watchdog_busy_enabled
144144

145145
return (
146146
<div className="page" style={{ maxWidth: 1000, padding: 0 }}>
@@ -205,31 +205,31 @@ export default function Settings() {
205205
</h3>
206206
<div className="card">
207207
<SettingRow label="Enable Watchdog" description="Automatically monitor and manage backend processes">
208-
<Toggle checked={settings.watchdog_idle || settings.watchdog_busy} onChange={(v) => { update('watchdog_idle', v); update('watchdog_busy', v) }} />
208+
<Toggle checked={settings.watchdog_idle_enabled || settings.watchdog_busy_enabled} onChange={(v) => { update('watchdog_idle_enabled', v); update('watchdog_busy_enabled', v) }} />
209209
</SettingRow>
210210
<SettingRow label="Enable Idle Check" description="Automatically stop backends that have been idle too long">
211-
<Toggle checked={settings.watchdog_idle} onChange={(v) => update('watchdog_idle', v)} disabled={!watchdogEnabled} />
211+
<Toggle checked={settings.watchdog_idle_enabled} onChange={(v) => update('watchdog_idle_enabled', v)} disabled={!watchdogEnabled} />
212212
</SettingRow>
213213
<SettingRow label="Idle Timeout" description="Time before an idle backend is stopped (e.g. 15m, 1h)">
214-
<input className="input" style={{ width: 120 }} value={settings.watchdog_idle_timeout || ''} onChange={(e) => update('watchdog_idle_timeout', e.target.value)} placeholder="15m" disabled={!settings.watchdog_idle} />
214+
<input className="input" style={{ width: 120 }} value={settings.watchdog_idle_timeout || ''} onChange={(e) => update('watchdog_idle_timeout', e.target.value)} placeholder="15m" disabled={!settings.watchdog_idle_enabled} />
215215
</SettingRow>
216216
<SettingRow label="Enable Busy Check" description="Stop stuck/busy processes that exceed timeout">
217-
<Toggle checked={settings.watchdog_busy} onChange={(v) => update('watchdog_busy', v)} disabled={!watchdogEnabled} />
217+
<Toggle checked={settings.watchdog_busy_enabled} onChange={(v) => update('watchdog_busy_enabled', v)} disabled={!watchdogEnabled} />
218218
</SettingRow>
219219
<SettingRow label="Busy Timeout" description="Time before a busy backend is stopped (e.g. 5m)">
220-
<input className="input" style={{ width: 120 }} value={settings.watchdog_busy_timeout || ''} onChange={(e) => update('watchdog_busy_timeout', e.target.value)} placeholder="5m" disabled={!settings.watchdog_busy} />
220+
<input className="input" style={{ width: 120 }} value={settings.watchdog_busy_timeout || ''} onChange={(e) => update('watchdog_busy_timeout', e.target.value)} placeholder="5m" disabled={!settings.watchdog_busy_enabled} />
221221
</SettingRow>
222222
<SettingRow label="Check Interval" description="How often the watchdog checks backends (e.g. 2s)">
223-
<input className="input" style={{ width: 120 }} value={settings.watchdog_check_interval || ''} onChange={(e) => update('watchdog_check_interval', e.target.value)} placeholder="2s" />
223+
<input className="input" style={{ width: 120 }} value={settings.watchdog_interval || ''} onChange={(e) => update('watchdog_interval', e.target.value)} placeholder="2s" />
224224
</SettingRow>
225225
<SettingRow label="Force Eviction When Busy" description="Allow model eviction even during active API calls">
226-
<Toggle checked={settings.force_eviction} onChange={(v) => update('force_eviction', v)} />
226+
<Toggle checked={settings.force_eviction_when_busy} onChange={(v) => update('force_eviction_when_busy', v)} />
227227
</SettingRow>
228228
<SettingRow label="LRU Eviction Max Retries" description="Maximum retries waiting for busy models before eviction">
229-
<input className="input" type="number" style={{ width: 120 }} value={settings.lru_retries ?? ''} onChange={(e) => update('lru_retries', parseInt(e.target.value) || 0)} placeholder="30" />
229+
<input className="input" type="number" style={{ width: 120 }} value={settings.lru_eviction_max_retries ?? ''} onChange={(e) => update('lru_eviction_max_retries', parseInt(e.target.value) || 0)} placeholder="30" />
230230
</SettingRow>
231231
<SettingRow label="LRU Eviction Retry Interval" description="Wait between eviction retries (e.g. 1s)">
232-
<input className="input" style={{ width: 120 }} value={settings.lru_retry_interval || ''} onChange={(e) => update('lru_retry_interval', e.target.value)} placeholder="1s" />
232+
<input className="input" style={{ width: 120 }} value={settings.lru_eviction_retry_interval || ''} onChange={(e) => update('lru_eviction_retry_interval', e.target.value)} placeholder="1s" />
233233
</SettingRow>
234234
</div>
235235
</div>
@@ -282,13 +282,13 @@ export default function Settings() {
282282
</div>
283283
)}
284284
<SettingRow label="Enable Memory Reclaimer" description="Evict backends when memory usage exceeds threshold">
285-
<Toggle checked={settings.memory_reclaimer} onChange={(v) => update('memory_reclaimer', v)} />
285+
<Toggle checked={settings.memory_reclaimer_enabled} onChange={(v) => update('memory_reclaimer_enabled', v)} />
286286
</SettingRow>
287287
<SettingRow label="Memory Threshold (%)" description="Eviction triggers when usage exceeds this percentage">
288288
<div style={{ display: 'flex', alignItems: 'center', gap: 'var(--spacing-sm)' }}>
289-
<input type="range" min="50" max="100" value={settings.memory_threshold || 80} onChange={(e) => update('memory_threshold', parseInt(e.target.value))} disabled={!settings.memory_reclaimer} style={{ width: 120 }} />
290-
<span style={{ fontSize: '0.875rem', fontWeight: 600, minWidth: 40, textAlign: 'right', color: percentColor(settings.memory_threshold || 80) }}>
291-
{settings.memory_threshold || 80}%
289+
<input type="range" min="50" max="100" value={Math.round((settings.memory_reclaimer_threshold || 0.8) * 100)} onChange={(e) => update('memory_reclaimer_threshold', parseInt(e.target.value) / 100)} disabled={!settings.memory_reclaimer_enabled} style={{ width: 120 }} />
290+
<span style={{ fontSize: '0.875rem', fontWeight: 600, minWidth: 40, textAlign: 'right', color: percentColor(Math.round((settings.memory_reclaimer_threshold || 0.8) * 100)) }}>
291+
{Math.round((settings.memory_reclaimer_threshold || 0.8) * 100)}%
292292
</span>
293293
</div>
294294
</SettingRow>

0 commit comments

Comments
 (0)