diff --git a/packages/forge/blocks/difyAi/actions/createChatMessage.ts b/packages/forge/blocks/difyAi/actions/createChatMessage.ts index e581fc96a..3119e142c 100644 --- a/packages/forge/blocks/difyAi/actions/createChatMessage.ts +++ b/packages/forge/blocks/difyAi/actions/createChatMessage.ts @@ -82,29 +82,27 @@ export const createChatMessage = createAction({ stream.on('data', (chunk) => { const lines = chunk.toString().split('\n') as string[] lines - .filter((line) => line.length > 0) + .filter((line) => line.length > 0 && line !== '\n') .forEach((line) => { - try { - const data = JSON.parse( - (jsonChunk.length > 0 ? jsonChunk : line).replace( - /^data: /, - '' - ) - ) as Chunk + jsonChunk += line + if (jsonChunk.startsWith('event: ')) { jsonChunk = '' - if ( - data.event === 'message' || - data.event === 'agent_message' - ) { - answer += data.answer - } - if (data.event === 'message_end') { - totalTokens = data.metadata.usage.total_tokens - conversationId = data.conversation_id - } - } catch (error) { - if (line.includes('event: ')) return - jsonChunk += line + return + } + if (!jsonChunk.startsWith('data: ') || !jsonChunk.endsWith('}')) + return + + const data = JSON.parse(jsonChunk.slice(6)) as Chunk + jsonChunk = '' + if ( + data.event === 'message' || + data.event === 'agent_message' + ) { + answer += data.answer + } + if (data.event === 'message_end') { + totalTokens = data.metadata.usage.total_tokens + conversationId = data.conversation_id } }) })