feat: handle status events to create assistant placeholder early

This commit is contained in:
gongzhiyong
2026-04-09 17:51:52 +08:00
parent bb7a4f6629
commit 0cd19b527b
+34
View File
@@ -332,6 +332,23 @@ export function GeminiChat() {
}) })
); );
} else if (event.type === "status") {
// status 事件:确保 assistant 消息占位符已存在(trace 面板早于 token 出现)
setConversations((prev) =>
prev.map((c) => {
if (c.id !== streamConvId) return c;
const exists = c.messages.some((m) => m.id === aiMsgId);
if (exists) return c;
return {
...c,
messages: [
...c.messages,
{ id: aiMsgId, role: "assistant" as const, content: "", timestamp: new Date(), traceItems: [] },
],
};
})
);
} else if (event.type === "tool_start" && event.tool) { } else if (event.type === "tool_start" && event.tool) {
const item: TraceItem = { const item: TraceItem = {
id: event.call_id ?? `${event.tool}-${event.ts ?? Date.now()}`, id: event.call_id ?? `${event.tool}-${event.ts ?? Date.now()}`,
@@ -447,6 +464,23 @@ export function GeminiChat() {
}; };
}) })
); );
} else if (event.type === "status") {
// status 事件:确保 assistant 消息占位符已存在(trace 面板早于 token 出现)
setConversations((prev) =>
prev.map((c) => {
if (c.id !== regenConvId) return c;
const exists = c.messages.some((m) => m.id === newAiMsgId);
if (exists) return c;
return {
...c,
messages: [
...c.messages,
{ id: newAiMsgId, role: "assistant" as const, content: "", timestamp: new Date(), traceItems: [] },
],
};
})
);
} else if (event.type === "tool_start" && event.tool) { } else if (event.type === "tool_start" && event.tool) {
const item: TraceItem = { const item: TraceItem = {
id: event.call_id ?? `${event.tool}-${event.ts ?? Date.now()}`, id: event.call_id ?? `${event.tool}-${event.ts ?? Date.now()}`,