fix(assistant): снятие устаревшего флага failover + чистый sample в тесте

Баннер «провайдеры недоступны» висел из старой записи assistant_failover.
Теперь успешный тест активного провайдера и смена активного снимают флаг,
плюс кнопка «Снять» на баннере (PUT /assistant {dismissFailover}).
Тест провайдера: system-инструкция + 64 токена + fallback на reasoning →
sample не показывает «мысли вслух» reasoning-моделей.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-04 21:06:31 +03:00
parent f748e074fd
commit 78a9eca9c0
3 changed files with 15 additions and 7 deletions
@@ -949,6 +949,7 @@ function saveAssistant(req, res) {
const b = req.body || {};
if (typeof b.rag === 'boolean') set('assistant_rag', b.rag ? '1' : '0');
if (typeof b.examButtons === 'boolean') set('assistant_exam_buttons', b.examButtons ? '1' : '0');
if (b.dismissFailover) { try { db.prepare("DELETE FROM app_settings WHERE key = 'assistant_failover'").run(); } catch (e) {} }
audit(req, 'assistant.config', 'assistant', 'настройки');
res.json({ ok: true });
}
@@ -985,6 +986,7 @@ function deleteProvider(req, res) {
function setActiveProvider(req, res) {
const id = String((req.body && req.body.id) || '');
db.prepare("INSERT OR REPLACE INTO app_settings (key, value) VALUES ('assistant_active', ?)").run(id);
try { db.prepare("DELETE FROM app_settings WHERE key = 'assistant_failover'").run(); } catch (e) {} // смена активного снимает старый флаг
audit(req, 'assistant.active', id, 'активный провайдер');
res.json({ ok: true });
}
@@ -1019,6 +1021,8 @@ async function testAssistant(req, res) {
override.local = _aIsLocal(override.url);
override.on = !!(override.key || override.local);
const r = await a.pingLLM(override);
// Успешный тест активного провайдера снимает устаревший флаг failover
try { const activeId = _aset('assistant_active'); if (r && r.ok && (!b.id || b.id === activeId)) a.clearFailover(); } catch (e) {}
res.json(r);
}