Convert trailing Claude assistant prefill into system message

This commit is contained in:
2026-02-18 17:41:15 +08:00
parent 3602dad5e8
commit 2ec70c2db0

View File

@@ -139,8 +139,8 @@ class StreamingGeneration {
const isClaudeModel = modelLower.includes('claude'); const isClaudeModel = modelLower.includes('claude');
if (isClaudeModel && Array.isArray(messages) && messages.length > 0) { if (isClaudeModel && Array.isArray(messages) && messages.length > 0) {
if (this._mergeAssistantPrefillIntoPrevious(messages)) { if (this._convertTrailingAssistantToSystem(messages)) {
console.log('[xbgen] Claude model: merged trailing assistant prefill into previous message'); console.log('[xbgen] Claude model: converted trailing assistant prefill to system message');
} }
} }
@@ -800,29 +800,15 @@ class StreamingGeneration {
return ''; return '';
} }
_mergeAssistantPrefillIntoPrevious(messages) { _convertTrailingAssistantToSystem(messages) {
if (!Array.isArray(messages) || messages.length < 2) return false; if (!Array.isArray(messages) || messages.length < 1) return false;
const lastMsg = messages[messages.length - 1]; const lastMsg = messages[messages.length - 1];
if (lastMsg?.role !== 'assistant') return false; if (lastMsg?.role !== 'assistant') return false;
const assistantText = this._extractTextFromMessage(lastMsg).trim(); const assistantText = this._extractTextFromMessage(lastMsg).trim();
const previousMsg = messages[messages.length - 2]; const systemText = assistantText ? `Assistant:\n${assistantText}` : 'Assistant:';
if (!previousMsg) return false; lastMsg.role = 'system';
lastMsg.content = systemText;
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; return true;
} }
@@ -1515,4 +1501,3 @@ if (typeof window !== 'undefined') {
eventSource: (window)?.eventSource || eventSource eventSource: (window)?.eventSource || eventSource
}); });
} }