Convert trailing Claude assistant prefill into system message
This commit is contained in:
@@ -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
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user