Skip to content

Commit 6f1bb53

Browse files
committed
refactor: rely on content for single-line reasoning
1 parent 3f17581 commit 6f1bb53

File tree

3 files changed

+3
-14
lines changed

3 files changed

+3
-14
lines changed

src/components/Messages/ReasoningMessage.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ export const ReasoningMessage: React.FC<ReasoningMessageProps> = ({ message, cla
1818
const isStreaming = message.isStreaming;
1919
const trimmedContent = content?.trim() ?? "";
2020
const hasContent = trimmedContent.length > 0;
21-
const reasoningSegments = message.reasoningSegmentCount ?? 1;
2221
// OpenAI models often emit terse, single-line traces; surface them inline instead of hiding behind the label.
23-
const isSingleLineTrace =
24-
!isStreaming && hasContent && reasoningSegments === 1 && !/[\r\n]/.test(trimmedContent);
22+
const isSingleLineTrace = !isStreaming && hasContent && !/[\r\n]/.test(trimmedContent);
2523
const isCollapsible = !isStreaming && hasContent && !isSingleLineTrace;
2624

2725
// Auto-collapse when streaming ends

src/types/message.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ export interface MuxReasoningPart {
7272
type: "reasoning";
7373
text: string;
7474
timestamp?: number;
75-
segmentCount?: number; // Number of merged reasoning deltas represented by this part
7675
}
7776

7877
// File/Image part type for multimodal messages (matches AI SDK FileUIPart)
@@ -152,7 +151,6 @@ export type DisplayedMessage =
152151
isLastPartOfMessage?: boolean; // True if this is the last part of a multi-part message
153152
timestamp?: number;
154153
tokens?: number; // Reasoning tokens if available
155-
reasoningSegmentCount?: number; // Number of merged reasoning deltas represented by this block
156154
}
157155
| {
158156
type: "stream-error";

src/utils/messages/StreamingMessageAggregator.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,6 @@ export class StreamingMessageAggregator {
608608
type: "reasoning",
609609
text: data.delta,
610610
timestamp: data.timestamp,
611-
segmentCount: 1,
612611
});
613612

614613
// Track delta for token counting and TPS calculation
@@ -794,20 +793,15 @@ export class StreamingMessageAggregator {
794793
timestamp: lastMerged.timestamp ?? part.timestamp,
795794
};
796795
} else if (lastMerged?.type === "reasoning" && part.type === "reasoning") {
797-
// Merge reasoning parts, preserving the first timestamp and accumulating segment count
796+
// Merge reasoning parts, preserving the first timestamp
798797
mergedParts[mergedParts.length - 1] = {
799798
type: "reasoning",
800799
text: lastMerged.text + part.text,
801800
timestamp: lastMerged.timestamp ?? part.timestamp,
802-
segmentCount: (lastMerged.segmentCount ?? 1) + (part.segmentCount ?? 1),
803801
};
804802
} else {
805803
// Different type or tool part - add new part
806-
if (part.type === "reasoning") {
807-
mergedParts.push({ ...part, segmentCount: part.segmentCount ?? 1 });
808-
} else {
809-
mergedParts.push(part);
810-
}
804+
mergedParts.push(part);
811805
}
812806
}
813807

@@ -844,7 +838,6 @@ export class StreamingMessageAggregator {
844838
isPartial: message.metadata?.partial ?? false,
845839
isLastPartOfMessage: isLastPart,
846840
timestamp: part.timestamp ?? baseTimestamp,
847-
reasoningSegmentCount: part.segmentCount ?? 1,
848841
});
849842
} else if (part.type === "text" && part.text) {
850843
// Skip empty text parts

0 commit comments

Comments
 (0)