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)}`
: "-"}