fix(admin): не блокировать сохранение настроек недоступным уровнем AI
Валидация ai_level срабатывала на любой PUT /admin/settings, включая случаи, когда фронт отправлял уже сохранённый (не изменённый) уровень — на слабом железе это намертво блокировало правку любых других настроек. Бэкенд теперь сравнивает patch.ai_level с текущим значением и проверяет доступность только при фактической смене уровня; фронт дополнительно отправляет в PUT только реально изменённые поля.
This commit is contained in:
@@ -237,7 +237,20 @@ class InstanceSettingsService:
|
||||
rows = await self._load_rows()
|
||||
cfg = _build_config(rows)
|
||||
|
||||
if patch.ai_level is not None:
|
||||
if patch.ai_level is not None and patch.ai_level != cfg.ai_level:
|
||||
# Валидация только при фактической смене уровня (сравнение с уже
|
||||
# сохранённым cfg.ai_level) — иначе фронт, отправляющий текущий
|
||||
# ai_level вместе с любой другой правкой (см. `AdminSettingsTab`),
|
||||
# блокировал бы сохранение несвязанных настроек на слабом железе,
|
||||
# где текущий (давно и легитимно сохранённый) уровень недоступен
|
||||
# по факту заново переоценённых требований (RAM/модели).
|
||||
#
|
||||
# Не ослабляем проверку и при отключённых transcriber.enabled/
|
||||
# summarizer.enabled (когда уровень AI сейчас ни на что не
|
||||
# влияет): если проверять по факту переключения — это осознанное
|
||||
# намерение администратора сменить уровень, и молчаливое
|
||||
# сохранение недоступного значения подставит администратора при
|
||||
# последующем включении AI неработающей конфигурацией.
|
||||
statuses = {status.level: status for status in detect_ai_levels(cfg)}
|
||||
if not statuses[patch.ai_level].available:
|
||||
raise InvalidAiLevelError(
|
||||
|
||||
Reference in New Issue
Block a user