diff --git a/modules/streaming-generation.js b/modules/streaming-generation.js index 96e3fa6..95b63be 100644 --- a/modules/streaming-generation.js +++ b/modules/streaming-generation.js @@ -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 }); } -