feat(assistant): не отвечает «какая ты модель» + тумблер кнопок на экзамене

- Идентичность: вопросы про модель/нейросеть/провайдера/системный промпт
  отбиваются шаблонно (META_RE, без вызова LLM) + запрет в системном промпте.
- Кнопки «Подсказка»/«Спросить Квантика» на карточках экзамена скрыты по
  умолчанию; включаются тумблером в админке (assistant_exam_buttons →
  examButtons в /context → класс html.asst-exam-on открывает кнопки).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-04 19:46:38 +03:00
parent 4224a22092
commit 3ecf488e83
5 changed files with 21 additions and 4 deletions
+3 -1
View File
@@ -908,7 +908,8 @@ function getAssistant(_req, res) {
} catch (e) {}
res.json({
url, model, hasKey, keyFromEnv: !dbKey && !!process.env.ASSISTANT_LLM_KEY, active: !!(hasKey || local),
rag: _aset('assistant_rag') !== '0', chunks, usage, usage30, feedback, presets: ASSISTANT_PRESETS,
rag: _aset('assistant_rag') !== '0', examButtons: _aset('assistant_exam_buttons') === '1',
chunks, usage, usage30, feedback, presets: ASSISTANT_PRESETS,
});
}
@@ -919,6 +920,7 @@ function saveAssistant(req, res) {
if (typeof b.url === 'string') set('assistant_llm_url', b.url.trim().slice(0, 300));
if (typeof b.model === 'string') set('assistant_llm_model', b.model.trim().slice(0, 120));
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.clearKey) del('assistant_llm_key');
else if (typeof b.key === 'string' && b.key.trim()) set('assistant_llm_key', b.key.trim().slice(0, 400));
audit(req, 'assistant.config', 'assistant', b.clearKey ? 'ключ очищен' : 'обновлено');