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

View File

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

View File

@@ -218,13 +218,53 @@ function splitTextForFree(text, maxLength = FREE_MAX_TEXT) {
const chunks = [];
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) {
if (para.length <= maxLength) {
chunks.push(para);
if (!para) continue;
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;
}
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;
}