fix(assistant): не обрезать пошаговые решения посреди формулы

Лимит ответа был 420 токенов — длинное решение обрывалось внутри $$…$$,
незакрытый блок показывался сырым LaTeX. Теперь лимит по режиму
(ответ 1200, проверка 900, подсказка 320), а рендер отбрасывает
незакрытый хвост $$ (ставит «…») вместо сырого кода.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-04 21:33:07 +03:00
parent 6e0a00fd8b
commit b9d63b0776
2 changed files with 8 additions and 2 deletions
@@ -405,7 +405,9 @@ async function askModel(q, hits, context, history, role, mode) {
const msgs = [{ role: 'system', content: sys }];
(history || []).forEach(m => { if (m && (m.role === 'user' || m.role === 'assistant') && m.content) msgs.push({ role: m.role, content: String(m.content).slice(0, 1500) }); });
msgs.push({ role: 'user', content: user });
return callLLMFailover(msgs, 420);
// подсказка короткая; ответ/проверка — длиннее, чтобы пошаговое решение с формулами не обрезалось на середине
const cap = mode === 'hint' ? 320 : (mode === 'check' ? 900 : 1200);
return callLLMFailover(msgs, cap);
}
/* ── POST /api/assistant/ask { q, context?, history? } ── «Спроси Квантика» ─
+5 -1
View File
@@ -437,8 +437,12 @@
return html;
}
function renderRich(container, text) {
var src = String(text || '');
// ответ мог оборваться по лимиту токенов посреди $$…$$ — не показываем сырой LaTeX, обрезаем хвост
var dd = src.match(/\$\$/g);
if (dd && dd.length % 2 === 1) { var li = src.lastIndexOf('$$'); src = src.slice(0, li).replace(/[\s\\]+$/, '') + ' …'; }
var math = [];
var protectedText = String(text || '').replace(/(\$\$[\s\S]+?\$\$|\$[^\n$]+?\$)/g, function (m) { math.push(m); return '@@M' + (math.length - 1) + '@@'; });
var protectedText = src.replace(/(\$\$[\s\S]+?\$\$|\$[^\n$]+?\$)/g, function (m) { math.push(m); return '@@M' + (math.length - 1) + '@@'; });
var html = mdToHtml(protectedText).replace(/@@M(\d+)@@/g, function (_, i) { return esc(math[+i] || ''); });
container.innerHTML = html;
ensureKatex().then(function () {