diff --git a/packages/core/src/core/openaiContentGenerator.ts b/packages/core/src/core/openaiContentGenerator.ts index b7d0ad1b..eeba5db7 100644 --- a/packages/core/src/core/openaiContentGenerator.ts +++ b/packages/core/src/core/openaiContentGenerator.ts @@ -563,7 +563,7 @@ export class OpenAIContentGenerator implements ContentGenerator { // Add combined text if any if (combinedText) { - combinedParts.push({ text: combinedText }); + combinedParts.push({ text: combinedText.trimEnd() }); } // Add function calls @@ -1164,7 +1164,11 @@ export class OpenAIContentGenerator implements ContentGenerator { // Handle text content if (choice.message.content) { - parts.push({ text: choice.message.content }); + if (typeof choice.message.content === 'string') { + parts.push({ text: choice.message.content.trimEnd() }); + } else { + parts.push({ text: choice.message.content }); + } } // Handle tool calls @@ -1249,7 +1253,11 @@ export class OpenAIContentGenerator implements ContentGenerator { // Handle text content if (choice.delta?.content) { - parts.push({ text: choice.delta.content }); + if (typeof choice.delta.content === 'string') { + parts.push({ text: choice.delta.content.trimEnd() }); + } else { + parts.push({ text: choice.delta.content }); + } } // Handle tool calls - only accumulate during streaming, emit when complete @@ -1290,7 +1298,9 @@ export class OpenAIContentGenerator implements ContentGenerator { parts.push({ functionCall: { - id: accumulatedCall.id, + id: + accumulatedCall.id || + `call_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`, name: accumulatedCall.name, args, }, @@ -1766,7 +1776,7 @@ export class OpenAIContentGenerator implements ContentGenerator { } } - messageContent = textParts.join(''); + messageContent = textParts.join('').trimEnd(); } const choice: OpenAIChoice = {