mirror of https://github.com/kortix-ai/suna.git
fix: fix multiple suna logos
This commit is contained in:
parent
5ecd874988
commit
b642aef82c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue