fix ena planner template selection and stream defaults; improve tts free text chunking

This commit is contained in:
2026-02-25 21:46:50 +08:00
parent fafdb18eaf
commit 21f09a7bd1
3 changed files with 49 additions and 8 deletions

View File

@@ -558,11 +558,12 @@
const sel = $('ep_tpl_select'); const sel = $('ep_tpl_select');
sel.innerHTML = '<option value="">-- 选择模板 --</option>'; sel.innerHTML = '<option value="">-- 选择模板 --</option>';
const names = Object.keys(cfg?.promptTemplates || {}); const names = Object.keys(cfg?.promptTemplates || {});
const selectedName = names.includes(selected) ? selected : '';
names.forEach(name => { names.forEach(name => {
const opt = document.createElement('option'); const opt = document.createElement('option');
opt.value = name; opt.value = name;
opt.textContent = name; opt.textContent = name;
opt.selected = name === selected; opt.selected = name === selectedName;
sel.appendChild(opt); sel.appendChild(opt);
}); });
} }
@@ -675,7 +676,8 @@
setBadge(toBool(cfg.enabled, true)); setBadge(toBool(cfg.enabled, true));
updatePrefixModeUI(); updatePrefixModeUI();
renderTemplateSelect(); const keepSelectedTemplate = $('ep_tpl_select')?.value || '';
renderTemplateSelect(keepSelectedTemplate);
renderPromptList(); renderPromptList();
renderLogs(); renderLogs();
} }

View File

@@ -46,7 +46,7 @@ function getDefaultSettings() {
customPrefix: '', customPrefix: '',
apiKey: '', apiKey: '',
model: '', model: '',
stream: false, stream: true,
temperature: 1, temperature: 1,
top_p: 1, top_p: 1,
top_k: 0, top_k: 0,
@@ -1461,4 +1461,3 @@ export function cleanupEnaPlanner() {
} }
delete window.xiaobaixEnaPlanner; delete window.xiaobaixEnaPlanner;
} }

View File

@@ -218,13 +218,53 @@ function splitTextForFree(text, maxLength = FREE_MAX_TEXT) {
const chunks = []; const chunks = [];
const paragraphs = String(text || '').split(/\n\s*\n/).map(s => s.replace(/\n+/g, '\n').trim()).filter(Boolean); const paragraphs = String(text || '').split(/\n\s*\n/).map(s => s.replace(/\n+/g, '\n').trim()).filter(Boolean);
let current = '';
const pushCurrent = () => {
if (!current) return;
chunks.push(current);
current = '';
};
for (const para of paragraphs) { for (const para of paragraphs) {
if (para.length <= maxLength) { if (!para) continue;
chunks.push(para);
if (para.length > maxLength) {
// Flush buffered short paragraphs before handling a long paragraph.
pushCurrent();
const longParts = splitLongTextBySentence(para, maxLength);
for (const part of longParts) {
const t = String(part || '').trim();
if (!t) continue;
if (!current) {
current = t;
continue;
}
if (current.length + t.length + 2 <= maxLength) {
current += `\n\n${t}`;
continue;
}
pushCurrent();
current = t;
}
continue; continue;
} }
chunks.push(...splitLongTextBySentence(para, maxLength));
if (!current) {
current = para;
continue;
}
// Cross-paragraph merge: keep fewer requests while preserving paragraph boundary.
if (current.length + para.length + 2 <= maxLength) {
current += `\n\n${para}`;
continue;
}
pushCurrent();
current = para;
} }
pushCurrent();
return chunks; return chunks;
} }