Stabilize live run activity updates
This commit is contained in:
@@ -525,10 +525,6 @@ function writeRuntimeEvent(
|
|||||||
}
|
}
|
||||||
if (event.type === "content_delta" && event.delta) {
|
if (event.type === "content_delta" && event.delta) {
|
||||||
if (!streamState?.textStarted) {
|
if (!streamState?.textStarted) {
|
||||||
if (streamState && !streamState.reasoningEnded) {
|
|
||||||
writer.write({ type: "reasoning-end", id: "reasoning-1" });
|
|
||||||
streamState.reasoningEnded = true;
|
|
||||||
}
|
|
||||||
writer.write({ type: "text-start", id: "text-1" });
|
writer.write({ type: "text-start", id: "text-1" });
|
||||||
if (streamState) streamState.textStarted = true;
|
if (streamState) streamState.textStarted = true;
|
||||||
}
|
}
|
||||||
@@ -556,20 +552,12 @@ function writeRuntimeEvent(
|
|||||||
}
|
}
|
||||||
if (event.type === "final_text_start") {
|
if (event.type === "final_text_start") {
|
||||||
if (!streamState?.textStarted) {
|
if (!streamState?.textStarted) {
|
||||||
if (streamState && !streamState.reasoningEnded) {
|
|
||||||
writer.write({ type: "reasoning-end", id: "reasoning-1" });
|
|
||||||
streamState.reasoningEnded = true;
|
|
||||||
}
|
|
||||||
writer.write({ type: "text-start", id: "text-1" });
|
writer.write({ type: "text-start", id: "text-1" });
|
||||||
if (streamState) streamState.textStarted = true;
|
if (streamState) streamState.textStarted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (event.type === "final_text_delta" && event.delta) {
|
if (event.type === "final_text_delta" && event.delta) {
|
||||||
if (!streamState?.textStarted) {
|
if (!streamState?.textStarted) {
|
||||||
if (streamState && !streamState.reasoningEnded) {
|
|
||||||
writer.write({ type: "reasoning-end", id: "reasoning-1" });
|
|
||||||
streamState.reasoningEnded = true;
|
|
||||||
}
|
|
||||||
writer.write({ type: "text-start", id: "text-1" });
|
writer.write({ type: "text-start", id: "text-1" });
|
||||||
if (streamState) streamState.textStarted = true;
|
if (streamState) streamState.textStarted = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,10 +156,6 @@ export function ActivityPanel() {
|
|||||||
readActiveSessionId(),
|
readActiveSessionId(),
|
||||||
);
|
);
|
||||||
const liveRunStatus = useLiveRunStatus(activeSessionId, mode);
|
const liveRunStatus = useLiveRunStatus(activeSessionId, mode);
|
||||||
const replayedSessionId = useMemo(
|
|
||||||
() => findLatestSessionIdInMessages(messages),
|
|
||||||
[messages],
|
|
||||||
);
|
|
||||||
const messageItems = useMemo(
|
const messageItems = useMemo(
|
||||||
() => collectActivityItems(messages),
|
() => collectActivityItems(messages),
|
||||||
[messages],
|
[messages],
|
||||||
@@ -169,22 +165,20 @@ export function ActivityPanel() {
|
|||||||
[liveRunStatus],
|
[liveRunStatus],
|
||||||
);
|
);
|
||||||
const selectedMessageId = selectedId ? activityMessageId(selectedId) : null;
|
const selectedMessageId = selectedId ? activityMessageId(selectedId) : null;
|
||||||
|
const liveRunActive = hasActiveRun(liveRunStatus) && liveItems.length > 0;
|
||||||
const selectedMessageItems = selectedMessageId
|
const selectedMessageItems = selectedMessageId
|
||||||
? messageItems.filter(
|
? messageItems.filter(
|
||||||
(item) => activityMessageId(item.id) === selectedMessageId,
|
(item) => activityMessageId(item.id) === selectedMessageId,
|
||||||
)
|
)
|
||||||
: [];
|
: [];
|
||||||
const shouldUseLiveItems =
|
const shouldUseLiveItems = Boolean(activeSessionId && liveRunActive);
|
||||||
!selectedMessageId &&
|
|
||||||
liveItems.length > 0 &&
|
|
||||||
activeSessionId !== null &&
|
|
||||||
(activeSessionId !== replayedSessionId || hasActiveRun(liveRunStatus));
|
|
||||||
const items = shouldUseLiveItems ? liveItems : messageItems;
|
const items = shouldUseLiveItems ? liveItems : messageItems;
|
||||||
const selectedItems = selectedMessageId
|
const selectedItems = selectedMessageId
|
||||||
? items.filter((item) => activityMessageId(item.id) === selectedMessageId)
|
? items.filter((item) => activityMessageId(item.id) === selectedMessageId)
|
||||||
: [];
|
: [];
|
||||||
const visibleItems =
|
const visibleItems = shouldUseLiveItems
|
||||||
selectedMessageId && selectedMessageItems.length > 0
|
? liveItems
|
||||||
|
: selectedMessageId && selectedMessageItems.length > 0
|
||||||
? selectedMessageItems
|
? selectedMessageItems
|
||||||
: selectedMessageId && selectedItems.length > 0
|
: selectedMessageId && selectedItems.length > 0
|
||||||
? selectedItems
|
? selectedItems
|
||||||
@@ -764,23 +758,6 @@ function hasActiveRun(
|
|||||||
return status?.status === "queued" || status?.status === "running";
|
return status?.status === "queued" || status?.status === "running";
|
||||||
}
|
}
|
||||||
|
|
||||||
function findLatestSessionIdInMessages(messages: readonly MessageState[]) {
|
|
||||||
for (const message of [...messages].reverse()) {
|
|
||||||
const metadata = message.metadata;
|
|
||||||
const custom =
|
|
||||||
metadata && typeof metadata === "object" && "custom" in metadata
|
|
||||||
? (metadata as { custom?: unknown }).custom
|
|
||||||
: null;
|
|
||||||
if (custom && typeof custom === "object" && "sessionId" in custom) {
|
|
||||||
const sessionId = (custom as { sessionId?: unknown }).sessionId;
|
|
||||||
if (typeof sessionId === "string" && sessionId.trim()) {
|
|
||||||
return sessionId.trim();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ActivityPanelItem({
|
function ActivityPanelItem({
|
||||||
item,
|
item,
|
||||||
open,
|
open,
|
||||||
|
|||||||
Reference in New Issue
Block a user