fix(workbench): skip terminal turn polling (#1809)
Stop realtime gap hydration from polling completed/terminal Workbench turns. This avoids repeated /v1/workbench/turns requests for old traces while preserving active turn refresh.\n\nRefs #1791.
This commit is contained in:
@@ -455,7 +455,18 @@ export const useWorkbenchStore = defineStore("workbench", () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function hydrateTurnStatusAuthority(source: ChatMessage[] = messages.value): Promise<void> {
|
async function hydrateTurnStatusAuthority(source: ChatMessage[] = messages.value): Promise<void> {
|
||||||
await Promise.all(uniqueTraceIds(source).slice(-12).map((traceId) => refreshTurnStatusByTraceId(traceId)));
|
await Promise.all(uniqueTraceIds(source).slice(-12).filter((traceId) => traceNeedsTurnStatusRefresh(traceId, source)).map((traceId) => refreshTurnStatusByTraceId(traceId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
function traceNeedsTurnStatusRefresh(traceId: string | null | undefined, source: ChatMessage[] = messages.value): boolean {
|
||||||
|
const id = firstNonEmptyString(traceId);
|
||||||
|
if (!id) return false;
|
||||||
|
const turn = turnStatusAuthority.value[id];
|
||||||
|
if (turn?.terminal === true || isTerminalMessageStatus(turn?.status)) return false;
|
||||||
|
const message = [...source].reverse().find((item) => firstNonEmptyString(item.traceId, item.runnerTrace?.traceId) === id) ?? null;
|
||||||
|
if (isTerminalMessageStatus(message?.status) || isTerminalMessageStatus(message?.runnerTrace?.status)) return false;
|
||||||
|
if (message?.runnerTrace && traceSnapshotHasTerminalEvidence(message.runnerTrace)) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function refreshTurnStatusByTraceId(traceId: string | null | undefined): Promise<void> {
|
async function refreshTurnStatusByTraceId(traceId: string | null | undefined): Promise<void> {
|
||||||
|
|||||||
Reference in New Issue
Block a user