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