Skip to content

Commit 4074d74

Browse files
committed
enhance chat agent event component
1 parent 9887070 commit 4074d74

File tree

1 file changed

+15
-40
lines changed

1 file changed

+15
-40
lines changed

templates/types/streaming/nextjs/app/components/ui/chat/chat-message/chat-agent-events.tsx

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,23 @@ function TextContent({
9191
function ProgressContent({
9292
progress,
9393
isFinished,
94-
progressValue,
9594
msg,
9695
}: {
9796
progress: ProgressData;
9897
isFinished: boolean;
99-
progressValue: number;
10098
msg?: string;
10199
}) {
100+
const [progressValue, setProgressValue] = useState(0);
101+
102+
useEffect(() => {
103+
if (progress.total !== 0) {
104+
const value = Math.round(((progress.current + 1) / progress.total) * 100);
105+
setProgressValue(value);
106+
} else {
107+
setProgressValue(0);
108+
}
109+
}, [progress]);
110+
102111
return (
103112
<div className="space-y-2 mt-2">
104113
{!isFinished && msg && (
@@ -124,15 +133,6 @@ function AgentEventContent({
124133
}) {
125134
const { agent, texts, progress } = event;
126135
const AgentIcon = event.icon;
127-
const [progressValue, setProgressValue] = useState(0);
128-
129-
useEffect(() => {
130-
if (progress) {
131-
// Add 1 to current_step to match the display value
132-
const value = Math.round(((progress.current + 1) / progress.total) * 100);
133-
setProgressValue(value);
134-
}
135-
}, [progress]);
136136

137137
return (
138138
<div className="flex gap-4 border-b pb-4 items-center fadein-agent">
@@ -158,7 +158,6 @@ function AgentEventContent({
158158
<ProgressContent
159159
progress={progress}
160160
isFinished={isFinished}
161-
progressValue={progressValue}
162161
msg={texts[texts.length - 1]}
163162
/>
164163
)}
@@ -200,41 +199,17 @@ function mergeAdjacentEvents(events: AgentEventData[]): MergedEvent[] {
200199
for (const event of events) {
201200
const lastMergedEvent = mergedEvents[mergedEvents.length - 1];
202201

203-
// Check the event_type first
204-
if (event.type === "progress") {
205-
try {
206-
const progressData = event.data;
207-
208-
if (lastMergedEvent && lastMergedEvent.agent === event.agent) {
209-
lastMergedEvent.progress = progressData;
210-
lastMergedEvent.texts.push(event.text);
211-
} else {
212-
mergedEvents.push({
213-
agent: event.agent,
214-
texts: [],
215-
icon: AgentIcons[event.agent.toLowerCase()] ?? icons.Bot,
216-
progress: progressData,
217-
});
218-
}
219-
} catch (e) {
220-
console.error(
221-
"Failed to parse progress data:",
222-
e,
223-
"Raw text:",
224-
event.text,
225-
);
226-
}
227-
continue;
228-
}
229-
230-
// Handle regular text events
202+
const progressData = event.data;
231203
if (lastMergedEvent && lastMergedEvent.agent === event.agent) {
204+
// Update for the last merged event
205+
lastMergedEvent.progress = progressData;
232206
lastMergedEvent.texts.push(event.text);
233207
} else {
234208
mergedEvents.push({
235209
agent: event.agent,
236210
texts: [event.text],
237211
icon: AgentIcons[event.agent.toLowerCase()] ?? icons.Bot,
212+
progress: progressData,
238213
});
239214
}
240215
}

0 commit comments

Comments
 (0)