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 opts = { ...baseOptions, ...this.resolveCurrentApiAndModel(baseOptions) };
|
||||||
|
|
||||||
const modelLower = String(opts.model || '').toLowerCase();
|
const modelLower = String(opts.model || '').toLowerCase();
|
||||||
const isClaudeThinkingModel =
|
const isClaudeModel = modelLower.includes('claude');
|
||||||
modelLower.includes('claude') &&
|
|
||||||
modelLower.includes('thinking') &&
|
|
||||||
!modelLower.includes('nothinking');
|
|
||||||
|
|
||||||
if (isClaudeThinkingModel && Array.isArray(messages) && messages.length > 0) {
|
if (isClaudeModel && Array.isArray(messages) && messages.length > 0) {
|
||||||
const lastMsg = messages[messages.length - 1];
|
if (this._mergeAssistantPrefillIntoPrevious(messages)) {
|
||||||
if (lastMsg?.role === 'assistant') {
|
console.log('[xbgen] Claude model: merged trailing assistant prefill into previous message');
|
||||||
console.log('[xbgen] Claude Thinking 模型:移除 assistant prefill');
|
|
||||||
messages.pop();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -805,6 +800,32 @@ class StreamingGeneration {
|
|||||||
return '';
|
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() {
|
_getLastMessagesSnapshot() {
|
||||||
const ctx = getContext();
|
const ctx = getContext();
|
||||||
const list = Array.isArray(ctx?.chat) ? ctx.chat : [];
|
const list = Array.isArray(ctx?.chat) ? ctx.chat : [];
|
||||||
@@ -1494,3 +1515,4 @@ if (typeof window !== 'undefined') {
|
|||||||
eventSource: (window)?.eventSource || eventSource
|
eventSource: (window)?.eventSource || eventSource
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user