diff --git a/ui-src/src/App.tsx b/ui-src/src/App.tsx index ec476a4..35299b3 100644 --- a/ui-src/src/App.tsx +++ b/ui-src/src/App.tsx @@ -310,7 +310,7 @@ function durationSeconds(value?: number | null) { return typeof value === "number" && Number.isFinite(value) ? `${(value / 1000).toFixed(2)} s` : "-"; } -function secondsSince(value: string | null | undefined, nowMs: number) { +function secondsSince(value: string | null | undefined, nowMs: number, freezeAt?: string | null) { if (!value) { return "-"; } @@ -318,7 +318,9 @@ function secondsSince(value: string | null | undefined, nowMs: number) { if (Number.isNaN(atMs)) { return "-"; } - return `${Math.max(0, (nowMs - atMs) / 1000).toFixed(1)} s`; + const freezeMs = freezeAt ? new Date(freezeAt).getTime() : Number.NaN; + const endMs = Number.isNaN(freezeMs) ? nowMs : freezeMs; + return `${Math.max(0, (endMs - atMs) / 1000).toFixed(1)} s`; } function bytesFormat(value?: number | null) { @@ -1042,7 +1044,7 @@ export default function App() { {entry.response_stream - ? `${numberFormat(entry.stream_chunk_count)} chunk / ${bytesFormat(entry.response_bytes_received)} / ${secondsSince(entry.last_activity_at || entry.usage_last_updated_at, nowMs)}` + ? `${numberFormat(entry.stream_chunk_count)} chunk / ${bytesFormat(entry.response_bytes_received)} / ${secondsSince(entry.last_activity_at || entry.usage_last_updated_at, nowMs, entry.finished_at)}` : "-"}