fix ena planner template selection and stream defaults; improve tts free text chunking
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
continue;
|
||||||
}
|
}
|
||||||
chunks.push(...splitLongTextBySentence(para, maxLength));
|
if (current.length + t.length + 2 <= maxLength) {
|
||||||
|
current += `\n\n${t}`;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
pushCurrent();
|
||||||
|
current = t;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user