fix(codebuddy-cn): strip empty tool_calls arrays to preserve reasoning
CodeBuddy CN includes "tool_calls": [] in every SSE streaming delta. @ai-sdk/openai-compatible checks delta.tool_calls != null — an empty array passes ([] != null is true in JS), triggering premature reasoning-end on every reasoning chunk (0/1ms durations in OpenCode). Strip empty tool_calls arrays in passthrough before hasValuableContent. Zero side-effect: real tool_calls always have at least one element. Closes #2176 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -130,6 +130,20 @@ export function createSSEStream(options = {}) {
|
||||
}
|
||||
}
|
||||
|
||||
// Strip empty tool_calls arrays that break AI SDK reasoning tracking.
|
||||
// Some providers (e.g. CodeBuddy CN) include `"tool_calls": []` in
|
||||
// every streaming delta. @ai-sdk/openai-compatible checks
|
||||
// `delta.tool_calls != null` — an empty array passes this check,
|
||||
// causing premature `reasoning-end` on every chunk.
|
||||
if (parsed?.choices) {
|
||||
for (const choice of parsed.choices) {
|
||||
if (choice.delta?.tool_calls && Array.isArray(choice.delta.tool_calls) && choice.delta.tool_calls.length === 0) {
|
||||
delete choice.delta.tool_calls;
|
||||
fieldsInjected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasValuableContent(parsed, FORMATS.OPENAI)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user