fix: fix multiple suna logos

This commit is contained in:
Soumyadas15 2025-06-06 17:40:55 +05:30
parent 5ecd874988
commit b642aef82c
1 changed files with 86 additions and 17 deletions

View File

@ -421,13 +421,76 @@ export const ThreadContent: React.FC<ThreadContentProps> = ({
groupedMessages.push(currentGroup); groupedMessages.push(currentGroup);
} }
// Debug logging to help identify grouping issues
console.log('=== MESSAGE GROUPING DEBUG ===');
console.log('Input messages:', displayMessages.map((m, i) => ({ index: i, type: m.type, id: m.message_id })));
console.log('Grouped messages:', groupedMessages.map(g => ({
type: g.type,
key: g.key,
messageCount: g.messages.length,
messageTypes: g.messages.map(m => m.type),
messageIds: g.messages.map(m => m.message_id)
})));
// Show detailed breakdown of assistant groups
groupedMessages.forEach((group, i) => {
if (group.type === 'assistant_group') {
console.log(`Group ${i} (${group.key}):`, group.messages.map(m => ({ type: m.type, id: m.message_id })));
}
});
// Merge consecutive assistant groups
const mergedGroups: MessageGroup[] = [];
let currentMergedGroup: MessageGroup | null = null;
groupedMessages.forEach((group, index) => {
if (group.type === 'assistant_group') {
if (currentMergedGroup && currentMergedGroup.type === 'assistant_group') {
// Merge with the current group
currentMergedGroup.messages.push(...group.messages);
console.log(`Merged group ${index} into existing assistant group`);
} else {
// Finalize previous group if it exists
if (currentMergedGroup) {
mergedGroups.push(currentMergedGroup);
}
// Start new merged group
currentMergedGroup = { ...group };
}
} else {
// Finalize current merged group if it exists
if (currentMergedGroup) {
mergedGroups.push(currentMergedGroup);
currentMergedGroup = null;
}
// Add non-assistant group as-is
mergedGroups.push(group);
}
});
// Finalize any remaining merged group
if (currentMergedGroup) {
mergedGroups.push(currentMergedGroup);
}
console.log('After merging consecutive assistant groups:', mergedGroups.map(g => ({
type: g.type,
key: g.key,
messageCount: g.messages.length,
messageTypes: g.messages.map(m => m.type)
})));
console.log('===============================');
// Use merged groups instead of original grouped messages
const finalGroupedMessages = mergedGroups;
// Handle streaming content - only add to existing group or create new one if needed // Handle streaming content - only add to existing group or create new one if needed
if (streamingTextContent) { if (streamingTextContent) {
const lastGroup = groupedMessages.at(-1); const lastGroup = finalGroupedMessages.at(-1);
if (!lastGroup || lastGroup.type === 'user') { if (!lastGroup || lastGroup.type === 'user') {
// Create new assistant group for streaming content // Create new assistant group for streaming content
assistantGroupCounter++; assistantGroupCounter++;
groupedMessages.push({ finalGroupedMessages.push({
type: 'assistant_group', type: 'assistant_group',
messages: [{ messages: [{
content: streamingTextContent, content: streamingTextContent,
@ -443,21 +506,25 @@ export const ThreadContent: React.FC<ThreadContentProps> = ({
key: `assistant-group-${assistantGroupCounter}-streaming` key: `assistant-group-${assistantGroupCounter}-streaming`
}); });
} else if (lastGroup.type === 'assistant_group') { } else if (lastGroup.type === 'assistant_group') {
lastGroup.messages.push({ // Only add streaming content if it's not already represented in the last message
content: streamingTextContent, const lastMessage = lastGroup.messages[lastGroup.messages.length - 1];
type: 'assistant', if (lastMessage.message_id !== 'streamingTextContent') {
message_id: 'streamingTextContent', lastGroup.messages.push({
metadata: 'streamingTextContent', content: streamingTextContent,
created_at: new Date().toISOString(), type: 'assistant',
updated_at: new Date().toISOString(), message_id: 'streamingTextContent',
is_llm_message: true, metadata: 'streamingTextContent',
thread_id: 'streamingTextContent', created_at: new Date().toISOString(),
sequence: Infinity, updated_at: new Date().toISOString(),
}); is_llm_message: true,
thread_id: 'streamingTextContent',
sequence: Infinity,
});
}
} }
} }
return groupedMessages.map((group, groupIndex) => { return finalGroupedMessages.map((group, groupIndex) => {
if (group.type === 'user') { if (group.type === 'user') {
const message = group.messages[0]; const message = group.messages[0];
const messageContent = (() => { const messageContent = (() => {
@ -565,12 +632,12 @@ export const ThreadContent: React.FC<ThreadContentProps> = ({
const renderedToolResultIds = new Set<string>(); const renderedToolResultIds = new Set<string>();
const elements: React.ReactNode[] = []; const elements: React.ReactNode[] = [];
let assistantMessageCount = 0; // Move this outside the loop
group.messages.forEach((message, msgIndex) => { group.messages.forEach((message, msgIndex) => {
if (message.type === 'assistant') { if (message.type === 'assistant') {
const parsedContent = safeJsonParse<ParsedContent>(message.content, {}); const parsedContent = safeJsonParse<ParsedContent>(message.content, {});
const msgKey = message.message_id || `submsg-assistant-${msgIndex}`; const msgKey = message.message_id || `submsg-assistant-${msgIndex}`;
let assistantMessageCount = 0;
if (!parsedContent.content) return; if (!parsedContent.content) return;
@ -591,13 +658,15 @@ export const ThreadContent: React.FC<ThreadContentProps> = ({
</div> </div>
</div> </div>
); );
assistantMessageCount++; // Increment after adding the element
} }
}); });
return elements; return elements;
})()} })()}
{groupIndex === groupedMessages.length - 1 && !readOnly && (streamHookStatus === 'streaming' || streamHookStatus === 'connecting') && ( {groupIndex === finalGroupedMessages.length - 1 && !readOnly && (streamHookStatus === 'streaming' || streamHookStatus === 'connecting') && (
<div className="mt-2"> <div className="mt-2">
{(() => { {(() => {
// In debug mode, show raw streaming content // In debug mode, show raw streaming content
@ -701,7 +770,7 @@ export const ThreadContent: React.FC<ThreadContentProps> = ({
)} )}
{/* For playback mode, show streaming text and tool calls */} {/* For playback mode, show streaming text and tool calls */}
{readOnly && groupIndex === groupedMessages.length - 1 && isStreamingText && ( {readOnly && groupIndex === finalGroupedMessages.length - 1 && isStreamingText && (
<div className="mt-2"> <div className="mt-2">
{(() => { {(() => {
let detectedTag: string | null = null; let detectedTag: string | null = null;