Adjust Claude prefill merge handling and remove BOM

This commit is contained in:
2026-02-18 17:31:50 +08:00
parent ecf9906a55
commit 3602dad5e8

View File

@@ -136,16 +136,11 @@ class StreamingGeneration {
const opts = { ...baseOptions, ...this.resolveCurrentApiAndModel(baseOptions) };
const modelLower = String(opts.model || '').toLowerCase();
const isClaudeThinkingModel =
modelLower.includes('claude') &&
modelLower.includes('thinking') &&
!modelLower.includes('nothinking');
const isClaudeModel = modelLower.includes('claude');
if (isClaudeThinkingModel && Array.isArray(messages) && messages.length > 0) {
const lastMsg = messages[messages.length - 1];
if (lastMsg?.role === 'assistant') {
console.log('[xbgen] Claude Thinking 模型:移除 assistant prefill');
messages.pop();
if (isClaudeModel && Array.isArray(messages) && messages.length > 0) {
if (this._mergeAssistantPrefillIntoPrevious(messages)) {
console.log('[xbgen] Claude model: merged trailing assistant prefill into previous message');
}
}
@@ -805,6 +800,32 @@ class StreamingGeneration {
return '';
}
_mergeAssistantPrefillIntoPrevious(messages) {
if (!Array.isArray(messages) || messages.length < 2) return false;
const lastMsg = messages[messages.length - 1];
if (lastMsg?.role !== 'assistant') return false;
const assistantText = this._extractTextFromMessage(lastMsg).trim();
const previousMsg = messages[messages.length - 2];
if (!previousMsg) return false;
if (assistantText) {
const mergedText = `assistant:\n${assistantText}`;
if (typeof previousMsg.content === 'string') {
previousMsg.content = previousMsg.content
? `${previousMsg.content}\n\n${mergedText}`
: mergedText;
} else if (Array.isArray(previousMsg.content)) {
previousMsg.content.push({ type: 'text', text: `\n\n${mergedText}` });
} else {
previousMsg.content = mergedText;
}
}
messages.pop();
return true;
}
_getLastMessagesSnapshot() {
const ctx = getContext();
const list = Array.isArray(ctx?.chat) ? ctx.chat : [];
@@ -1494,3 +1515,4 @@ if (typeof window !== 'undefined') {
eventSource: (window)?.eventSource || eventSource
});
}