Adjust Claude prefill merge handling and remove BOM
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user