diff --git a/examples/chat-ui/src/hooks/useStreamResponse.ts b/examples/chat-ui/src/hooks/useStreamResponse.ts index e296b56..93a98f1 100644 --- a/examples/chat-ui/src/hooks/useStreamResponse.ts +++ b/examples/chat-ui/src/hooks/useStreamResponse.ts @@ -489,11 +489,30 @@ export const useStreamResponse = ({ const updated = [...prev] const conv = updated.find((c) => c.id === conversationId) if (conv) { - conv.messages.push({ - role: 'assistant', - content: finalContent - }) - debugLog(`[useStreamResponse] Added final assistant response:`, finalContent) + // Check if there's already an assistant message with only reasoning content + const existingAssistantMsg = assistantMessageIndex >= 0 ? conv.messages[assistantMessageIndex] : null + if (existingAssistantMsg && + existingAssistantMsg.role === 'assistant' && + (!existingAssistantMsg.content || existingAssistantMsg.content.trim() === '') && + existingAssistantMsg.reasoning) { + // Update the existing assistant message with final content + existingAssistantMsg.content = finalContent + debugLog(`[useStreamResponse] Updated existing assistant message with final content:`, finalContent) + } else { + // Check if we already have a message with this content to avoid duplicates + const isDuplicate = conv.messages.some(msg => + msg.role === 'assistant' && msg.content === finalContent + ) + if (!isDuplicate) { + conv.messages.push({ + role: 'assistant', + content: finalContent + }) + debugLog(`[useStreamResponse] Added new final assistant response:`, finalContent) + } else { + debugLog(`[useStreamResponse] Skipping duplicate assistant response:`, finalContent) + } + } } return updated })