fix(assistant): не обрезать пошаговые решения посреди формулы
Лимит ответа был 420 токенов — длинное решение обрывалось внутри $$…$$, незакрытый блок показывался сырым LaTeX. Теперь лимит по режиму (ответ 1200, проверка 900, подсказка 320), а рендер отбрасывает незакрытый хвост $$ (ставит «…») вместо сырого кода. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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? } ── «Спроси Квантика» ─
|
||||
|
||||
@@ -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 () {
|
||||
|
||||
Reference in New Issue
Block a user