From ff0d875c04ce523127b6584acb344156936735ea Mon Sep 17 00:00:00 2001
From: Luke Parker <10430890+Hona@users.noreply.github.com>
Date: Thu, 22 Oct 2026 07:50:46 +1000
Subject: [PATCH 1/3] refactor(util): share turn throughput between TUI and GUI
---
packages/gui-extensions/src/debug/bar.tsx | 25 +++-
.../gui-extensions/src/debug/metrics.test.ts | 6 +-
packages/gui-extensions/src/debug/metrics.ts | 34 ++---
packages/tui/src/routes/session/index.tsx | 15 +-
packages/tui/src/routes/session/rows.ts | 57 --------
.../tui/test/cli/tui/session-rows.test.ts | 136 +-----------------
packages/util/src/session-turn.test.ts | 113 +++++++++++++++
packages/util/src/session-turn.ts | 64 +++++++++
8 files changed, 223 insertions(+), 227 deletions(-)
create mode 100644 packages/util/src/session-turn.test.ts
create mode 100644 packages/util/src/session-turn.ts
diff --git a/packages/gui-extensions/src/debug/bar.tsx b/packages/gui-extensions/src/debug/bar.tsx
index 1febe3017007..d919e982722c 100644
--- a/packages/gui-extensions/src/debug/bar.tsx
+++ b/packages/gui-extensions/src/debug/bar.tsx
@@ -13,6 +13,7 @@ import {
type ProviderMetricState,
} from "./metrics"
import { motionGlobals, motionTuning } from "@opencode/ui/motion-tuning"
+import { SessionTurn } from "@opencode/util/session-turn"
type Mem = Performance & {
memory?: {
@@ -241,13 +242,25 @@ export default function DebugBar(props: {
{ equals: (a, b) => a?.data === b?.data && a?.id === b?.id },
)
- // History comes from the already-loaded message projection; live requests refine it in place.
- const projected = createMemo(() => {
+ const messages = createMemo(() => {
const current = target()
- if (!current) return
+ if (!current) return []
+
+ return current.data.session.message.list(current.id)
+ })
+
+ // History comes from the already-loaded message projection; live requests refine it in place.
+ const projected = createMemo(() => projectedProviderMetrics(messages()))
+
+ // The TUI footer's number for the latest turn, through its last step that finished streaming.
+ const tps = createMemo(() => {
+ const list = messages()
+ const index = list.findLastIndex((item) => item.type === "assistant" && item.time.streamed !== undefined)
+
+ if (index === -1) return
- return projectedProviderMetrics(current.data.session.message.list(current.id))
+ return SessionTurn.tokensPerSecond(list, list[index], { index })
})
// Missed events during an outage are never replayed, so live metrics hold only for the target and the outage count
@@ -629,8 +642,8 @@ export default function DebugBar(props: {
|
{
const state: ProviderMetricState = {}
events.forEach((event) => applyProviderMetricEvent(state, event))
expect(state.latest).toEqual({
- tps: 50,
ttft: 300,
ttfa: 800,
e2e: 2_800,
@@ -85,6 +84,7 @@ test("derives a baseline from the latest completed projected request", () => {
assistant,
{ ...assistant, id: "msg_running", tokens: undefined, time: { created: 5_000 } },
]
- // Reasoning ended at 1_700, so TPS spans 1_700 → 3_800 = 100 / 2.1s.
- expect(projectedProviderMetrics(messages)).toEqual({ tps: 100 / 2.1, ttft: 300, ttfa: 700, e2e: 2_800 })
+
+ // Reasoning ended at 1_700, which approximates the answer start.
+ expect(projectedProviderMetrics(messages)).toEqual({ ttft: 300, ttfa: 700, e2e: 2_800 })
})
diff --git a/packages/gui-extensions/src/debug/metrics.ts b/packages/gui-extensions/src/debug/metrics.ts
index 3bcedbbf34db..d78352059bea 100644
--- a/packages/gui-extensions/src/debug/metrics.ts
+++ b/packages/gui-extensions/src/debug/metrics.ts
@@ -1,9 +1,4 @@
-import type {
- SessionLogItem,
- SessionMessageAssistant,
- SessionMessageInfo,
- TokenUsageInfo,
-} from "@opencode/client/promise"
+import type { SessionLogItem, SessionMessageAssistant, SessionMessageInfo } from "@opencode/client/promise"
type ProviderMetricEventType =
| "session.step.started"
@@ -27,7 +22,6 @@ const types: ReadonlySet = new Set([
export type ProviderMetricEvent = Extract
export type ProviderMetrics = {
- tps?: number
ttft?: number
ttfa?: number
e2e?: number
@@ -39,7 +33,6 @@ type Attempt = {
first?: number
answer?: number
streamed?: number
- tokens?: TokenUsageInfo
}
export type ProviderMetricState = { attempt?: Attempt; latest?: ProviderMetrics }
@@ -54,6 +47,7 @@ export function applyProviderMetricEvent(state: ProviderMetricState, event: Prov
assistantMessageID: event.data.assistantMessageID,
started: event.data.started,
}
+
return
}
@@ -65,31 +59,35 @@ export function applyProviderMetricEvent(state: ProviderMetricState, event: Prov
event.type === "session.tool.input.started"
) {
state.attempt.first ??= event.created
+
if (event.type === "session.text.started") state.attempt.answer ??= event.created
+
return
}
if (event.type === "session.step.streamed") {
state.attempt.streamed = event.created
+
return
}
// Interrupted or failed attempts without usage would publish misleading partial numbers.
if (!event.data.tokens || state.attempt.first === undefined || state.attempt.streamed === undefined) return
- state.attempt.tokens = event.data.tokens
state.latest = attemptMetrics(state.attempt)
}
/**
- * Baseline from already-loaded history. Text parts carry no start timestamp yet, so TTFT, TTFA,
- * and TPS stay unavailable for text-first requests until a live request supplies them.
+ * Baseline from already-loaded history. Text parts carry no start timestamp yet, so TTFT and TTFA
+ * stay unavailable for text-first requests until a live request supplies them.
*/
export function projectedProviderMetrics(messages: readonly SessionMessageInfo[]): ProviderMetrics | undefined {
const message = messages.findLast(
(item): item is SessionMessageAssistant =>
item.type === "assistant" && item.time.streamed !== undefined && item.tokens !== undefined,
)
+
if (!message) return
+
// Content is chronological; only a non-text head carries the first-output time.
const head = message.content[0]
const first = head && head.type !== "text" ? head.time?.created : undefined
@@ -98,13 +96,13 @@ export function projectedProviderMetrics(messages: readonly SessionMessageInfo[]
const text = message.content.findIndex((item) => item.type === "text")
const before = text > 0 ? message.content[text - 1] : undefined
const answer = first !== undefined && before?.type === "reasoning" ? before.time?.completed : undefined
+
return attemptMetrics({
assistantMessageID: message.id,
started: message.time.created,
first,
answer,
streamed: message.time.streamed,
- tokens: message.tokens,
})
}
@@ -112,18 +110,12 @@ function attemptMetrics(attempt: Attempt): ProviderMetrics {
const ttft = elapsed(attempt.started, attempt.first)
const ttfa = elapsed(attempt.started, attempt.answer)
const e2e = elapsed(attempt.started, attempt.streamed)
- // Output tokens exclude reasoning, so measure them from the answer start when one exists.
- const generation = elapsed(attempt.answer ?? attempt.first, attempt.streamed)
- const output = attempt.tokens?.output
- return {
- tps: generation && output && generation > 0 && output > 0 ? output / (generation / 1_000) : undefined,
- ttft,
- ttfa,
- e2e,
- }
+
+ return { ttft, ttfa, e2e }
}
function elapsed(start: number | undefined, end: number | undefined) {
if (start === undefined || end === undefined) return
+
return Math.max(0, end - start)
}
diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx
index 0b8228ef8714..4cdf20c4e7de 100644
--- a/packages/tui/src/routes/session/index.tsx
+++ b/packages/tui/src/routes/session/index.tsx
@@ -100,12 +100,9 @@ import {
cacheReuseDrop,
completeGroupBoundary,
createSessionRows,
- legacyTurns,
messageBoundaryIDs,
resolvePart,
sessionRowID,
- turnDuration,
- turnTokensPerSecond,
type CacheUsage,
type PartRef,
type SessionRow,
@@ -115,6 +112,7 @@ import { findMessageBoundary, messageNavigationSlack } from "./message-navigatio
import { stringWidth } from "../../util/string-width"
import { useArgs } from "../../context/args"
import { withTimestampedFallback } from "@opencode/util/session-title-fallback"
+import { SessionTurn } from "@opencode/util/session-turn"
import { useSessionTabs, type ScrollAnchor } from "../../context/session-tabs"
import { createSingleFlight } from "../../util/single-flight"
import { createDelayedPresence } from "../../util/delayed-presence"
@@ -172,7 +170,7 @@ export function Session(props: {
const session = createMemo(() => data.session.get(route.sessionID))
const messages = () => data.session.message.list(route.sessionID)
const messageIndexes = createMemo(() => new Map(messages().map((message, index) => [message.id, index])))
- const legacy = createMemo(() => legacyTurns(messages()))
+ const legacy = createMemo(() => SessionTurn.legacy(messages()))
const messagesBeforeRevert = () => {
const messageID = session()?.revert?.messageID
if (!messageID) return messages()
@@ -1893,12 +1891,9 @@ function AssistantFooter(props: { message: SessionMessageAssistant }) {
?.name ?? `${props.message.model.providerID}/${props.message.model.id}`,
)
const messages = createMemo(() => data.session.message.list(ctx.sessionID))
- const duration = createMemo(() =>
- turnDuration(props.message, messages(), ctx.messageIndex(props.message.id), ctx.legacyTurns()),
- )
- const tokensPerSecond = createMemo(() =>
- turnTokensPerSecond(props.message, messages(), ctx.messageIndex(props.message.id), ctx.legacyTurns()),
- )
+ const turn = () => ({ index: ctx.messageIndex(props.message.id), legacy: ctx.legacyTurns() })
+ const duration = createMemo(() => SessionTurn.duration(messages(), props.message, turn()))
+ const tokensPerSecond = createMemo(() => SessionTurn.tokensPerSecond(messages(), props.message, turn()))
const interrupted = createMemo(() => props.message.error?.message === "Step interrupted")
return (
<>
diff --git a/packages/tui/src/routes/session/rows.ts b/packages/tui/src/routes/session/rows.ts
index 52e45c94a308..4a8437a13548 100644
--- a/packages/tui/src/routes/session/rows.ts
+++ b/packages/tui/src/routes/session/rows.ts
@@ -424,63 +424,6 @@ export function cacheReuseDrop(previous: CacheUsage | undefined, current: CacheU
return drop > 0 ? drop : undefined
}
-// `legacy` marks a session without idle markers, where a turn ends at the next prompt. Reactive
-// callers should pass it from a shared memo: the default scans every message, which subscribes
-// the footer to the whole history.
-export function turnDuration(
- message: SessionMessageAssistant,
- messages: SessionMessageInfo[],
- position?: number,
- legacy = legacyTurns(messages),
-) {
- if (message.time.completed === undefined) return 0
- const index = position ?? messages.findIndex((item) => item.id === message.id)
- const input = messages[inputIndex(messages, index === -1 ? messages.length : index, legacy)]
- return Math.max(0, message.time.completed - (input?.time.created ?? message.time.created))
-}
-
-export function turnTokensPerSecond(
- message: SessionMessageAssistant,
- messages: SessionMessageInfo[],
- position?: number,
- legacy = legacyTurns(messages),
-) {
- const index = position ?? messages.findIndex((item) => item.id === message.id)
- const end = index === -1 ? messages.length : index + 1
- const start = inputIndex(messages, end, legacy)
- const steps = messages
- .slice(start + 1, end)
- .filter((item): item is SessionMessageAssistant => item.type === "assistant")
- const durations = steps.flatMap((step) =>
- step.time.streamed === undefined ? [] : [Math.max(0, step.time.streamed - step.time.created)],
- )
- if (steps.length === 0 || durations.length !== steps.length) return
- const output = steps.reduce((total, step) => total + (step.tokens?.output ?? 0) + (step.tokens?.reasoning ?? 0), 0)
- const duration = durations.reduce((total, value) => total + value, 0)
- if (output <= 0 || duration <= 0) return
- // Aggregate before dividing so each step is weighted by its provider-active duration.
- return output / (duration / 1_000)
-}
-
-export function legacyTurns(messages: SessionMessageInfo[]) {
- return !messages.some((message) => message.type === "idle")
-}
-
-function inputIndex(messages: SessionMessageInfo[], end: number, legacy: boolean) {
- // Reading a sliced prefix subscribes every footer to unrelated historical messages, so walk
- // back only as far as the turn boundary: the nearest input in legacy sessions, otherwise the
- // first input after the previous idle marker.
- let input = -1
- for (let index = end - 1; index >= 0; index--) {
- const message = messages[index]
- if (message.type === "idle") return input
- if (message.type !== "user" && message.type !== "synthetic") continue
- if (legacy) return index
- input = index
- }
- return input
-}
-
function hasTokenUsage(
message: SessionMessageAssistant,
): message is SessionMessageAssistant & { tokens: NonNullable } {
diff --git a/packages/tui/test/cli/tui/session-rows.test.ts b/packages/tui/test/cli/tui/session-rows.test.ts
index bc7cc3c723c3..492593339a20 100644
--- a/packages/tui/test/cli/tui/session-rows.test.ts
+++ b/packages/tui/test/cli/tui/session-rows.test.ts
@@ -2,111 +2,8 @@ import { expect, test } from "bun:test"
import type { SessionMessageAssistant, SessionMessageInfo } from "@opencode/client"
import { createMemo, createRoot } from "solid-js"
import { createStore } from "solid-js/store"
-import {
- cacheReuseDrop,
- messageBoundaryIDs,
- reduceSessionRows,
- sessionRowID,
- turnDuration,
- turnTokensPerSecond,
-} from "../../../src/routes/session/rows"
-
-test("measures turn duration from the user prompt across assistant steps", () => {
- const first = assistant("assistant-1", [])
- first.time = { created: 8_000, completed: 11_000 }
- const final = assistant("assistant-2", [])
- final.time = { created: 27_000, completed: 30_000 }
- const messages: SessionMessageInfo[] = [
- { type: "user", id: "user-1", text: "Question", time: { created: 1_000 } },
- first,
- final,
- ]
-
- expect(turnDuration(final, messages)).toBe(29_000)
-})
-
-test("measures request throughput including reasoning across model changes without tool time", () => {
- const first = assistant("assistant-1", [])
- first.time = { created: 6_000, streamed: 10_000, completed: 20_000 }
- first.tokens = { input: 10, output: 20, reasoning: 5, cache: { read: 0, write: 0 } }
- const final = assistant("assistant-2", [])
- final.model = { id: "other-model", providerID: "other-provider", variant: "other-variant" }
- final.time = { created: 24_000, streamed: 30_000, completed: 31_000 }
- final.tokens = { input: 20, output: 30, reasoning: 10, cache: { read: 0, write: 0 } }
- const messages: SessionMessageInfo[] = [
- { type: "user", id: "user-1", text: "Question", time: { created: 1_000 } },
- first,
- final,
- ]
-
- expect(turnTokensPerSecond(final, messages)).toBe(6.5)
- first.time.streamed = undefined
- expect(turnTokensPerSecond(final, messages)).toBeUndefined()
-})
-
-test("omits turn throughput when a stream boundary is unavailable", () => {
- const final = assistant("assistant-1", [])
- final.tokens = { input: 10, output: 20, reasoning: 0, cache: { read: 0, write: 0 } }
- expect(turnTokensPerSecond(final, [final])).toBeUndefined()
-})
-
-test.each([false, true])(
- "measures historical footers without later inputs or incomplete steps (indexed: %s)",
- (indexed) => {
- const step = (id: string, created: number, streamed: number, completed: number, output: number) => ({
- ...assistant(id, []),
- time: { created, streamed, completed },
- tokens: { input: 1, output, reasoning: 2, cache: { read: 0, write: 0 } },
- })
- const messages: SessionMessageInfo[] = [
- step("before-input", 0, 1_000, 2_000, 5),
- { type: "user", id: "input", text: "Question", time: { created: 3_000 } },
- step("first-step", 4_000, 5_000, 6_000, 10),
- { type: "system", id: "system", text: "Instructions", time: { created: 6_500 } },
- step("second-step", 7_000, 8_000, 9_000, 20),
- { type: "synthetic", id: "synthetic", text: "Update", time: { created: 10_000 } },
- step("after-synthetic", 11_000, 13_000, 14_000, 12),
- { type: "user", id: "later-input", text: "Next question", time: { created: 15_000 } },
- assistant("incomplete", []),
- ]
-
- expect(
- messages.flatMap((message, index) =>
- message.type === "assistant"
- ? [
- [
- turnDuration(message, messages, indexed ? index : undefined),
- turnTokensPerSecond(message, messages, indexed ? index : undefined),
- ],
- ]
- : [],
- ),
- ).toEqual([
- [2_000, 7],
- [3_000, 12],
- [6_000, 17],
- [4_000, 7],
- [0, undefined],
- ])
- },
-)
-
-test("preserves missing-anchor footer fallbacks without including the absent assistant's tokens", () => {
- const absent = assistant("absent", [])
- absent.time = { created: 8_000, streamed: 9_000, completed: 10_000 }
- absent.tokens = { input: 1, output: 900, reasoning: 0, cache: { read: 0, write: 0 } }
- const stored = assistant("stored", [])
- stored.time = { created: 6_000, streamed: 8_000, completed: 9_000 }
- stored.tokens = { input: 1, output: 20, reasoning: 0, cache: { read: 0, write: 0 } }
- const input: SessionMessageInfo = { type: "user", id: "input", text: "Question", time: { created: 5_000 } }
-
- expect(turnDuration(absent, [input, stored])).toBe(5_000)
- expect(turnTokensPerSecond(absent, [input, stored])).toBe(10)
- expect(turnDuration(absent, [stored])).toBe(2_000)
- expect(turnTokensPerSecond(absent, [stored])).toBe(10)
- expect(turnDuration(absent, [])).toBe(2_000)
- expect(turnTokensPerSecond(absent, [])).toBeUndefined()
-})
+import { SessionTurn } from "@opencode/util/session-turn"
+import { cacheReuseDrop, messageBoundaryIDs, reduceSessionRows, sessionRowID } from "../../../src/routes/session/rows"
test("indexed tail footer calculations do not subscribe to an unrelated history prefix", () => {
createRoot((dispose) => {
@@ -125,7 +22,10 @@ test("indexed tail footer calculations do not subscribe to an unrelated history
runs++
const current = messages[3]
if (current.type !== "assistant") throw new Error("Expected an assistant")
- return [turnDuration(current, messages, 3), turnTokensPerSecond(current, messages, 3)]
+ return [
+ SessionTurn.duration(messages, current, { index: 3 }),
+ SessionTurn.tokensPerSecond(messages, current, { index: 3 }),
+ ]
})
expect(footer()).toEqual([4_000, 20])
setMessages(0, { type: "user", id: "replaced-prefix", text: "Older question", time: { created: 50 } })
@@ -276,30 +176,6 @@ test("closes turn usage on the idle marker so steered steps share one footer", (
])
})
-test("measures a marker-era turn from its first prompt across steers", () => {
- const step = (id: string, created: number, streamed: number, completed: number, output: number) => ({
- ...assistant(id, []),
- time: { created, streamed, completed },
- tokens: { input: 1, output, reasoning: 0, cache: { read: 0, write: 0 } },
- })
- const messages: SessionMessageInfo[] = [
- { type: "user", id: "old-input", text: "Old question", time: { created: 0 } },
- step("old-step", 1_000, 2_000, 3_000, 5),
- { type: "idle", id: "idle-1", outcome: "succeeded", time: { created: 3_500 } },
- { type: "user", id: "input", text: "Question", time: { created: 4_000 } },
- step("first-step", 5_000, 6_000, 7_000, 10),
- { type: "user", id: "steer", text: "Also this", time: { created: 7_500 } },
- step("second-step", 8_000, 9_000, 10_000, 20),
- ]
- const final = messages[6]
- if (final.type !== "assistant") throw new Error("Expected an assistant")
-
- expect(turnDuration(final, messages)).toBe(6_000)
- expect(turnTokensPerSecond(final, messages)).toBe(15)
- expect(turnDuration(final, messages, 6, true)).toBe(2_500)
- expect(turnTokensPerSecond(final, messages, 6, true)).toBe(20)
-})
-
test("assigns assistant boundaries to the first rendered row instead of the first text row", () => {
const messages: SessionMessageInfo[] = [
{ type: "user", id: "user-1", text: "Question", time: { created: 0 } },
diff --git a/packages/util/src/session-turn.test.ts b/packages/util/src/session-turn.test.ts
new file mode 100644
index 000000000000..aa7828d4f64f
--- /dev/null
+++ b/packages/util/src/session-turn.test.ts
@@ -0,0 +1,113 @@
+import { expect, test } from "bun:test"
+import { SessionTurn } from "./session-turn.js"
+
+type Message = {
+ id: string
+ type: string
+ time: { created: number; streamed?: number; completed?: number }
+ tokens?: { output: number; reasoning: number }
+}
+
+test("measures turn duration from the user prompt across assistant steps", () => {
+ const final = step("assistant-2", { created: 27_000, completed: 30_000 })
+ const messages = [input("user-1", 1_000), step("assistant-1", { created: 8_000, completed: 11_000 }), final]
+
+ expect(SessionTurn.duration(messages, final)).toBe(29_000)
+})
+
+test("measures request throughput including reasoning without tool time", () => {
+ const first = step("assistant-1", { created: 6_000, streamed: 10_000, completed: 20_000 }, 20, 5)
+ const final = step("assistant-2", { created: 24_000, streamed: 30_000, completed: 31_000 }, 30, 10)
+ const messages = [input("user-1", 1_000), first, final]
+
+ expect(SessionTurn.tokensPerSecond(messages, final)).toBe(6.5)
+ first.time.streamed = undefined
+ expect(SessionTurn.tokensPerSecond(messages, final)).toBeUndefined()
+})
+
+test("omits turn throughput when a stream boundary is unavailable", () => {
+ const final = step("assistant-1", { created: 1 }, 20)
+ expect(SessionTurn.tokensPerSecond([final], final)).toBeUndefined()
+})
+
+test.each([false, true])(
+ "measures historical footers without later inputs or incomplete steps (indexed: %s)",
+ (indexed) => {
+ const timed = (id: string, created: number, streamed: number, completed: number, output: number) =>
+ step(id, { created, streamed, completed }, output, 2)
+ const messages: Message[] = [
+ timed("before-input", 0, 1_000, 2_000, 5),
+ input("input", 3_000),
+ timed("first-step", 4_000, 5_000, 6_000, 10),
+ { type: "system", id: "system", time: { created: 6_500 } },
+ timed("second-step", 7_000, 8_000, 9_000, 20),
+ { type: "synthetic", id: "synthetic", time: { created: 10_000 } },
+ timed("after-synthetic", 11_000, 13_000, 14_000, 12),
+ input("later-input", 15_000),
+ step("incomplete", { created: 1 }),
+ ]
+
+ expect(
+ messages.flatMap((message, index) => {
+ if (message.type !== "assistant") return []
+ const options = { index: indexed ? index : undefined }
+ return [
+ [SessionTurn.duration(messages, message, options), SessionTurn.tokensPerSecond(messages, message, options)],
+ ]
+ }),
+ ).toEqual([
+ [2_000, 7],
+ [3_000, 12],
+ [6_000, 17],
+ [4_000, 7],
+ [0, undefined],
+ ])
+ },
+)
+
+test("preserves missing-anchor fallbacks without including the absent assistant's tokens", () => {
+ const absent = step("absent", { created: 8_000, streamed: 9_000, completed: 10_000 }, 900)
+ const stored = step("stored", { created: 6_000, streamed: 8_000, completed: 9_000 }, 20)
+ const prompt = input("input", 5_000)
+
+ expect(SessionTurn.duration([prompt, stored], absent)).toBe(5_000)
+ expect(SessionTurn.tokensPerSecond([prompt, stored], absent)).toBe(10)
+ expect(SessionTurn.duration([stored], absent)).toBe(2_000)
+ expect(SessionTurn.tokensPerSecond([stored], absent)).toBe(10)
+ expect(SessionTurn.duration([], absent)).toBe(2_000)
+ expect(SessionTurn.tokensPerSecond([], absent)).toBeUndefined()
+})
+
+test("measures a marker-era turn from its first prompt across steers", () => {
+ const timed = (id: string, created: number, streamed: number, completed: number, output: number) =>
+ step(id, { created, streamed, completed }, output)
+ const final = timed("second-step", 8_000, 9_000, 10_000, 20)
+ const messages: Message[] = [
+ input("old-input", 0),
+ timed("old-step", 1_000, 2_000, 3_000, 5),
+ { type: "idle", id: "idle-1", time: { created: 3_500 } },
+ input("input", 4_000),
+ timed("first-step", 5_000, 6_000, 7_000, 10),
+ input("steer", 7_500),
+ final,
+ ]
+
+ expect(SessionTurn.legacy(messages)).toBe(false)
+ expect(SessionTurn.duration(messages, final)).toBe(6_000)
+ expect(SessionTurn.tokensPerSecond(messages, final)).toBe(15)
+ expect(SessionTurn.duration(messages, final, { index: 6, legacy: true })).toBe(2_500)
+ expect(SessionTurn.tokensPerSecond(messages, final, { index: 6, legacy: true })).toBe(20)
+})
+
+function input(id: string, created: number): Message {
+ return { type: "user", id, time: { created } }
+}
+
+function step(id: string, time: Message["time"], output?: number, reasoning = 0): Message {
+ return {
+ type: "assistant",
+ id,
+ time,
+ tokens: output === undefined ? undefined : { output, reasoning },
+ }
+}
diff --git a/packages/util/src/session-turn.ts b/packages/util/src/session-turn.ts
new file mode 100644
index 000000000000..ffcb4407922f
--- /dev/null
+++ b/packages/util/src/session-turn.ts
@@ -0,0 +1,64 @@
+export * as SessionTurn from "./session-turn.js"
+
+/** The fields of a session message that turn measurements read. Client session messages satisfy it as they are. */
+export interface Message {
+ readonly id: string
+ readonly type: string
+ readonly time: { readonly created: number; readonly streamed?: number; readonly completed?: number }
+ readonly tokens?: { readonly output: number; readonly reasoning: number }
+}
+
+export interface Options {
+ /** The position of `message` in `messages`. Reactive callers should pass it so the lookup does not read every message. */
+ readonly index?: number
+ /**
+ * Whether the session has no idle markers, so a turn ends at the next prompt. Reactive callers should pass it from a
+ * shared memo: the default scans every message, which subscribes the caller to the whole history.
+ */
+ readonly legacy?: boolean
+}
+
+/** Milliseconds from the prompt that started the turn until `message` completed, or 0 while it runs. */
+export function duration(messages: readonly Message[], message: Message, options: Options = {}) {
+ if (message.time.completed === undefined) return 0
+ const index = options.index ?? messages.findIndex((item) => item.id === message.id)
+ const input =
+ messages[inputIndex(messages, index === -1 ? messages.length : index, options.legacy ?? legacy(messages))]
+ return Math.max(0, message.time.completed - (input?.time.created ?? message.time.created))
+}
+
+/** Output and reasoning tokens per second across the turn's steps up to `message`, or undefined until every step has streamed. */
+export function tokensPerSecond(messages: readonly Message[], message: Message, options: Options = {}) {
+ const index = options.index ?? messages.findIndex((item) => item.id === message.id)
+ const end = index === -1 ? messages.length : index + 1
+ const start = inputIndex(messages, end, options.legacy ?? legacy(messages))
+ const steps = messages.slice(start + 1, end).filter((item) => item.type === "assistant")
+ const durations = steps.flatMap((step) =>
+ step.time.streamed === undefined ? [] : [Math.max(0, step.time.streamed - step.time.created)],
+ )
+ if (steps.length === 0 || durations.length !== steps.length) return
+ const output = steps.reduce((total, step) => total + (step.tokens?.output ?? 0) + (step.tokens?.reasoning ?? 0), 0)
+ const total = durations.reduce((sum, value) => sum + value, 0)
+ if (output <= 0 || total <= 0) return
+ // Aggregate before dividing so each step is weighted by its provider-active duration.
+ return output / (total / 1_000)
+}
+
+export function legacy(messages: readonly Message[]) {
+ return !messages.some((message) => message.type === "idle")
+}
+
+function inputIndex(messages: readonly Message[], end: number, legacy: boolean) {
+ // Reading a sliced prefix subscribes every caller to unrelated historical messages, so walk
+ // back only as far as the turn boundary: the nearest input in legacy sessions, otherwise the
+ // first input after the previous idle marker.
+ let input = -1
+ for (let index = end - 1; index >= 0; index--) {
+ const message = messages[index]
+ if (message.type === "idle") return input
+ if (message.type !== "user" && message.type !== "synthetic") continue
+ if (legacy) return index
+ input = index
+ }
+ return input
+}
From e355d286ec765dce50404776ea9aa972e0b9db12 Mon Sep 17 00:00:00 2001
From: Luke Parker <10430890+Hona@users.noreply.github.com>
Date: Thu, 22 Oct 2026 07:52:55 +1000
Subject: [PATCH 2/3] fix(app): describe turn throughput in the debug bar
tooltip
---
packages/gui-extensions/src/debug/i18n/am.ts | 2 +-
packages/gui-extensions/src/debug/i18n/ar.ts | 2 +-
packages/gui-extensions/src/debug/i18n/az.ts | 2 +-
packages/gui-extensions/src/debug/i18n/bg.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/bn.ts | 2 +-
packages/gui-extensions/src/debug/i18n/br.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/bs.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/ca.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/cs.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/da.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/de.ts | 2 +-
packages/gui-extensions/src/debug/i18n/dv.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/dz.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/el.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/en.ts | 2 +-
packages/gui-extensions/src/debug/i18n/es.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/et.ts | 2 +-
packages/gui-extensions/src/debug/i18n/fa.ts | 2 +-
packages/gui-extensions/src/debug/i18n/fi.ts | 2 +-
packages/gui-extensions/src/debug/i18n/fo.ts | 2 +-
packages/gui-extensions/src/debug/i18n/fr.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/he.ts | 2 +-
packages/gui-extensions/src/debug/i18n/hi.ts | 2 +-
packages/gui-extensions/src/debug/i18n/hr.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/hu.ts | 2 +-
packages/gui-extensions/src/debug/i18n/hy.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/id.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/is.ts | 2 +-
packages/gui-extensions/src/debug/i18n/it.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/ja.ts | 2 +-
packages/gui-extensions/src/debug/i18n/ka.ts | 2 +-
packages/gui-extensions/src/debug/i18n/km.ts | 2 +-
packages/gui-extensions/src/debug/i18n/ko.ts | 2 +-
packages/gui-extensions/src/debug/i18n/lo.ts | 2 +-
packages/gui-extensions/src/debug/i18n/lt.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/lv.ts | 2 +-
packages/gui-extensions/src/debug/i18n/mk.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/mn.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/ms.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/my.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/ne.ts | 2 +-
packages/gui-extensions/src/debug/i18n/nl.ts | 2 +-
packages/gui-extensions/src/debug/i18n/no.ts | 2 +-
packages/gui-extensions/src/debug/i18n/pa.ts | 2 +-
packages/gui-extensions/src/debug/i18n/pl.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/ro.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/ru.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/si.ts | 2 +-
packages/gui-extensions/src/debug/i18n/sk.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/sl.ts | 2 +-
packages/gui-extensions/src/debug/i18n/sq.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/sr.ts | 2 +-
packages/gui-extensions/src/debug/i18n/sv.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/tg.ts | 2 +-
packages/gui-extensions/src/debug/i18n/th.ts | 2 +-
packages/gui-extensions/src/debug/i18n/tk.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/tr.ts | 2 +-
packages/gui-extensions/src/debug/i18n/uk.ts | 2 +-
packages/gui-extensions/src/debug/i18n/ur.ts | 2 +-
packages/gui-extensions/src/debug/i18n/uz.ts | 2 +-
packages/gui-extensions/src/debug/i18n/vi.ts | 3 ++-
packages/gui-extensions/src/debug/i18n/zh.ts | 2 +-
packages/gui-extensions/src/debug/i18n/zht.ts | 2 +-
63 files changed, 91 insertions(+), 63 deletions(-)
diff --git a/packages/gui-extensions/src/debug/i18n/am.ts b/packages/gui-extensions/src/debug/i18n/am.ts
index 8ca5c81c7703..a213b2d61e5c 100644
--- a/packages/gui-extensions/src/debug/i18n/am.ts
+++ b/packages/gui-extensions/src/debug/i18n/am.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ የመጀመሪያው የመልስ ጽሑፍ ድረስ ያለው ጊዜ።",
"tps.label": "TPS",
- "tps.tip": "ከሞዴሉ የመጀመሪያ ውጤት በኋላ በሰከንድ የሚወጡ ቶከኖች።",
+ "tps.tip": "በመጨረሻው ዙር የሞዴል ጥያቄዎች ውስጥ በሰከንድ የሚወጡ የውጤት እና የማሰብ ቶከኖች፣ የመሳሪያ ጊዜን ሳይጨምር።",
"e2e.label": "E2E",
"e2e.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ የምላሽ ዥረቱ መጨረሻ ድረስ ያለው ጊዜ።",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ar.ts b/packages/gui-extensions/src/debug/i18n/ar.ts
index eacd5950e841..e2c4bd82fa82 100644
--- a/packages/gui-extensions/src/debug/i18n/ar.ts
+++ b/packages/gui-extensions/src/debug/i18n/ar.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "الوقت من إرسال طلب المزوّد إلى أول نص في الإجابة.",
"tps.label": "TPS",
- "tps.tip": "رموز الإخراج في الثانية بعد أول مخرجات للنموذج.",
+ "tps.tip": "رموز الإخراج والاستدلال في الثانية عبر طلبات النموذج في الدورة الأخيرة، باستثناء وقت الأدوات.",
"e2e.label": "E2E",
"e2e.tip": "الوقت من إرسال طلب المزوّد حتى انتهاء تدفق استجابته.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/az.ts b/packages/gui-extensions/src/debug/i18n/az.ts
index 9ca687ad78c6..d67691555806 100644
--- a/packages/gui-extensions/src/debug/i18n/az.ts
+++ b/packages/gui-extensions/src/debug/i18n/az.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Provayder sorğusunun göndərilməsindən cavabın ilk mətninə qədər olan vaxt.",
"tps.label": "TPS",
- "tps.tip": "Modelin ilk çıxışından sonra saniyədə çıxış tokenlərinin sayı.",
+ "tps.tip": "Son növbənin model sorğuları üzrə saniyədə çıxış və düşünmə tokenləri, alət vaxtı istisna olmaqla.",
"e2e.label": "E2E",
"e2e.tip": "Provayder sorğusunun göndərilməsindən cavab axınının bitməsinə qədər olan vaxt.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/bg.ts b/packages/gui-extensions/src/debug/i18n/bg.ts
index 45288e68ae94..710f66f4aa75 100644
--- a/packages/gui-extensions/src/debug/i18n/bg.ts
+++ b/packages/gui-extensions/src/debug/i18n/bg.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Време от изпращането на заявката към доставчика до първия текст на отговора.",
"tps.label": "TPS",
- "tps.tip": "Изходни токени в секунда след първия изход от модела.",
+ "tps.tip":
+ "Изходни токени и токени за разсъждение в секунда за заявките към модела в последния ход, без времето на инструментите.",
"e2e.label": "E2E",
"e2e.tip": "Време от изпращането на заявката към доставчика до края на потока с отговора.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/bn.ts b/packages/gui-extensions/src/debug/i18n/bn.ts
index f93c036216e3..664910cfdef3 100644
--- a/packages/gui-extensions/src/debug/i18n/bn.ts
+++ b/packages/gui-extensions/src/debug/i18n/bn.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে উত্তরের প্রথম লেখা পর্যন্ত সময়।",
"tps.label": "TPS",
- "tps.tip": "মডেলের প্রথম আউটপুটের পর প্রতি সেকেন্ডে আউটপুট টোকেনের সংখ্যা।",
+ "tps.tip": "সর্বশেষ টার্নের মডেল অনুরোধগুলিতে প্রতি সেকেন্ডে আউটপুট ও রিজনিং টোকেন, টুলের সময় বাদে।",
"e2e.label": "E2E",
"e2e.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে তার প্রতিক্রিয়া স্ট্রিম শেষ হওয়া পর্যন্ত সময়।",
"nav.label": "এনএভি",
diff --git a/packages/gui-extensions/src/debug/i18n/br.ts b/packages/gui-extensions/src/debug/i18n/br.ts
index 71b61e4ad3a9..1e1e2c5c9236 100644
--- a/packages/gui-extensions/src/debug/i18n/br.ts
+++ b/packages/gui-extensions/src/debug/i18n/br.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tempo entre o envio da solicitação ao provedor e o primeiro texto da resposta.",
"tps.label": "TPS",
- "tps.tip": "Tokens de saída por segundo após a primeira saída do modelo.",
+ "tps.tip":
+ "Tokens de saída e de raciocínio por segundo nas requisições ao modelo do último turno, sem contar o tempo das ferramentas.",
"e2e.label": "E2E",
"e2e.tip": "Tempo entre o envio da solicitação ao provedor e o fim do fluxo de resposta.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/bs.ts b/packages/gui-extensions/src/debug/i18n/bs.ts
index 3c54d9d17e75..c2ef495488c3 100644
--- a/packages/gui-extensions/src/debug/i18n/bs.ts
+++ b/packages/gui-extensions/src/debug/i18n/bs.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Vrijeme od slanja zahtjeva pružaocu do prvog teksta odgovora.",
"tps.label": "TPS",
- "tps.tip": "Izlazni tokeni u sekundi nakon prvog izlaza modela.",
+ "tps.tip":
+ "Izlazni tokeni i tokeni rasuđivanja u sekundi kroz zahtjeve modelu u posljednjem potezu, bez vremena alata.",
"e2e.label": "E2E",
"e2e.tip": "Vrijeme od slanja zahtjeva pružaocu do završetka toka odgovora.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ca.ts b/packages/gui-extensions/src/debug/i18n/ca.ts
index f6129cd5ca1a..6da7c887bdd8 100644
--- a/packages/gui-extensions/src/debug/i18n/ca.ts
+++ b/packages/gui-extensions/src/debug/i18n/ca.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins al primer text de resposta.",
"tps.label": "TPS",
- "tps.tip": "Fitxes de sortida per segon després de la primera sortida del model.",
+ "tps.tip":
+ "Fitxes de sortida i de raonament per segon en les peticions al model de l'últim torn, sense comptar el temps de les eines.",
"e2e.label": "E2E",
"e2e.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins que finalitza el flux de resposta.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/cs.ts b/packages/gui-extensions/src/debug/i18n/cs.ts
index 5dee10ec2b3c..a14fdc37271f 100644
--- a/packages/gui-extensions/src/debug/i18n/cs.ts
+++ b/packages/gui-extensions/src/debug/i18n/cs.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Doba od odeslání požadavku poskytovateli do prvního textu odpovědi.",
"tps.label": "TPS",
- "tps.tip": "Počet výstupních tokenů za sekundu po prvním výstupu modelu.",
+ "tps.tip":
+ "Výstupní tokeny a tokeny uvažování za sekundu napříč požadavky na model v posledním tahu, bez času nástrojů.",
"e2e.label": "E2E",
"e2e.tip": "Doba od odeslání požadavku poskytovateli do ukončení proudu odpovědi.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/da.ts b/packages/gui-extensions/src/debug/i18n/da.ts
index 858267f3cad9..d71578c16a28 100644
--- a/packages/gui-extensions/src/debug/i18n/da.ts
+++ b/packages/gui-extensions/src/debug/i18n/da.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tid fra afsendelse af udbyderanmodningen til den første svartekst.",
"tps.label": "TPS",
- "tps.tip": "Outputtokens pr. sekund efter modellens første output.",
+ "tps.tip":
+ "Output- og ræsonneringstokens pr. sekund på tværs af den seneste turs modelforespørgsler, uden værktøjstid.",
"e2e.label": "E2E",
"e2e.tip": "Tid fra afsendelse af udbyderanmodningen, til dens svarstream sluttede.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/de.ts b/packages/gui-extensions/src/debug/i18n/de.ts
index 4cf06ac31f86..73bf6d81b8eb 100644
--- a/packages/gui-extensions/src/debug/i18n/de.ts
+++ b/packages/gui-extensions/src/debug/i18n/de.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Zeit vom Senden der Anbieteranfrage bis zum ersten Antworttext.",
"tps.label": "TPS",
- "tps.tip": "Ausgabetokens pro Sekunde nach der ersten Modellausgabe.",
+ "tps.tip": "Ausgabe- und Reasoning-Tokens pro Sekunde über die Modellanfragen der letzten Runde, ohne Werkzeugzeit.",
"e2e.label": "E2E",
"e2e.tip": "Zeit vom Senden der Anbieteranfrage bis zum Ende ihres Antwortstreams.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/dv.ts b/packages/gui-extensions/src/debug/i18n/dv.ts
index 4d62c9b8238e..d2e797e2505d 100644
--- a/packages/gui-extensions/src/debug/i18n/dv.ts
+++ b/packages/gui-extensions/src/debug/i18n/dv.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ޖަވާބުގެ ފުރަތަމަ ލިޔުން ލިބެންދެން ދާ ވަގުތު।",
"tps.label": "TPS",
- "tps.tip": "ފުރަތަމަ މޮޑެލް އައުޓްޕުޓަށްފަހު ސިކުންތަކަށް އައުޓްޕުޓް ޓޯކަންތައް۔",
+ "tps.tip":
+ "އެންމެ ފަހުގެ ޓާރންގެ މޮޑެލް ރިކުއެސްޓްތަކުގައި ސިކުންތަކަށް އައުޓްޕުޓް އަދި ރީޒަނިންގ ޓޯކަންތައް، ޓޫލްގެ ވަގުތު ނުހިމަނައި.",
"e2e.label": "E2E",
"e2e.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ޖަވާބުގެ ސްޓްރީމް ނިމެންދެން ދާ ވަގުތު۔",
"nav.label": "NAV އެވެ",
diff --git a/packages/gui-extensions/src/debug/i18n/dz.ts b/packages/gui-extensions/src/debug/i18n/dz.ts
index 0e9491e400d3..d30f5d4b2305 100644
--- a/packages/gui-extensions/src/debug/i18n/dz.ts
+++ b/packages/gui-extensions/src/debug/i18n/dz.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་ལན་གྱི་ཚིག་ཡིག་དང་པ་ཚུན་གྱི་དུས་ཚོད།",
"tps.label": "TPS",
- "tps.tip": "དཔེ་ཚད་ཀྱི་ཐོན་འབྲས་དང་པའི་ཤུལ་ལས་སྐར་ཆ་རེར་ཐོན་འབྲས་ཊོ་ཀེན།",
+ "tps.tip":
+ "མཐའ་མཇུག་གི་རིམ་པའི་དཔེ་ཚད་ཞུ་བ་ཚུ་ནང་ སྐར་ཆ་རེར་ཐོན་འབྲས་དང་བསམ་གཞིགས་ཊོ་ཀེན་ ལག་ཆའི་དུས་ཚོད་མ་བརྩིས་པར།",
"e2e.label": "E2E",
"e2e.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་ལན་གྱི་རྒྱུན་ལམ་མཇུག་བསྡུ་ཚུན་གྱི་དུས་ཚོད།",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/el.ts b/packages/gui-extensions/src/debug/i18n/el.ts
index 43f5c6e1b020..61da0ec7a63c 100644
--- a/packages/gui-extensions/src/debug/i18n/el.ts
+++ b/packages/gui-extensions/src/debug/i18n/el.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως το πρώτο κείμενο απάντησης.",
"tps.label": "TPS",
- "tps.tip": "Διακριτικά εξόδου ανά δευτερόλεπτο μετά την πρώτη έξοδο του μοντέλου.",
+ "tps.tip":
+ "Διακριτικά εξόδου και συλλογισμού ανά δευτερόλεπτο στα αιτήματα προς το μοντέλο του τελευταίου γύρου, χωρίς τον χρόνο των εργαλείων.",
"e2e.label": "E2E",
"e2e.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως τη λήξη της ροής απάντησης.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/en.ts b/packages/gui-extensions/src/debug/i18n/en.ts
index 2f397cbccdcc..0e1db0d9ff55 100644
--- a/packages/gui-extensions/src/debug/i18n/en.ts
+++ b/packages/gui-extensions/src/debug/i18n/en.ts
@@ -10,7 +10,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Time from provider request dispatch to the first answer text.",
"tps.label": "TPS",
- "tps.tip": "Output tokens per second after the first model output.",
+ "tps.tip": "Output and reasoning tokens per second across the latest turn's model requests, excluding tool time.",
"e2e.label": "E2E",
"e2e.tip": "Time from provider request dispatch until its response stream ended.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/es.ts b/packages/gui-extensions/src/debug/i18n/es.ts
index 8874a29c1931..b4a75816fa5d 100644
--- a/packages/gui-extensions/src/debug/i18n/es.ts
+++ b/packages/gui-extensions/src/debug/i18n/es.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tiempo desde el envío de la solicitud al proveedor hasta el primer texto de respuesta.",
"tps.label": "TPS",
- "tps.tip": "Tókenes de salida por segundo después de la primera salida del modelo.",
+ "tps.tip":
+ "Tókenes de salida y de razonamiento por segundo en las solicitudes al modelo del último turno, sin contar el tiempo de las herramientas.",
"e2e.label": "E2E",
"e2e.tip": "Tiempo desde el envío de la solicitud al proveedor hasta que finaliza el flujo de respuesta.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/et.ts b/packages/gui-extensions/src/debug/i18n/et.ts
index b284a61eed3c..a1953cfdceb1 100644
--- a/packages/gui-extensions/src/debug/i18n/et.ts
+++ b/packages/gui-extensions/src/debug/i18n/et.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Aeg pakkujale päringu saatmisest esimese vastusetekstini.",
"tps.label": "TPS",
- "tps.tip": "Väljundmärke sekundis pärast mudeli esimest väljundit.",
+ "tps.tip": "Väljund- ja arutlusmärgid sekundis viimase käigu mudelipäringute lõikes, ilma tööriistade ajata.",
"e2e.label": "E2E",
"e2e.tip": "Aeg pakkujale päringu saatmisest vastusevoo lõppemiseni.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/fa.ts b/packages/gui-extensions/src/debug/i18n/fa.ts
index 90ff09402ee8..286e7b7608eb 100644
--- a/packages/gui-extensions/src/debug/i18n/fa.ts
+++ b/packages/gui-extensions/src/debug/i18n/fa.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "زمان بین ارسال درخواست ارائهدهنده و نخستین متن پاسخ.",
"tps.label": "TPS",
- "tps.tip": "توکنهای خروجی در ثانیه پس از نخستین خروجی مدل.",
+ "tps.tip": "توکنهای خروجی و استدلال در ثانیه در درخواستهای مدل در آخرین نوبت، بدون احتساب زمان ابزارها.",
"e2e.label": "E2E",
"e2e.tip": "زمان بین ارسال درخواست ارائهدهنده و پایان جریان پاسخ آن.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/fi.ts b/packages/gui-extensions/src/debug/i18n/fi.ts
index d22a8e0f48b2..64ed9ed3f903 100644
--- a/packages/gui-extensions/src/debug/i18n/fi.ts
+++ b/packages/gui-extensions/src/debug/i18n/fi.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Aika palveluntarjoajapyynnön lähettämisestä ensimmäiseen vastaustekstiin.",
"tps.label": "TPS",
- "tps.tip": "Tulostokeneita sekunnissa mallin ensimmäisen tulosteen jälkeen.",
+ "tps.tip": "Tuloste- ja päättelytokeneita sekunnissa viimeisimmän vuoron mallipyynnöissä, ilman työkalujen aikaa.",
"e2e.label": "E2E",
"e2e.tip": "Aika palveluntarjoajapyynnön lähettämisestä vastausvirran päättymiseen.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/fo.ts b/packages/gui-extensions/src/debug/i18n/fo.ts
index 3d1a4fc6c47a..8aa90d93af44 100644
--- a/packages/gui-extensions/src/debug/i18n/fo.ts
+++ b/packages/gui-extensions/src/debug/i18n/fo.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til fyrsti svarteksturin.",
"tps.label": "TPS",
- "tps.tip": "Útflutningsmerki um sekundið eftir fyrsta úttakið frá modellinum.",
+ "tps.tip": "Úttaks- og hugsunarmerki um sekundið í seinasta umfarsins fyrispurningum til modellið, uttan amboðstíð.",
"e2e.label": "E2E",
"e2e.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til svarstreymurin endar.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/fr.ts b/packages/gui-extensions/src/debug/i18n/fr.ts
index 3134b5c8fa77..ef6559c25f70 100644
--- a/packages/gui-extensions/src/debug/i18n/fr.ts
+++ b/packages/gui-extensions/src/debug/i18n/fr.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Temps entre l’envoi de la requête au fournisseur et le premier texte de réponse.",
"tps.label": "TPS",
- "tps.tip": "Jetons de sortie par seconde après la première sortie du modèle.",
+ "tps.tip":
+ "Jetons de sortie et de raisonnement par seconde sur les requêtes au modèle du dernier tour, hors temps des outils.",
"e2e.label": "E2E",
"e2e.tip": "Temps entre l’envoi de la requête au fournisseur et la fin du flux de réponse.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/he.ts b/packages/gui-extensions/src/debug/i18n/he.ts
index 623565a1e41a..95e2475b7334 100644
--- a/packages/gui-extensions/src/debug/i18n/he.ts
+++ b/packages/gui-extensions/src/debug/i18n/he.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "הזמן משליחת בקשת הספק עד לטקסט הראשון בתשובה.",
"tps.label": "TPS",
- "tps.tip": "אסימוני פלט לשנייה לאחר הפלט הראשון של הדגם.",
+ "tps.tip": "אסימוני פלט וחשיבה לשנייה בבקשות למודל בתור האחרון, ללא זמן הכלים.",
"e2e.label": "E2E",
"e2e.tip": "הזמן משליחת בקשת הספק עד לסיום זרם התגובה שלו.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/hi.ts b/packages/gui-extensions/src/debug/i18n/hi.ts
index 902efc1c0425..d520264b7296 100644
--- a/packages/gui-extensions/src/debug/i18n/hi.ts
+++ b/packages/gui-extensions/src/debug/i18n/hi.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "प्रोवाइडर अनुरोध भेजे जाने से उत्तर का पहला टेक्स्ट मिलने तक का समय।",
"tps.label": "TPS",
- "tps.tip": "मॉडल के पहले आउटपुट के बाद प्रति सेकंड आउटपुट टोकन।",
+ "tps.tip": "नवीनतम टर्न के मॉडल अनुरोधों में प्रति सेकंड आउटपुट और रीज़निंग टोकन, टूल के समय को छोड़कर।",
"e2e.label": "E2E",
"e2e.tip": "प्रोवाइडर अनुरोध भेजे जाने से उसकी रिस्पॉन्स स्ट्रीम समाप्त होने तक का समय।",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/hr.ts b/packages/gui-extensions/src/debug/i18n/hr.ts
index 5d559185533d..2b9c2809465b 100644
--- a/packages/gui-extensions/src/debug/i18n/hr.ts
+++ b/packages/gui-extensions/src/debug/i18n/hr.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Vrijeme od slanja zahtjeva pružatelju do prvog teksta odgovora.",
"tps.label": "TPS",
- "tps.tip": "Izlazni tokeni u sekundi nakon prvog izlaza modela.",
+ "tps.tip":
+ "Izlazni tokeni i tokeni rasuđivanja u sekundi kroz zahtjeve modelu u posljednjem potezu, bez vremena alata.",
"e2e.label": "E2E",
"e2e.tip": "Vrijeme od slanja zahtjeva pružatelju do završetka toka odgovora.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/hu.ts b/packages/gui-extensions/src/debug/i18n/hu.ts
index 5b40e5b4ff70..0d54a430234f 100644
--- a/packages/gui-extensions/src/debug/i18n/hu.ts
+++ b/packages/gui-extensions/src/debug/i18n/hu.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "A szolgáltatói kérés elküldésétől az első válaszszövegig eltelt idő.",
"tps.label": "TPS",
- "tps.tip": "Kimeneti tokenek másodpercenként a modell első kimenete után.",
+ "tps.tip": "Kimeneti és gondolkodási tokenek másodpercenként a legutóbbi kör modellkérésein, az eszközidő nélkül.",
"e2e.label": "E2E",
"e2e.tip": "A szolgáltatói kérés elküldésétől a válaszfolyam végéig eltelt idő.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/hy.ts b/packages/gui-extensions/src/debug/i18n/hy.ts
index c8b54b8c8a57..5552c27007fa 100644
--- a/packages/gui-extensions/src/debug/i18n/hy.ts
+++ b/packages/gui-extensions/src/debug/i18n/hy.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Մատակարարին հարցումն ուղարկելուց մինչև պատասխանի առաջին տեքստը ընկած ժամանակը։",
"tps.label": "TPS",
- "tps.tip": "Ելքային տոկենների քանակը վայրկյանում՝ մոդելի առաջին ելքից հետո։",
+ "tps.tip":
+ "Ելքային և դատողության տոկենների քանակը վայրկյանում՝ վերջին հերթի մոդելային հարցումներում, առանց գործիքների ժամանակի։",
"e2e.label": "E2E",
"e2e.tip": "Մատակարարին հարցումն ուղարկելուց մինչև պատասխանի հոսքի ավարտը ընկած ժամանակը։",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/id.ts b/packages/gui-extensions/src/debug/i18n/id.ts
index 81a924567156..4c4fb8473320 100644
--- a/packages/gui-extensions/src/debug/i18n/id.ts
+++ b/packages/gui-extensions/src/debug/i18n/id.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Waktu sejak permintaan dikirim ke penyedia hingga teks jawaban pertama.",
"tps.label": "TPS",
- "tps.tip": "Jumlah token keluaran per detik setelah keluaran pertama model.",
+ "tps.tip":
+ "Token keluaran dan penalaran per detik di seluruh permintaan model pada giliran terakhir, tanpa waktu alat.",
"e2e.label": "E2E",
"e2e.tip": "Waktu sejak permintaan dikirim ke penyedia hingga aliran responsnya berakhir.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/is.ts b/packages/gui-extensions/src/debug/i18n/is.ts
index 336055d2588a..fffb0957655f 100644
--- a/packages/gui-extensions/src/debug/i18n/is.ts
+++ b/packages/gui-extensions/src/debug/i18n/is.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til fyrsti svartextinn berst.",
"tps.label": "TPS",
- "tps.tip": "Úttakstókar á sekúndu eftir fyrsta úttak líkansins.",
+ "tps.tip": "Úttaks- og rökhugsunartókar á sekúndu í líkansbeiðnum síðustu umferðar, án tíma verkfæra.",
"e2e.label": "E2E",
"e2e.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til svarstraumnum lýkur.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/it.ts b/packages/gui-extensions/src/debug/i18n/it.ts
index b4040a5cc9f3..c2f0c4887089 100644
--- a/packages/gui-extensions/src/debug/i18n/it.ts
+++ b/packages/gui-extensions/src/debug/i18n/it.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tempo dall’invio della richiesta al provider al primo testo della risposta.",
"tps.label": "TPS",
- "tps.tip": "Token di output al secondo dopo il primo output del modello.",
+ "tps.tip":
+ "Token di output e di ragionamento al secondo nelle richieste al modello dell'ultimo turno, escluso il tempo degli strumenti.",
"e2e.label": "E2E",
"e2e.tip": "Tempo dall’invio della richiesta al provider alla fine del flusso di risposta.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ja.ts b/packages/gui-extensions/src/debug/i18n/ja.ts
index 18b29b3b47cf..a2379cb60a23 100644
--- a/packages/gui-extensions/src/debug/i18n/ja.ts
+++ b/packages/gui-extensions/src/debug/i18n/ja.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "プロバイダーへのリクエスト送信から最初の回答テキストまでの時間。",
"tps.label": "TPS",
- "tps.tip": "モデルの最初の出力後に生成される1秒あたりの出力トークン数。",
+ "tps.tip": "直近のターンのモデルリクエスト全体での1秒あたりの出力・推論トークン数(ツールの実行時間を除く)。",
"e2e.label": "E2E",
"e2e.tip": "プロバイダーへのリクエスト送信から応答ストリームの終了までの時間。",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ka.ts b/packages/gui-extensions/src/debug/i18n/ka.ts
index c25062a428e0..2794c2d12da9 100644
--- a/packages/gui-extensions/src/debug/i18n/ka.ts
+++ b/packages/gui-extensions/src/debug/i18n/ka.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან პასუხის პირველ ტექსტამდე.",
"tps.label": "TPS",
- "tps.tip": "გამომავალი ტოკენების რაოდენობა წამში მოდელის პირველი გამომავალი მონაცემის შემდეგ.",
+ "tps.tip": "გამომავალი და მსჯელობის ტოკენები წამში ბოლო სვლის მოდელის მოთხოვნებში, ხელსაწყოების დროის გარეშე.",
"e2e.label": "E2E",
"e2e.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან პასუხის ნაკადის დასრულებამდე.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/km.ts b/packages/gui-extensions/src/debug/i18n/km.ts
index eb48543699fe..40327c4ce61a 100644
--- a/packages/gui-extensions/src/debug/i18n/km.ts
+++ b/packages/gui-extensions/src/debug/i18n/km.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់អត្ថបទចម្លើយដំបូង។",
"tps.label": "TPS",
- "tps.tip": "ចំនួនថូខឹនលទ្ធផលក្នុងមួយវិនាទី បន្ទាប់ពីលទ្ធផលដំបូងរបស់ម៉ូដែល។",
+ "tps.tip": "ថូខឹនលទ្ធផល និងការវែកញែកក្នុងមួយវិនាទី លើសំណើម៉ូដែលនៃវេនចុងក្រោយ ដោយមិនរាប់ពេលវេលាឧបករណ៍។",
"e2e.label": "E2E",
"e2e.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់ស្ទ្រីមឆ្លើយតបបញ្ចប់។",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ko.ts b/packages/gui-extensions/src/debug/i18n/ko.ts
index 35fcc093734b..2db8da35a8b5 100644
--- a/packages/gui-extensions/src/debug/i18n/ko.ts
+++ b/packages/gui-extensions/src/debug/i18n/ko.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "공급자 요청 전송부터 첫 답변 텍스트까지 걸린 시간입니다.",
"tps.label": "TPS",
- "tps.tip": "모델의 첫 출력 이후 초당 출력 토큰 수입니다.",
+ "tps.tip": "최근 턴의 모델 요청 전체에서 초당 출력 및 추론 토큰 수입니다. 도구 시간은 제외됩니다.",
"e2e.label": "E2E",
"e2e.tip": "공급자 요청 전송부터 응답 스트림이 끝날 때까지 걸린 시간입니다.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/lo.ts b/packages/gui-extensions/src/debug/i18n/lo.ts
index 657a6c5198ca..15089bf60c23 100644
--- a/packages/gui-extensions/src/debug/i18n/lo.ts
+++ b/packages/gui-extensions/src/debug/i18n/lo.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນເຖິງຂໍ້ຄວາມຄຳຕອບທຳອິດ.",
"tps.label": "TPS",
- "tps.tip": "ຈຳນວນໂທເຄັນຜົນລັບຕໍ່ວິນາທີ ຫຼັງຈາກຜົນລັບທຳອິດຂອງໂມເດວ.",
+ "tps.tip": "ໂທເຄັນຜົນລັບ ແລະ ການໃຫ້ເຫດຜົນຕໍ່ວິນາທີ ໃນຄຳຮ້ອງຂໍໂມເດວຂອງຮອບຫຼ້າສຸດ ໂດຍບໍ່ນັບເວລາຂອງເຄື່ອງມື.",
"e2e.label": "E2E",
"e2e.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນກະແສການຕອບກັບສິ້ນສຸດ.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/lt.ts b/packages/gui-extensions/src/debug/i18n/lt.ts
index a532a86414f2..993ecf0fd4e0 100644
--- a/packages/gui-extensions/src/debug/i18n/lt.ts
+++ b/packages/gui-extensions/src/debug/i18n/lt.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki pirmojo atsakymo teksto.",
"tps.label": "TPS",
- "tps.tip": "Išvesties žetonai per sekundę po pirmosios modelio išvesties.",
+ "tps.tip":
+ "Išvesties ir samprotavimo žetonai per sekundę per paskutinio ėjimo modelio užklausas, neįskaitant įrankių laiko.",
"e2e.label": "E2E",
"e2e.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki atsakymo srauto pabaigos.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/lv.ts b/packages/gui-extensions/src/debug/i18n/lv.ts
index d302a665788f..57dfcbf27e3b 100644
--- a/packages/gui-extensions/src/debug/i18n/lv.ts
+++ b/packages/gui-extensions/src/debug/i18n/lv.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz pirmajam atbildes tekstam.",
"tps.label": "TPS",
- "tps.tip": "Izvades žetoni sekundē pēc pirmās modeļa izvades.",
+ "tps.tip": "Izvades un spriešanas žetoni sekundē pēdējā gājiena modeļa pieprasījumos, neskaitot rīku laiku.",
"e2e.label": "E2E",
"e2e.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz atbildes straumes beigām.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/mk.ts b/packages/gui-extensions/src/debug/i18n/mk.ts
index 6a5c03bdb459..cd513d9c343c 100644
--- a/packages/gui-extensions/src/debug/i18n/mk.ts
+++ b/packages/gui-extensions/src/debug/i18n/mk.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Време од испраќањето на барањето до давателот до првиот текст на одговорот.",
"tps.label": "TPS",
- "tps.tip": "Излезни токени во секунда по првиот излез од моделот.",
+ "tps.tip":
+ "Излезни токени и токени за расудување во секунда низ барањата до моделот во последниот потег, без времето на алатките.",
"e2e.label": "E2E",
"e2e.tip": "Време од испраќањето на барањето до давателот до завршувањето на текот на одговорот.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/mn.ts b/packages/gui-extensions/src/debug/i18n/mn.ts
index b2d765050f2c..e2de06e9262c 100644
--- a/packages/gui-extensions/src/debug/i18n/mn.ts
+++ b/packages/gui-extensions/src/debug/i18n/mn.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс хариултын эхний бичвэр хүртэлх хугацаа.",
"tps.label": "TPS",
- "tps.tip": "Загварын эхний гаралтын дараах секунд тутмын гаралтын токены тоо.",
+ "tps.tip":
+ "Сүүлийн ээлжийн загварын хүсэлтүүд дэх секунд тутмын гаралтын болон сэтгэлгээний токен, хэрэгслийн хугацааг оруулахгүй.",
"e2e.label": "E2E",
"e2e.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс хариултын урсгал дуусах хүртэлх хугацаа.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ms.ts b/packages/gui-extensions/src/debug/i18n/ms.ts
index 3dadfd4668e0..862089e27133 100644
--- a/packages/gui-extensions/src/debug/i18n/ms.ts
+++ b/packages/gui-extensions/src/debug/i18n/ms.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Masa dari penghantaran permintaan penyedia hingga teks jawapan pertama.",
"tps.label": "TPS",
- "tps.tip": "Token output sesaat selepas output pertama model.",
+ "tps.tip":
+ "Token output dan penaakulan sesaat merentas permintaan model dalam giliran terakhir, tidak termasuk masa alat.",
"e2e.label": "E2E",
"e2e.tip": "Masa dari penghantaran permintaan penyedia hingga strim responsnya tamat.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/my.ts b/packages/gui-extensions/src/debug/i18n/my.ts
index da8dcb22664b..7f86c188ec1e 100644
--- a/packages/gui-extensions/src/debug/i18n/my.ts
+++ b/packages/gui-extensions/src/debug/i18n/my.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ ပထမဆုံးအဖြေစာသားရရှိချိန်အထိ ကြာချိန်။",
"tps.label": "TPS",
- "tps.tip": "မော်ဒယ်၏ ပထမဆုံးအထွက်နောက်ပိုင်း တစ်စက္ကန့်လျှင် ထွက်ရှိသည့် တိုကင်အရေအတွက်။",
+ "tps.tip":
+ "နောက်ဆုံးအလှည့်၏ မော်ဒယ်တောင်းဆိုမှုများတစ်လျှောက် တစ်စက္ကန့်လျှင် ထွက်ရှိမှုနှင့် ဆင်ခြင်မှု တိုကင်များ၊ ကိရိယာအချိန် မပါဝင်ပါ။",
"e2e.label": "E2E",
"e2e.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ တုံ့ပြန်မှုစီးကြောင်း ပြီးဆုံးချိန်အထိ ကြာချိန်။",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ne.ts b/packages/gui-extensions/src/debug/i18n/ne.ts
index c7e07de22bce..7d67af654340 100644
--- a/packages/gui-extensions/src/debug/i18n/ne.ts
+++ b/packages/gui-extensions/src/debug/i18n/ne.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "प्रदायक अनुरोध पठाइएदेखि उत्तरको पहिलो पाठ आउँदासम्मको समय।",
"tps.label": "TPS",
- "tps.tip": "मोडेलको पहिलो आउटपुटपछि प्रति सेकेन्ड आउटपुट टोकन।",
+ "tps.tip": "पछिल्लो पालोका मोडेल अनुरोधहरूमा प्रति सेकेन्ड आउटपुट र तर्क टोकन, उपकरणको समय बाहेक।",
"e2e.label": "E2E",
"e2e.tip": "प्रदायक अनुरोध पठाइएदेखि यसको प्रतिक्रिया स्ट्रिम समाप्त हुँदासम्मको समय।",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/nl.ts b/packages/gui-extensions/src/debug/i18n/nl.ts
index b442772a291f..fcfc8723062a 100644
--- a/packages/gui-extensions/src/debug/i18n/nl.ts
+++ b/packages/gui-extensions/src/debug/i18n/nl.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tijd vanaf het verzenden van de provideraanvraag tot de eerste antwoordtekst.",
"tps.label": "TPS",
- "tps.tip": "Uitvoertokens per seconde na de eerste modeluitvoer.",
+ "tps.tip": "Uitvoer- en redeneertokens per seconde over de modelverzoeken van de laatste beurt, zonder tooltijd.",
"e2e.label": "E2E",
"e2e.tip": "Tijd vanaf het verzenden van de provideraanvraag tot het einde van de antwoordstream.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/no.ts b/packages/gui-extensions/src/debug/i18n/no.ts
index 1bcd21626577..9dc18c9844fb 100644
--- a/packages/gui-extensions/src/debug/i18n/no.ts
+++ b/packages/gui-extensions/src/debug/i18n/no.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tid fra leverandørforespørselen sendes til den første svarteksten.",
"tps.label": "TPS",
- "tps.tip": "Utdatatokener per sekund etter den første modellutdataen.",
+ "tps.tip": "Utdata- og resonneringstokener per sekund på tvers av modellforespørslene i siste tur, uten verktøytid.",
"e2e.label": "E2E",
"e2e.tip": "Tid fra leverandørforespørselen sendes til svarstrømmen er avsluttet.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/pa.ts b/packages/gui-extensions/src/debug/i18n/pa.ts
index 0e5a1a4dc22e..f0c04ca2bac1 100644
--- a/packages/gui-extensions/src/debug/i18n/pa.ts
+++ b/packages/gui-extensions/src/debug/i18n/pa.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "فراہم کنندہ دی درخواست بھیجن توں جواب دے پہلے متن تک دا سماں۔",
"tps.label": "TPS",
- "tps.tip": "ماڈل دی پہلی آؤٹ پٹ توں بعد فی سیکنڈ آؤٹ پٹ ٹوکن۔",
+ "tps.tip": "ਤਾਜ਼ਾ ਵਾਰੀ ਦੀਆਂ ਮਾਡਲ ਬੇਨਤੀਆਂ ਵਿੱਚ ਪ੍ਰਤੀ ਸਕਿੰਟ ਆਉਟਪੁੱਟ ਅਤੇ ਤਰਕ ਟੋਕਨ, ਟੂਲ ਦੇ ਸਮੇਂ ਤੋਂ ਬਿਨਾਂ।",
"e2e.label": "E2E",
"e2e.tip": "فراہم کنندہ دی درخواست بھیجن توں اوہدے جواب دی سٹریم ختم ہون تک دا سماں۔",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/pl.ts b/packages/gui-extensions/src/debug/i18n/pl.ts
index c469ac616621..bb36e8cb901e 100644
--- a/packages/gui-extensions/src/debug/i18n/pl.ts
+++ b/packages/gui-extensions/src/debug/i18n/pl.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Czas od wysłania żądania do dostawcy do pierwszego tekstu odpowiedzi.",
"tps.label": "TPS",
- "tps.tip": "Liczba tokenów wyjściowych na sekundę po pierwszym wyniku modelu.",
+ "tps.tip":
+ "Tokeny wyjściowe i rozumowania na sekundę we wszystkich żądaniach do modelu w ostatniej turze, bez czasu narzędzi.",
"e2e.label": "E2E",
"e2e.tip": "Czas od wysłania żądania do dostawcy do zakończenia strumienia odpowiedzi.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ro.ts b/packages/gui-extensions/src/debug/i18n/ro.ts
index 4c30a1830ca6..ea3937baf1f1 100644
--- a/packages/gui-extensions/src/debug/i18n/ro.ts
+++ b/packages/gui-extensions/src/debug/i18n/ro.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Timpul de la trimiterea cererii către furnizor până la primul text al răspunsului.",
"tps.label": "TPS",
- "tps.tip": "Tokenuri de ieșire pe secundă după prima ieșire a modelului.",
+ "tps.tip":
+ "Tokenuri de ieșire și de raționament pe secundă în cererile către model din ultima tură, fără timpul instrumentelor.",
"e2e.label": "E2E",
"e2e.tip": "Timpul de la trimiterea cererii către furnizor până la încheierea fluxului de răspuns.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ru.ts b/packages/gui-extensions/src/debug/i18n/ru.ts
index 5b76f6e52953..51dcc2ba50f5 100644
--- a/packages/gui-extensions/src/debug/i18n/ru.ts
+++ b/packages/gui-extensions/src/debug/i18n/ru.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Время от отправки запроса поставщику до первого текста ответа.",
"tps.label": "TPS",
- "tps.tip": "Количество выходных токенов в секунду после первого вывода модели.",
+ "tps.tip":
+ "Выходные токены и токены рассуждений в секунду по запросам к модели за последний ход, без учёта времени инструментов.",
"e2e.label": "E2E",
"e2e.tip": "Время от отправки запроса поставщику до завершения потока ответа.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/si.ts b/packages/gui-extensions/src/debug/i18n/si.ts
index 60ff1bb115d5..00bf53086b71 100644
--- a/packages/gui-extensions/src/debug/i18n/si.ts
+++ b/packages/gui-extensions/src/debug/i18n/si.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට පිළිතුරේ පළමු පෙළ දක්වා කාලය.",
"tps.label": "TPS",
- "tps.tip": "පළමු මාදිලි ප්රතිදානයෙන් පසු තත්පරයකට ලැබෙන ප්රතිදාන ටෝකන.",
+ "tps.tip": "අවසාන වාරයේ මාදිලි ඉල්ලීම් පුරා තත්පරයකට ප්රතිදාන සහ තර්කන ටෝකන, මෙවලම් කාලය හැර.",
"e2e.label": "E2E",
"e2e.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට එහි ප්රතිචාර ප්රවාහය අවසන් වන තෙක් කාලය.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/sk.ts b/packages/gui-extensions/src/debug/i18n/sk.ts
index 527332d19f95..55d80d827739 100644
--- a/packages/gui-extensions/src/debug/i18n/sk.ts
+++ b/packages/gui-extensions/src/debug/i18n/sk.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Čas od odoslania požiadavky poskytovateľovi po prvý text odpovede.",
"tps.label": "TPS",
- "tps.tip": "Počet výstupných tokenov za sekundu po prvom výstupe modelu.",
+ "tps.tip":
+ "Výstupné tokeny a tokeny uvažovania za sekundu naprieč požiadavkami na model v poslednom ťahu, bez času nástrojov.",
"e2e.label": "E2E",
"e2e.tip": "Čas od odoslania požiadavky poskytovateľovi po ukončenie prúdu odpovede.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/sl.ts b/packages/gui-extensions/src/debug/i18n/sl.ts
index 1c0cf68a1a2a..35a9c860df8f 100644
--- a/packages/gui-extensions/src/debug/i18n/sl.ts
+++ b/packages/gui-extensions/src/debug/i18n/sl.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Čas od pošiljanja zahteve ponudniku do prvega besedila odgovora.",
"tps.label": "TPS",
- "tps.tip": "Število izhodnih žetonov na sekundo po prvem izhodu modela.",
+ "tps.tip": "Izhodni žetoni in žetoni sklepanja na sekundo v zahtevah za model v zadnji potezi, brez časa orodij.",
"e2e.label": "E2E",
"e2e.tip": "Čas od pošiljanja zahteve ponudniku do konca toka odgovora.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/sq.ts b/packages/gui-extensions/src/debug/i18n/sq.ts
index 3002f8c09a3d..2457cd490153 100644
--- a/packages/gui-extensions/src/debug/i18n/sq.ts
+++ b/packages/gui-extensions/src/debug/i18n/sq.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Koha nga dërgimi i kërkesës te ofruesi deri te teksti i parë i përgjigjes.",
"tps.label": "TPS",
- "tps.tip": "Shenjat e daljes për sekondë pas daljes së parë të modelit.",
+ "tps.tip":
+ "Shenjat e daljes dhe të arsyetimit për sekondë në kërkesat ndaj modelit në radhën e fundit, pa kohën e mjeteve.",
"e2e.label": "E2E",
"e2e.tip": "Koha nga dërgimi i kërkesës te ofruesi deri në përfundimin e rrjedhës së përgjigjes.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/sr.ts b/packages/gui-extensions/src/debug/i18n/sr.ts
index ccea9b416a87..b47b84a9f85a 100644
--- a/packages/gui-extensions/src/debug/i18n/sr.ts
+++ b/packages/gui-extensions/src/debug/i18n/sr.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Време од слања захтева добављачу до првог текста одговора.",
"tps.label": "TPS",
- "tps.tip": "Излазни токени у секунди након првог излаза модела.",
+ "tps.tip": "Излазни токени и токени резоновања у секунди кроз захтеве моделу у последњем потезу, без времена алата.",
"e2e.label": "E2E",
"e2e.tip": "Време од слања захтева добављачу до завршетка тока одговора.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/sv.ts b/packages/gui-extensions/src/debug/i18n/sv.ts
index f103266c56df..1cbefd16fd7c 100644
--- a/packages/gui-extensions/src/debug/i18n/sv.ts
+++ b/packages/gui-extensions/src/debug/i18n/sv.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Tid från att leverantörsbegäran skickas tills den första svarstexten visas.",
"tps.label": "TPS",
- "tps.tip": "Utdatatoken per sekund efter modellens första utdata.",
+ "tps.tip":
+ "Utdata- och resonemangstoken per sekund över modellförfrågningarna i den senaste turen, utan verktygstid.",
"e2e.label": "E2E",
"e2e.tip": "Tid från att leverantörsbegäran skickas tills svarsströmmen avslutas.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/tg.ts b/packages/gui-extensions/src/debug/i18n/tg.ts
index 93ed2747fe4f..b2b1b0413b55 100644
--- a/packages/gui-extensions/src/debug/i18n/tg.ts
+++ b/packages/gui-extensions/src/debug/i18n/tg.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Вақт аз фиристодани дархост ба таъминкунанда то матни аввалини ҷавоб.",
"tps.label": "TPS",
- "tps.tip": "Шумораи токенҳои баромад дар як сония пас аз баромади аввалини модел.",
+ "tps.tip": "Токенҳои баромад ва муҳокима дар як сония дар дархостҳои модели навбати охирин, бе вақти абзорҳо.",
"e2e.label": "E2E",
"e2e.tip": "Вақт аз фиристодани дархост ба таъминкунанда то анҷоми ҷараёни ҷавоб.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/th.ts b/packages/gui-extensions/src/debug/i18n/th.ts
index 10dea647881b..dd41bc2784f7 100644
--- a/packages/gui-extensions/src/debug/i18n/th.ts
+++ b/packages/gui-extensions/src/debug/i18n/th.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนถึงข้อความคำตอบแรก",
"tps.label": "TPS",
- "tps.tip": "จำนวนโทเค็นเอาต์พุตต่อวินาทีหลังจากเอาต์พุตแรกจากโมเดล",
+ "tps.tip": "โทเค็นเอาต์พุตและการให้เหตุผลต่อวินาทีในคำขอโมเดลของเทิร์นล่าสุด ไม่รวมเวลาของเครื่องมือ",
"e2e.label": "E2E",
"e2e.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนกระทั่งสตรีมการตอบกลับสิ้นสุด",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/tk.ts b/packages/gui-extensions/src/debug/i18n/tk.ts
index f7a5e2869285..8f50cd63ea90 100644
--- a/packages/gui-extensions/src/debug/i18n/tk.ts
+++ b/packages/gui-extensions/src/debug/i18n/tk.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Hyzmat üpjünçä haýyş iberilenden jogabyň ilkinji tekstine çenli wagt.",
"tps.label": "TPS",
- "tps.tip": "Modeliň ilkinji çykyşyndan soň sekuntda çykyş tokenleriniň sany.",
+ "tps.tip":
+ "Soňky nobatyň model haýyşlary boýunça sekuntda çykyş we pikirleniş tokenleri, gural wagty hasaba alynmazdan.",
"e2e.label": "E2E",
"e2e.tip": "Hyzmat üpjünçä haýyş iberilenden jogap akymynyň tamamlanmagyna çenli wagt.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/tr.ts b/packages/gui-extensions/src/debug/i18n/tr.ts
index c0ccea3f1d64..2b44ea456e7d 100644
--- a/packages/gui-extensions/src/debug/i18n/tr.ts
+++ b/packages/gui-extensions/src/debug/i18n/tr.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Sağlayıcı isteğinin gönderilmesinden ilk yanıt metnine kadar geçen süre.",
"tps.label": "TPS",
- "tps.tip": "İlk model çıktısından sonra saniye başına çıktı tokenı.",
+ "tps.tip": "Son turun model isteklerinde saniye başına çıktı ve akıl yürütme tokeni, araç süresi hariç.",
"e2e.label": "E2E",
"e2e.tip": "Sağlayıcı isteğinin gönderilmesinden yanıt akışının sona ermesine kadar geçen süre.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/uk.ts b/packages/gui-extensions/src/debug/i18n/uk.ts
index 3a4bd0abf304..f6a3c9870084 100644
--- a/packages/gui-extensions/src/debug/i18n/uk.ts
+++ b/packages/gui-extensions/src/debug/i18n/uk.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Час від надсилання запиту постачальнику до першого тексту відповіді.",
"tps.label": "TPS",
- "tps.tip": "Кількість вихідних токенів за секунду після першого виводу моделі.",
+ "tps.tip": "Вихідні токени й токени міркувань за секунду в запитах до моделі за останній хід, без часу інструментів.",
"e2e.label": "E2E",
"e2e.tip": "Час від надсилання запиту постачальнику до завершення потоку відповіді.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/ur.ts b/packages/gui-extensions/src/debug/i18n/ur.ts
index 9283541531f5..54d3674a9ef0 100644
--- a/packages/gui-extensions/src/debug/i18n/ur.ts
+++ b/packages/gui-extensions/src/debug/i18n/ur.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے جواب کے پہلے متن تک کا وقت۔",
"tps.label": "TPS",
- "tps.tip": "ماڈل کی پہلی آؤٹ پٹ کے بعد فی سیکنڈ آؤٹ پٹ ٹوکنز۔",
+ "tps.tip": "تازہ ترین باری کی ماڈل درخواستوں میں فی سیکنڈ آؤٹ پٹ اور استدلال ٹوکن، ٹول کے وقت کے بغیر۔",
"e2e.label": "E2E",
"e2e.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے اس کے جوابی سلسلے کے اختتام تک کا وقت۔",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/uz.ts b/packages/gui-extensions/src/debug/i18n/uz.ts
index effc5bb1bc0e..b9544d230968 100644
--- a/packages/gui-extensions/src/debug/i18n/uz.ts
+++ b/packages/gui-extensions/src/debug/i18n/uz.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Provayderga so‘rov yuborilganidan javobning birinchi matnigacha bo‘lgan vaqt.",
"tps.label": "TPS",
- "tps.tip": "Modelning birinchi chiqishidan keyingi soniyada chiqish tokenlari soni.",
+ "tps.tip": "Oxirgi navbatdagi model so'rovlari bo'yicha soniyada chiqish va mulohaza tokenlari, vosita vaqtisiz.",
"e2e.label": "E2E",
"e2e.tip": "Provayderga so‘rov yuborilganidan javob oqimi tugagunigacha bo‘lgan vaqt.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/vi.ts b/packages/gui-extensions/src/debug/i18n/vi.ts
index d38195b1b066..45c480dc559a 100644
--- a/packages/gui-extensions/src/debug/i18n/vi.ts
+++ b/packages/gui-extensions/src/debug/i18n/vi.ts
@@ -8,7 +8,8 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến văn bản trả lời đầu tiên.",
"tps.label": "TPS",
- "tps.tip": "Số token đầu ra mỗi giây sau đầu ra đầu tiên của mô hình.",
+ "tps.tip":
+ "Số token đầu ra và suy luận mỗi giây trên các yêu cầu mô hình của lượt gần nhất, không tính thời gian công cụ.",
"e2e.label": "E2E",
"e2e.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến khi luồng phản hồi kết thúc.",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/zh.ts b/packages/gui-extensions/src/debug/i18n/zh.ts
index 2a685b3f8fb8..627f972e2f2b 100644
--- a/packages/gui-extensions/src/debug/i18n/zh.ts
+++ b/packages/gui-extensions/src/debug/i18n/zh.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "从发送提供商请求到首次输出回答文本所用的时间。",
"tps.label": "TPS",
- "tps.tip": "模型首次输出后每秒生成的输出词元数。",
+ "tps.tip": "最近一轮模型请求中每秒的输出与推理 token 数,不含工具耗时。",
"e2e.label": "E2E",
"e2e.tip": "从发送提供商请求到其响应流结束所用的时间。",
"nav.label": "NAV",
diff --git a/packages/gui-extensions/src/debug/i18n/zht.ts b/packages/gui-extensions/src/debug/i18n/zht.ts
index 03bcf6189cbf..b45bd97ef856 100644
--- a/packages/gui-extensions/src/debug/i18n/zht.ts
+++ b/packages/gui-extensions/src/debug/i18n/zht.ts
@@ -8,7 +8,7 @@ export default {
"ttfa.label": "TTFA",
"ttfa.tip": "從送出提供者要求到首次輸出回答文字所需的時間。",
"tps.label": "TPS",
- "tps.tip": "模型首次輸出後每秒產生的輸出權杖數。",
+ "tps.tip": "最近一輪模型請求中每秒的輸出與推理 token 數,不含工具耗時。",
"e2e.label": "E2E",
"e2e.tip": "從送出提供者要求到其回應串流結束所需的時間。",
"nav.label": "NAV",
From f010643b51813522dfbd0079d8109a95e2f77895 Mon Sep 17 00:00:00 2001
From: Luke Parker <10430890+Hona@users.noreply.github.com>
Date: Thu, 22 Oct 2026 08:01:41 +1000
Subject: [PATCH 3/3] fix(app): show only the TUI footer metrics in the debug
bar
---
packages/gui-extensions/src/debug/bar.tsx | 98 ++++----------
packages/gui-extensions/src/debug/i18n/am.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ar.ts | 8 +-
packages/gui-extensions/src/debug/i18n/az.ts | 8 +-
packages/gui-extensions/src/debug/i18n/bg.ts | 8 +-
packages/gui-extensions/src/debug/i18n/bn.ts | 8 +-
packages/gui-extensions/src/debug/i18n/br.ts | 8 +-
packages/gui-extensions/src/debug/i18n/bs.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ca.ts | 8 +-
packages/gui-extensions/src/debug/i18n/cs.ts | 8 +-
packages/gui-extensions/src/debug/i18n/da.ts | 8 +-
packages/gui-extensions/src/debug/i18n/de.ts | 8 +-
packages/gui-extensions/src/debug/i18n/dv.ts | 8 +-
packages/gui-extensions/src/debug/i18n/dz.ts | 8 +-
packages/gui-extensions/src/debug/i18n/el.ts | 8 +-
packages/gui-extensions/src/debug/i18n/en.ts | 8 +-
packages/gui-extensions/src/debug/i18n/es.ts | 8 +-
packages/gui-extensions/src/debug/i18n/et.ts | 8 +-
packages/gui-extensions/src/debug/i18n/fa.ts | 8 +-
packages/gui-extensions/src/debug/i18n/fi.ts | 8 +-
packages/gui-extensions/src/debug/i18n/fo.ts | 8 +-
packages/gui-extensions/src/debug/i18n/fr.ts | 8 +-
packages/gui-extensions/src/debug/i18n/he.ts | 8 +-
packages/gui-extensions/src/debug/i18n/hi.ts | 8 +-
packages/gui-extensions/src/debug/i18n/hr.ts | 8 +-
packages/gui-extensions/src/debug/i18n/hu.ts | 8 +-
packages/gui-extensions/src/debug/i18n/hy.ts | 8 +-
packages/gui-extensions/src/debug/i18n/id.ts | 8 +-
packages/gui-extensions/src/debug/i18n/is.ts | 8 +-
packages/gui-extensions/src/debug/i18n/it.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ja.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ka.ts | 8 +-
packages/gui-extensions/src/debug/i18n/km.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ko.ts | 8 +-
packages/gui-extensions/src/debug/i18n/lo.ts | 8 +-
packages/gui-extensions/src/debug/i18n/lt.ts | 8 +-
packages/gui-extensions/src/debug/i18n/lv.ts | 8 +-
packages/gui-extensions/src/debug/i18n/mk.ts | 8 +-
packages/gui-extensions/src/debug/i18n/mn.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ms.ts | 8 +-
packages/gui-extensions/src/debug/i18n/my.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ne.ts | 8 +-
packages/gui-extensions/src/debug/i18n/nl.ts | 8 +-
packages/gui-extensions/src/debug/i18n/no.ts | 8 +-
packages/gui-extensions/src/debug/i18n/pa.ts | 8 +-
packages/gui-extensions/src/debug/i18n/pl.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ro.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ru.ts | 8 +-
packages/gui-extensions/src/debug/i18n/si.ts | 8 +-
packages/gui-extensions/src/debug/i18n/sk.ts | 8 +-
packages/gui-extensions/src/debug/i18n/sl.ts | 8 +-
packages/gui-extensions/src/debug/i18n/sq.ts | 8 +-
packages/gui-extensions/src/debug/i18n/sr.ts | 8 +-
packages/gui-extensions/src/debug/i18n/sv.ts | 8 +-
packages/gui-extensions/src/debug/i18n/tg.ts | 8 +-
packages/gui-extensions/src/debug/i18n/th.ts | 8 +-
packages/gui-extensions/src/debug/i18n/tk.ts | 8 +-
packages/gui-extensions/src/debug/i18n/tr.ts | 8 +-
packages/gui-extensions/src/debug/i18n/uk.ts | 8 +-
packages/gui-extensions/src/debug/i18n/ur.ts | 8 +-
packages/gui-extensions/src/debug/i18n/uz.ts | 8 +-
packages/gui-extensions/src/debug/i18n/vi.ts | 8 +-
packages/gui-extensions/src/debug/i18n/zh.ts | 8 +-
packages/gui-extensions/src/debug/i18n/zht.ts | 8 +-
.../gui-extensions/src/debug/metrics.test.ts | 90 -------------
packages/gui-extensions/src/debug/metrics.ts | 121 ------------------
packages/tui/src/util/locale.ts | 22 +---
packages/util/src/duration.ts | 22 ++++
68 files changed, 175 insertions(+), 682 deletions(-)
delete mode 100644 packages/gui-extensions/src/debug/metrics.test.ts
delete mode 100644 packages/gui-extensions/src/debug/metrics.ts
create mode 100644 packages/util/src/duration.ts
diff --git a/packages/gui-extensions/src/debug/bar.tsx b/packages/gui-extensions/src/debug/bar.tsx
index d919e982722c..fb6019043ff5 100644
--- a/packages/gui-extensions/src/debug/bar.tsx
+++ b/packages/gui-extensions/src/debug/bar.tsx
@@ -5,14 +5,8 @@ import { Icon } from "@opencode/ui/icon"
import { IconButton } from "@opencode/ui/icon-button"
import { Tooltip } from "@opencode/ui/tooltip"
import { createKeyed, useExtension } from "../sdk"
-import {
- applyProviderMetricEvent,
- isProviderMetricEvent,
- projectedProviderMetrics,
- type ProviderMetrics,
- type ProviderMetricState,
-} from "./metrics"
import { motionGlobals, motionTuning } from "@opencode/ui/motion-tuning"
+import { duration } from "@opencode/util/duration"
import { SessionTurn } from "@opencode/util/session-turn"
type Mem = Performance & {
@@ -76,14 +70,6 @@ const mb = (n?: number) => {
return `${v >= 1024 ? v.toFixed(0) : v.toFixed(1)}MB`
}
-const duration = (n?: number) => {
- if (n === undefined || Number.isNaN(n)) return
-
- if (n < 1_000) return `${Math.round(n)}ms`
-
- return `${(n / 1_000).toFixed(n < 10_000 ? 1 : 0)}s`
-}
-
const bad = (n: number | undefined, limit: number, low = false) => {
if (n === undefined || Number.isNaN(n)) return false
@@ -242,55 +228,37 @@ export default function DebugBar(props: {
{ equals: (a, b) => a?.data === b?.data && a?.id === b?.id },
)
- const messages = createMemo(() => {
+ // The numbers on the TUI's latest assistant footer, which follows a step that ended the turn, failed, or is retrying.
+ const turn = createMemo(() => {
const current = target()
- if (!current) return []
-
- return current.data.session.message.list(current.id)
- })
+ if (!current) return
- // History comes from the already-loaded message projection; live requests refine it in place.
- const projected = createMemo(() => projectedProviderMetrics(messages()))
+ const messages = current.data.session.message.list(current.id)
- // The TUI footer's number for the latest turn, through its last step that finished streaming.
- const tps = createMemo(() => {
- const list = messages()
- const index = list.findLastIndex((item) => item.type === "assistant" && item.time.streamed !== undefined)
+ const index = messages.findLastIndex(
+ (item) =>
+ item.type === "assistant" &&
+ Boolean(item.retry || item.error || (item.finish && !["tool-calls", "unknown"].includes(item.finish))),
+ )
if (index === -1) return
- return SessionTurn.tokensPerSecond(list, list[index], { index })
+ const options = { index, legacy: SessionTurn.legacy(messages) }
+ // The TUI hides a zero duration, which means the step has not completed.
+ const elapsed = SessionTurn.duration(messages, messages[index], options)
+
+ return {
+ duration: elapsed ? duration(elapsed) : undefined,
+ tps: SessionTurn.tokensPerSecond(messages, messages[index], options),
+ }
})
- // Missed events during an outage are never replayed, so live metrics hold only for the target and the outage count
- // they were measured under: after a disconnect the refreshed projection wins until the next live request.
- const outages = createMemo((count: number = 0) => (target()?.server.connected ? count : count + 1))
// The Motion workspace's global speed, kept in view while tuning.
const [globals, setGlobals] = createSignal({ speed: motionGlobals.speed.value, slow: motionGlobals.slow.value })
onCleanup(
motionTuning.subscribe(() => setGlobals({ speed: motionGlobals.speed.value, slow: motionGlobals.slow.value })),
)
- const [live, setLive] = createSignal<{ target: object; outages: number; metrics: ProviderMetrics }>()
-
- const metrics = () => {
- const current = live()
-
- return current && current.target === target() && current.outages === outages() ? current.metrics : projected()
- }
-
- createKeyed(target, (current) => {
- const accumulator: ProviderMetricState = {}
-
- onCleanup(
- current.data.listen(({ details }) => {
- if (!isProviderMetricEvent(details) || details.data.sessionID !== current.id) return
- applyProviderMetricEvent(accumulator, details)
-
- if (accumulator.latest) setLive({ target: current, outages: outages(), metrics: accumulator.latest })
- }),
- )
- })
const na = () => ctx.t("na").toUpperCase()
const heap = () => (state.heap.limit ? (state.heap.used ?? 0) / state.heap.limit : undefined)
@@ -640,31 +608,17 @@ export default function DebugBar(props: {
|
- |
|
- |
diff --git a/packages/gui-extensions/src/debug/i18n/am.ts b/packages/gui-extensions/src/debug/i18n/am.ts
index a213b2d61e5c..2fdb058d67d1 100644
--- a/packages/gui-extensions/src/debug/i18n/am.ts
+++ b/packages/gui-extensions/src/debug/i18n/am.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "የልማት አፈጻጸም ምርመራዎች",
providerAriaLabel: "የአቅራቢ አፈጻጸም ምርመራ",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ ሞዴሉ የመጀመሪያ ውጤት ድረስ ያለው ጊዜ።",
- "ttfa.label": "TTFA",
- "ttfa.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ የመጀመሪያው የመልስ ጽሑፍ ድረስ ያለው ጊዜ።",
+ "duration.label": "TIME",
+ "duration.tip": "የመጨረሻውን ዙር ከጀመረው ጥያቄ እስከ ምላሹ መጠናቀቅ ድረስ ያለው ጊዜ።",
"tps.label": "TPS",
"tps.tip": "በመጨረሻው ዙር የሞዴል ጥያቄዎች ውስጥ በሰከንድ የሚወጡ የውጤት እና የማሰብ ቶከኖች፣ የመሳሪያ ጊዜን ሳይጨምር።",
- "e2e.label": "E2E",
- "e2e.tip": "የአቅራቢው ጥያቄ ከተላከበት ጊዜ እስከ የምላሽ ዥረቱ መጨረሻ ድረስ ያለው ጊዜ።",
"nav.label": "NAV",
"nav.tip": "የክፍለ ጊዜ ገጽን የነካው የመጨረሻው የተጠናቀቀ የመንገድ ሽግግር፣ ከራውተር ጅምር እስከ ከተረጋጋ በኋላ የመጀመሪያው ስዕል ድረስ የሚለካ።",
"fps.label": "FPS",
diff --git a/packages/gui-extensions/src/debug/i18n/ar.ts b/packages/gui-extensions/src/debug/i18n/ar.ts
index e2c4bd82fa82..a2523fd91ead 100644
--- a/packages/gui-extensions/src/debug/i18n/ar.ts
+++ b/packages/gui-extensions/src/debug/i18n/ar.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "تشخيص أداء التطوير",
providerAriaLabel: "تشخيص أداء المزوّد",
na: "غير متاح",
- "ttft.label": "TTFT",
- "ttft.tip": "الوقت من إرسال طلب المزوّد إلى أول مخرجات للنموذج.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "الوقت من إرسال طلب المزوّد إلى أول نص في الإجابة.",
+ "duration.label": "TIME",
+ "duration.tip": "الوقت من الطلب الذي بدأ الدورة الأخيرة حتى اكتمال استجابتها.",
"tps.label": "TPS",
"tps.tip": "رموز الإخراج والاستدلال في الثانية عبر طلبات النموذج في الدورة الأخيرة، باستثناء وقت الأدوات.",
- "e2e.label": "E2E",
- "e2e.tip": "الوقت من إرسال طلب المزوّد حتى انتهاء تدفق استجابته.",
"nav.label": "NAV",
"nav.tip": "آخر انتقال مكتمل للمسار يتضمن صفحة جلسة، مُقاسًا من بدء التوجيه حتى أول رسم بعد استقراره.",
"fps.label": "FPS",
diff --git a/packages/gui-extensions/src/debug/i18n/az.ts b/packages/gui-extensions/src/debug/i18n/az.ts
index d67691555806..5485732522fc 100644
--- a/packages/gui-extensions/src/debug/i18n/az.ts
+++ b/packages/gui-extensions/src/debug/i18n/az.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Tərtibatçı performans diaqnostikası",
providerAriaLabel: "Provayder performansının diaqnostikası",
na: "yox",
- "ttft.label": "TTFT",
- "ttft.tip": "Provayder sorğusunun göndərilməsindən modelin ilk çıxışına qədər olan vaxt.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Provayder sorğusunun göndərilməsindən cavabın ilk mətninə qədər olan vaxt.",
+ "duration.label": "TIME",
+ "duration.tip": "Son növbəni başladan sorğudan cavabının tamamlanmasına qədər keçən vaxt.",
"tps.label": "TPS",
"tps.tip": "Son növbənin model sorğuları üzrə saniyədə çıxış və düşünmə tokenləri, alət vaxtı istisna olmaqla.",
- "e2e.label": "E2E",
- "e2e.tip": "Provayder sorğusunun göndərilməsindən cavab axınının bitməsinə qədər olan vaxt.",
"nav.label": "NAV",
"nav.tip":
"Sessiya səhifəsinə aid son tamamlanmış marşrut keçidi; marşrutlaşdırıcının başladığı andan keçid tamamlandıqdan sonrakı ilk göstərilməyədək ölçülür.",
diff --git a/packages/gui-extensions/src/debug/i18n/bg.ts b/packages/gui-extensions/src/debug/i18n/bg.ts
index 710f66f4aa75..e53894499db6 100644
--- a/packages/gui-extensions/src/debug/i18n/bg.ts
+++ b/packages/gui-extensions/src/debug/i18n/bg.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Диагностика на ефективността на разработката",
providerAriaLabel: "Диагностика на производителността на доставчика",
na: "няма",
- "ttft.label": "TTFT",
- "ttft.tip": "Време от изпращането на заявката към доставчика до първия изход от модела.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Време от изпращането на заявката към доставчика до първия текст на отговора.",
+ "duration.label": "TIME",
+ "duration.tip": "Време от заявката, започнала последния ход, до завършването на отговора.",
"tps.label": "TPS",
"tps.tip":
"Изходни токени и токени за разсъждение в секунда за заявките към модела в последния ход, без времето на инструментите.",
- "e2e.label": "E2E",
- "e2e.tip": "Време от изпращането на заявката към доставчика до края на потока с отговора.",
"nav.label": "NAV",
"nav.tip":
"Последен завършен преход на маршрута, докосващ страница на сесия, измерен от началото на рутера до първото боядисване след установяването му.",
diff --git a/packages/gui-extensions/src/debug/i18n/bn.ts b/packages/gui-extensions/src/debug/i18n/bn.ts
index 664910cfdef3..27f10c1ed9b0 100644
--- a/packages/gui-extensions/src/debug/i18n/bn.ts
+++ b/packages/gui-extensions/src/debug/i18n/bn.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "উন্নয়ন কর্মক্ষমতা ডায়গনিস্টিক",
providerAriaLabel: "প্রদানকারীর কর্মক্ষমতা নির্ণয়",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে মডেলের প্রথম আউটপুট পর্যন্ত সময়।",
- "ttfa.label": "TTFA",
- "ttfa.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে উত্তরের প্রথম লেখা পর্যন্ত সময়।",
+ "duration.label": "TIME",
+ "duration.tip": "সর্বশেষ টার্ন শুরু করা প্রম্পট থেকে তার উত্তর সম্পূর্ণ হওয়া পর্যন্ত সময়।",
"tps.label": "TPS",
"tps.tip": "সর্বশেষ টার্নের মডেল অনুরোধগুলিতে প্রতি সেকেন্ডে আউটপুট ও রিজনিং টোকেন, টুলের সময় বাদে।",
- "e2e.label": "E2E",
- "e2e.tip": "প্রদানকারীর অনুরোধ পাঠানো থেকে তার প্রতিক্রিয়া স্ট্রিম শেষ হওয়া পর্যন্ত সময়।",
"nav.label": "এনএভি",
"nav.tip":
"একটি সেশন পৃষ্ঠা স্পর্শ করে শেষ সম্পন্ন রুট ট্রানজিশন, রাউটার শুরু থেকে এটি স্থির হওয়ার পরে প্রথম পেইন্ট পর্যন্ত পরিমাপ করা হয়।",
diff --git a/packages/gui-extensions/src/debug/i18n/br.ts b/packages/gui-extensions/src/debug/i18n/br.ts
index 1e1e2c5c9236..9262b063e83d 100644
--- a/packages/gui-extensions/src/debug/i18n/br.ts
+++ b/packages/gui-extensions/src/debug/i18n/br.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnóstico de desempenho de desenvolvimento",
providerAriaLabel: "Diagnóstico de desempenho do provedor",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Tempo entre o envio da solicitação ao provedor e a primeira saída do modelo.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tempo entre o envio da solicitação ao provedor e o primeiro texto da resposta.",
+ "duration.label": "TIME",
+ "duration.tip": "Tempo entre o prompt que iniciou o último turno e a conclusão da resposta.",
"tps.label": "TPS",
"tps.tip":
"Tokens de saída e de raciocínio por segundo nas requisições ao modelo do último turno, sem contar o tempo das ferramentas.",
- "e2e.label": "E2E",
- "e2e.tip": "Tempo entre o envio da solicitação ao provedor e o fim do fluxo de resposta.",
"nav.label": "NAV",
"nav.tip":
"Última transição de rota concluída tocando em uma página de sessão, medida desde o início do roteador até a primeira pintura após o estabelecimento.",
diff --git a/packages/gui-extensions/src/debug/i18n/bs.ts b/packages/gui-extensions/src/debug/i18n/bs.ts
index c2ef495488c3..7acf306248b5 100644
--- a/packages/gui-extensions/src/debug/i18n/bs.ts
+++ b/packages/gui-extensions/src/debug/i18n/bs.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Dijagnostika performansi razvoja",
providerAriaLabel: "Dijagnostika performansi pružaoca usluge",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Vrijeme od slanja zahtjeva pružaocu do prvog izlaza modela.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Vrijeme od slanja zahtjeva pružaocu do prvog teksta odgovora.",
+ "duration.label": "TIME",
+ "duration.tip": "Vrijeme od upita koji je započeo posljednji potez do završetka odgovora.",
"tps.label": "TPS",
"tps.tip":
"Izlazni tokeni i tokeni rasuđivanja u sekundi kroz zahtjeve modelu u posljednjem potezu, bez vremena alata.",
- "e2e.label": "E2E",
- "e2e.tip": "Vrijeme od slanja zahtjeva pružaocu do završetka toka odgovora.",
"nav.label": "NAV",
"nav.tip":
"Posljednji završeni prelazak rute koji dotiče stranicu sesije, mjeren od početka rutera do prvog iscrtavanja nakon smirivanja.",
diff --git a/packages/gui-extensions/src/debug/i18n/ca.ts b/packages/gui-extensions/src/debug/i18n/ca.ts
index 6da7c887bdd8..b4eba5b361d3 100644
--- a/packages/gui-extensions/src/debug/i18n/ca.ts
+++ b/packages/gui-extensions/src/debug/i18n/ca.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnòstic de rendiment del desenvolupament",
providerAriaLabel: "Diagnòstic del rendiment del proveïdor",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins a la primera sortida del model.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins al primer text de resposta.",
+ "duration.label": "TIME",
+ "duration.tip": "Temps des de la sol·licitud que va iniciar l'últim torn fins que la resposta va acabar.",
"tps.label": "TPS",
"tps.tip":
"Fitxes de sortida i de raonament per segon en les peticions al model de l'últim torn, sense comptar el temps de les eines.",
- "e2e.label": "E2E",
- "e2e.tip": "Temps des de l’enviament de la sol·licitud al proveïdor fins que finalitza el flux de resposta.",
"nav.label": "NAV",
"nav.tip":
"L'última transició de ruta completada tocant una pàgina de sessió, mesurada des de l'inici de l'encaminador fins a la primera pintura després que s'instal·li.",
diff --git a/packages/gui-extensions/src/debug/i18n/cs.ts b/packages/gui-extensions/src/debug/i18n/cs.ts
index a14fdc37271f..fcf3b9cce6d9 100644
--- a/packages/gui-extensions/src/debug/i18n/cs.ts
+++ b/packages/gui-extensions/src/debug/i18n/cs.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostika vývoje výkonnosti",
providerAriaLabel: "Diagnostika výkonu poskytovatele",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Doba od odeslání požadavku poskytovateli do prvního výstupu modelu.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Doba od odeslání požadavku poskytovateli do prvního textu odpovědi.",
+ "duration.label": "TIME",
+ "duration.tip": "Doba od výzvy, která zahájila poslední tah, do dokončení odpovědi.",
"tps.label": "TPS",
"tps.tip":
"Výstupní tokeny a tokeny uvažování za sekundu napříč požadavky na model v posledním tahu, bez času nástrojů.",
- "e2e.label": "E2E",
- "e2e.tip": "Doba od odeslání požadavku poskytovateli do ukončení proudu odpovědi.",
"nav.label": "NAV",
"nav.tip":
"Poslední dokončený přechod trasy dotykem stránky relace, měřeno od spuštění routeru do prvního nátěru po jeho usazení.",
diff --git a/packages/gui-extensions/src/debug/i18n/da.ts b/packages/gui-extensions/src/debug/i18n/da.ts
index d71578c16a28..8cf8da5b36de 100644
--- a/packages/gui-extensions/src/debug/i18n/da.ts
+++ b/packages/gui-extensions/src/debug/i18n/da.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Udviklingsydelsesdiagnostik",
providerAriaLabel: "Diagnosticering af udbyderens ydeevne",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Tid fra afsendelse af udbyderanmodningen til modellens første output.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tid fra afsendelse af udbyderanmodningen til den første svartekst.",
+ "duration.label": "TIME",
+ "duration.tip": "Tid fra prompten, der startede den seneste tur, til svaret var færdigt.",
"tps.label": "TPS",
"tps.tip":
"Output- og ræsonneringstokens pr. sekund på tværs af den seneste turs modelforespørgsler, uden værktøjstid.",
- "e2e.label": "E2E",
- "e2e.tip": "Tid fra afsendelse af udbyderanmodningen, til dens svarstream sluttede.",
"nav.label": "NAV",
"nav.tip":
"Sidste gennemførte ruteovergang, der berører en sessionsside, målt fra routerstart til den første optegning efter den falder til ro.",
diff --git a/packages/gui-extensions/src/debug/i18n/de.ts b/packages/gui-extensions/src/debug/i18n/de.ts
index 73bf6d81b8eb..fdac71917120 100644
--- a/packages/gui-extensions/src/debug/i18n/de.ts
+++ b/packages/gui-extensions/src/debug/i18n/de.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Leistungsdiagnose für die Entwicklung",
providerAriaLabel: "Leistungsdiagnose des Anbieters",
na: "n.v.",
- "ttft.label": "TTFT",
- "ttft.tip": "Zeit vom Senden der Anbieteranfrage bis zur ersten Modellausgabe.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Zeit vom Senden der Anbieteranfrage bis zum ersten Antworttext.",
+ "duration.label": "TIME",
+ "duration.tip": "Zeit vom Prompt, der die letzte Runde gestartet hat, bis zum Abschluss der Antwort.",
"tps.label": "TPS",
"tps.tip": "Ausgabe- und Reasoning-Tokens pro Sekunde über die Modellanfragen der letzten Runde, ohne Werkzeugzeit.",
- "e2e.label": "E2E",
- "e2e.tip": "Zeit vom Senden der Anbieteranfrage bis zum Ende ihres Antwortstreams.",
"nav.label": "NAV",
"nav.tip":
"Letzter abgeschlossener Routenübergang zu einer Sitzungsseite, gemessen vom Start des Routers bis zum ersten Rendering nach Abschluss des Übergangs.",
diff --git a/packages/gui-extensions/src/debug/i18n/dv.ts b/packages/gui-extensions/src/debug/i18n/dv.ts
index d2e797e2505d..e9b8c563f873 100644
--- a/packages/gui-extensions/src/debug/i18n/dv.ts
+++ b/packages/gui-extensions/src/debug/i18n/dv.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "ޑިވެލޮޕްމަންޓް ޕާފޯމަންސް ޑައިގްނޯސްޓިކްސް",
providerAriaLabel: "ޕްރޮވައިޑަރ ޕަފޯމަންސް ޑައިއަގްނޮސްޓިކްސް",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ފުރަތަމަ މޮޑެލް އައުޓްޕުޓް ލިބެންދެން ދާ ވަގުތު۔",
- "ttfa.label": "TTFA",
- "ttfa.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ޖަވާބުގެ ފުރަތަމަ ލިޔުން ލިބެންދެން ދާ ވަގުތު।",
+ "duration.label": "TIME",
+ "duration.tip": "އެންމެ ފަހުގެ ޓާރން ފެށި ޕްރޮމްޕްޓުން ފެށިގެން ޖަވާބު ނިމެންދެން ދާ ވަގުތު.",
"tps.label": "TPS",
"tps.tip":
"އެންމެ ފަހުގެ ޓާރންގެ މޮޑެލް ރިކުއެސްޓްތަކުގައި ސިކުންތަކަށް އައުޓްޕުޓް އަދި ރީޒަނިންގ ޓޯކަންތައް، ޓޫލްގެ ވަގުތު ނުހިމަނައި.",
- "e2e.label": "E2E",
- "e2e.tip": "ޕްރޮވައިޑަރ ރިކުއެސްޓް ފޮނުވުނު ގަޑީން ޖަވާބުގެ ސްޓްރީމް ނިމެންދެން ދާ ވަގުތު۔",
"nav.label": "NAV އެވެ",
"nav.tip":
"އެންމެ ފަހުން ފުރިހަމަ ކުރެވުނު ރޫޓް ޓްރާންސިޝަން ސެޝަން ޕޭޖެއްގައި އަތްލުމުން، ރައުޓަރ ފެށުނީއްސުރެ ސެޓްލްވުމަށްފަހު ފުރަތަމަ ކުލަ ޖެހުމާ ހަމައަށް މިންކުރެވެއެވެ.",
diff --git a/packages/gui-extensions/src/debug/i18n/dz.ts b/packages/gui-extensions/src/debug/i18n/dz.ts
index d30f5d4b2305..105fa695aea5 100644
--- a/packages/gui-extensions/src/debug/i18n/dz.ts
+++ b/packages/gui-extensions/src/debug/i18n/dz.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "གོང་འཕེལ་གྱི་ལས་དོན་བརྟག་དཔྱད།",
providerAriaLabel: "བྱིན་མིའི་ལཱ་ཤུགས་བརྟག་དཔྱད།",
na: "ན/ཨེ།",
- "ttft.label": "TTFT",
- "ttft.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་དཔེ་ཚད་ཀྱི་ཐོན་འབྲས་དང་པ་ཚུན་གྱི་དུས་ཚོད།",
- "ttfa.label": "TTFA",
- "ttfa.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་ལན་གྱི་ཚིག་ཡིག་དང་པ་ཚུན་གྱི་དུས་ཚོད།",
+ "duration.label": "TIME",
+ "duration.tip": "མཐའ་མཇུག་གི་རིམ་པ་འགོ་བཙུགས་མི་ཞུ་བ་ལས་ ལན་མཇུག་བསྡུ་ཚུན་གྱི་དུས་ཚོད།",
"tps.label": "TPS",
"tps.tip":
"མཐའ་མཇུག་གི་རིམ་པའི་དཔེ་ཚད་ཞུ་བ་ཚུ་ནང་ སྐར་ཆ་རེར་ཐོན་འབྲས་དང་བསམ་གཞིགས་ཊོ་ཀེན་ ལག་ཆའི་དུས་ཚོད་མ་བརྩིས་པར།",
- "e2e.label": "E2E",
- "e2e.tip": "བྱིན་མི་ལུ་ཞུ་བ་བཏང་བ་ལས་ལན་གྱི་རྒྱུན་ལམ་མཇུག་བསྡུ་ཚུན་གྱི་དུས་ཚོད།",
"nav.label": "NAV",
"nav.tip":
"མཐའ་མཇུག་མཇུག་བསྡུ་ཡོད་པའི་འགྲུལ་ལམ་འགྱུར་བ་འདི་ ལཱ་ཡུན་ཤོག་ལེབ་ཅིག་ལུ་ལགཔ་བརྐྱབ་སྟེ་ རའུ་ཊར་འགོ་བཙུགས་ལས་ དེ་གཞི་ཆགས་པའི་ཤུལ་ལས་ ཚོས་གཞི་འགོ་དང་པ་ཚུན་ཚོད་ འཇལ་ཡོདཔ་ཨིན།",
diff --git a/packages/gui-extensions/src/debug/i18n/el.ts b/packages/gui-extensions/src/debug/i18n/el.ts
index 61da0ec7a63c..74d92aa12fd4 100644
--- a/packages/gui-extensions/src/debug/i18n/el.ts
+++ b/packages/gui-extensions/src/debug/i18n/el.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Διαγνωστικά απόδοσης ανάπτυξης",
providerAriaLabel: "Διαγνωστικά απόδοσης παρόχου",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως την πρώτη έξοδο του μοντέλου.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως το πρώτο κείμενο απάντησης.",
+ "duration.label": "TIME",
+ "duration.tip": "Χρόνος από την προτροπή που ξεκίνησε τον τελευταίο γύρο έως την ολοκλήρωση της απάντησης.",
"tps.label": "TPS",
"tps.tip":
"Διακριτικά εξόδου και συλλογισμού ανά δευτερόλεπτο στα αιτήματα προς το μοντέλο του τελευταίου γύρου, χωρίς τον χρόνο των εργαλείων.",
- "e2e.label": "E2E",
- "e2e.tip": "Χρόνος από την αποστολή του αιτήματος στον πάροχο έως τη λήξη της ροής απάντησης.",
"nav.label": "NAV",
"nav.tip":
"Τελευταία ολοκληρωμένη μετάβαση διαδρομής που αγγίζει μια σελίδα συνεδρίας, μετρημένη από την έναρξη του δρομολογητή μέχρι την πρώτη βαφή μετά την καθίζηση.",
diff --git a/packages/gui-extensions/src/debug/i18n/en.ts b/packages/gui-extensions/src/debug/i18n/en.ts
index 0e1db0d9ff55..fb604820fd63 100644
--- a/packages/gui-extensions/src/debug/i18n/en.ts
+++ b/packages/gui-extensions/src/debug/i18n/en.ts
@@ -5,14 +5,10 @@ export default {
ariaLabel: "Development performance diagnostics",
providerAriaLabel: "Provider performance diagnostics",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Time from provider request dispatch to the first model output.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Time from provider request dispatch to the first answer text.",
+ "duration.label": "TIME",
+ "duration.tip": "Time from the prompt that started the latest turn until its response completed.",
"tps.label": "TPS",
"tps.tip": "Output and reasoning tokens per second across the latest turn's model requests, excluding tool time.",
- "e2e.label": "E2E",
- "e2e.tip": "Time from provider request dispatch until its response stream ended.",
"nav.label": "NAV",
"nav.tip":
"Last completed route transition touching a session page, measured from router start until the first paint after it settles.",
diff --git a/packages/gui-extensions/src/debug/i18n/es.ts b/packages/gui-extensions/src/debug/i18n/es.ts
index b4a75816fa5d..56dc112afcbb 100644
--- a/packages/gui-extensions/src/debug/i18n/es.ts
+++ b/packages/gui-extensions/src/debug/i18n/es.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnóstico de rendimiento de desarrollo",
providerAriaLabel: "Diagnóstico del rendimiento del proveedor",
na: "n/d",
- "ttft.label": "TTFT",
- "ttft.tip": "Tiempo desde el envío de la solicitud al proveedor hasta la primera salida del modelo.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tiempo desde el envío de la solicitud al proveedor hasta el primer texto de respuesta.",
+ "duration.label": "TIME",
+ "duration.tip": "Tiempo desde la instrucción que inició el último turno hasta que terminó la respuesta.",
"tps.label": "TPS",
"tps.tip":
"Tókenes de salida y de razonamiento por segundo en las solicitudes al modelo del último turno, sin contar el tiempo de las herramientas.",
- "e2e.label": "E2E",
- "e2e.tip": "Tiempo desde el envío de la solicitud al proveedor hasta que finaliza el flujo de respuesta.",
"nav.label": "NAV",
"nav.tip":
"Última transición de ruta completada que afecta a una página de sesión, medida desde el inicio del enrutador hasta el primer renderizado tras estabilizarse.",
diff --git a/packages/gui-extensions/src/debug/i18n/et.ts b/packages/gui-extensions/src/debug/i18n/et.ts
index a1953cfdceb1..bf3eefce6dcd 100644
--- a/packages/gui-extensions/src/debug/i18n/et.ts
+++ b/packages/gui-extensions/src/debug/i18n/et.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Arendustegevuse diagnostika",
providerAriaLabel: "Pakkuja jõudluse diagnostika",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Aeg pakkujale päringu saatmisest mudeli esimese väljundini.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Aeg pakkujale päringu saatmisest esimese vastusetekstini.",
+ "duration.label": "TIME",
+ "duration.tip": "Aeg viimase käigu alustanud viibast kuni vastuse valmimiseni.",
"tps.label": "TPS",
"tps.tip": "Väljund- ja arutlusmärgid sekundis viimase käigu mudelipäringute lõikes, ilma tööriistade ajata.",
- "e2e.label": "E2E",
- "e2e.tip": "Aeg pakkujale päringu saatmisest vastusevoo lõppemiseni.",
"nav.label": "NAV",
"nav.tip":
"Viimane lõpetatud marsruudi üleminek, mis puudutab seansi lehte, mõõdetuna ruuteri algusest kuni esimese värvimiseni pärast selle settimist.",
diff --git a/packages/gui-extensions/src/debug/i18n/fa.ts b/packages/gui-extensions/src/debug/i18n/fa.ts
index 286e7b7608eb..febf5ff2899a 100644
--- a/packages/gui-extensions/src/debug/i18n/fa.ts
+++ b/packages/gui-extensions/src/debug/i18n/fa.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "تشخیص عملکرد توسعه",
providerAriaLabel: "عیبیابی عملکرد ارائهدهنده",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "زمان بین ارسال درخواست ارائهدهنده و نخستین خروجی مدل.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "زمان بین ارسال درخواست ارائهدهنده و نخستین متن پاسخ.",
+ "duration.label": "TIME",
+ "duration.tip": "زمان از درخواستی که آخرین نوبت را آغاز کرد تا تکمیل پاسخ آن.",
"tps.label": "TPS",
"tps.tip": "توکنهای خروجی و استدلال در ثانیه در درخواستهای مدل در آخرین نوبت، بدون احتساب زمان ابزارها.",
- "e2e.label": "E2E",
- "e2e.tip": "زمان بین ارسال درخواست ارائهدهنده و پایان جریان پاسخ آن.",
"nav.label": "NAV",
"nav.tip":
"آخرین تغییر مسیر تکمیل شده با لمس صفحه جلسه، از شروع روتر تا اولین رنگ پس از ته نشین شدن اندازه گیری می شود.",
diff --git a/packages/gui-extensions/src/debug/i18n/fi.ts b/packages/gui-extensions/src/debug/i18n/fi.ts
index 64ed9ed3f903..81af95eefa14 100644
--- a/packages/gui-extensions/src/debug/i18n/fi.ts
+++ b/packages/gui-extensions/src/debug/i18n/fi.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Kehityksen suorituskyvyn diagnostiikka",
providerAriaLabel: "Palveluntarjoajan suorituskyvyn diagnostiikka",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Aika palveluntarjoajapyynnön lähettämisestä mallin ensimmäiseen tulosteeseen.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Aika palveluntarjoajapyynnön lähettämisestä ensimmäiseen vastaustekstiin.",
+ "duration.label": "TIME",
+ "duration.tip": "Aika viimeisimmän vuoron aloittaneesta kehotteesta vastauksen valmistumiseen.",
"tps.label": "TPS",
"tps.tip": "Tuloste- ja päättelytokeneita sekunnissa viimeisimmän vuoron mallipyynnöissä, ilman työkalujen aikaa.",
- "e2e.label": "E2E",
- "e2e.tip": "Aika palveluntarjoajapyynnön lähettämisestä vastausvirran päättymiseen.",
"nav.label": "NAV",
"nav.tip":
"Viimeisin valmis reittisiirtymä, joka koskee istuntosivua, mitattuna reitityksen alusta ensimmäiseen piirtoon siirtymän valmistumisen jälkeen.",
diff --git a/packages/gui-extensions/src/debug/i18n/fo.ts b/packages/gui-extensions/src/debug/i18n/fo.ts
index 8aa90d93af44..8f436f1268b9 100644
--- a/packages/gui-extensions/src/debug/i18n/fo.ts
+++ b/packages/gui-extensions/src/debug/i18n/fo.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Menningar avriksdiagnostikk",
providerAriaLabel: "Avriksgreining hjá veitara",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til fyrsta úttakið frá modellinum.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til fyrsti svarteksturin.",
+ "duration.label": "TIME",
+ "duration.tip": "Tíð frá fyrispurninginum, sum byrjaði seinasta umfar, til svarið var liðugt.",
"tps.label": "TPS",
"tps.tip": "Úttaks- og hugsunarmerki um sekundið í seinasta umfarsins fyrispurningum til modellið, uttan amboðstíð.",
- "e2e.label": "E2E",
- "e2e.tip": "Tíð frá tí at fyrispurningurin verður sendur veitaranum, til svarstreymurin endar.",
"nav.label": "NAV",
"nav.tip":
"Seinast liðugt leiðsluskifti nertir við eina setu síðu, mált frá router byrjan til fyrstu málingina eftir at hon setur seg.",
diff --git a/packages/gui-extensions/src/debug/i18n/fr.ts b/packages/gui-extensions/src/debug/i18n/fr.ts
index ef6559c25f70..a8b64597713a 100644
--- a/packages/gui-extensions/src/debug/i18n/fr.ts
+++ b/packages/gui-extensions/src/debug/i18n/fr.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostics de performance de développement",
providerAriaLabel: "Diagnostic des performances du fournisseur",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Temps entre l’envoi de la requête au fournisseur et la première sortie du modèle.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Temps entre l’envoi de la requête au fournisseur et le premier texte de réponse.",
+ "duration.label": "TIME",
+ "duration.tip": "Temps entre l'invite qui a lancé le dernier tour et la fin de la réponse.",
"tps.label": "TPS",
"tps.tip":
"Jetons de sortie et de raisonnement par seconde sur les requêtes au modèle du dernier tour, hors temps des outils.",
- "e2e.label": "E2E",
- "e2e.tip": "Temps entre l’envoi de la requête au fournisseur et la fin du flux de réponse.",
"nav.label": "NAV",
"nav.tip":
"Dernière transition de route terminée touchant une page de session, mesurée du début du routeur jusqu'au premier affichage après stabilisation.",
diff --git a/packages/gui-extensions/src/debug/i18n/he.ts b/packages/gui-extensions/src/debug/i18n/he.ts
index 95e2475b7334..da15d40b14c3 100644
--- a/packages/gui-extensions/src/debug/i18n/he.ts
+++ b/packages/gui-extensions/src/debug/i18n/he.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "אבחון ביצועי פיתוח",
providerAriaLabel: "אבחון ביצועי הספק",
na: "לא זמין",
- "ttft.label": "TTFT",
- "ttft.tip": "הזמן משליחת בקשת הספק עד לפלט הראשון של הדגם.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "הזמן משליחת בקשת הספק עד לטקסט הראשון בתשובה.",
+ "duration.label": "TIME",
+ "duration.tip": "הזמן מההנחיה שפתחה את התור האחרון ועד להשלמת התשובה.",
"tps.label": "TPS",
"tps.tip": "אסימוני פלט וחשיבה לשנייה בבקשות למודל בתור האחרון, ללא זמן הכלים.",
- "e2e.label": "E2E",
- "e2e.tip": "הזמן משליחת בקשת הספק עד לסיום זרם התגובה שלו.",
"nav.label": "NAV",
"nav.tip": "מעבר המסלול האחרון שהושלם ונגע בדף הפעלה, מתחילת פעולת הנתב ועד לציור הראשון לאחר שהתייצב.",
"fps.label": "FPS",
diff --git a/packages/gui-extensions/src/debug/i18n/hi.ts b/packages/gui-extensions/src/debug/i18n/hi.ts
index d520264b7296..fbfa1cb7253a 100644
--- a/packages/gui-extensions/src/debug/i18n/hi.ts
+++ b/packages/gui-extensions/src/debug/i18n/hi.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "विकास प्रदर्शन निदान",
providerAriaLabel: "प्रोवाइडर के प्रदर्शन का निदान",
na: "एन/ए",
- "ttft.label": "TTFT",
- "ttft.tip": "प्रोवाइडर अनुरोध भेजे जाने से मॉडल का पहला आउटपुट मिलने तक का समय।",
- "ttfa.label": "TTFA",
- "ttfa.tip": "प्रोवाइडर अनुरोध भेजे जाने से उत्तर का पहला टेक्स्ट मिलने तक का समय।",
+ "duration.label": "TIME",
+ "duration.tip": "नवीनतम टर्न शुरू करने वाले प्रॉम्प्ट से उसके उत्तर के पूरा होने तक का समय।",
"tps.label": "TPS",
"tps.tip": "नवीनतम टर्न के मॉडल अनुरोधों में प्रति सेकंड आउटपुट और रीज़निंग टोकन, टूल के समय को छोड़कर।",
- "e2e.label": "E2E",
- "e2e.tip": "प्रोवाइडर अनुरोध भेजे जाने से उसकी रिस्पॉन्स स्ट्रीम समाप्त होने तक का समय।",
"nav.label": "NAV",
"nav.tip":
"सेशन पृष्ठ को छूते हुए अंतिम पूर्ण मार्ग परिवर्तन, राउटर प्रारंभ से लेकर उसके व्यवस्थित होने के बाद पहले पेंट तक मापा जाता है।",
diff --git a/packages/gui-extensions/src/debug/i18n/hr.ts b/packages/gui-extensions/src/debug/i18n/hr.ts
index 2b9c2809465b..6fd12807fceb 100644
--- a/packages/gui-extensions/src/debug/i18n/hr.ts
+++ b/packages/gui-extensions/src/debug/i18n/hr.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Dijagnostika izvedbe razvoja",
providerAriaLabel: "Dijagnostika performansi pružatelja usluge",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Vrijeme od slanja zahtjeva pružatelju do prvog izlaza modela.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Vrijeme od slanja zahtjeva pružatelju do prvog teksta odgovora.",
+ "duration.label": "TIME",
+ "duration.tip": "Vrijeme od upita koji je započeo posljednji potez do završetka odgovora.",
"tps.label": "TPS",
"tps.tip":
"Izlazni tokeni i tokeni rasuđivanja u sekundi kroz zahtjeve modelu u posljednjem potezu, bez vremena alata.",
- "e2e.label": "E2E",
- "e2e.tip": "Vrijeme od slanja zahtjeva pružatelju do završetka toka odgovora.",
"nav.label": "NAV",
"nav.tip":
"Zadnji dovršeni prijelaz rute koji dodiruje stranicu sesije, mjereno od početka usmjerivača do prve boje nakon što se slegne.",
diff --git a/packages/gui-extensions/src/debug/i18n/hu.ts b/packages/gui-extensions/src/debug/i18n/hu.ts
index 0d54a430234f..abdd103173a0 100644
--- a/packages/gui-extensions/src/debug/i18n/hu.ts
+++ b/packages/gui-extensions/src/debug/i18n/hu.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Fejlesztési teljesítmény diagnosztika",
providerAriaLabel: "Szolgáltatói teljesítménydiagnosztika",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "A szolgáltatói kérés elküldésétől a modell első kimenetéig eltelt idő.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "A szolgáltatói kérés elküldésétől az első válaszszövegig eltelt idő.",
+ "duration.label": "TIME",
+ "duration.tip": "A legutóbbi kört indító kéréstől a válasz befejezéséig eltelt idő.",
"tps.label": "TPS",
"tps.tip": "Kimeneti és gondolkodási tokenek másodpercenként a legutóbbi kör modellkérésein, az eszközidő nélkül.",
- "e2e.label": "E2E",
- "e2e.tip": "A szolgáltatói kérés elküldésétől a válaszfolyam végéig eltelt idő.",
"nav.label": "NAV",
"nav.tip":
"Utolsó befejezett útvonal-átmenet, amely egy munkamenet-oldalt érint, az útválasztó indulásától az első festésig mérve.",
diff --git a/packages/gui-extensions/src/debug/i18n/hy.ts b/packages/gui-extensions/src/debug/i18n/hy.ts
index 5552c27007fa..12c762945c62 100644
--- a/packages/gui-extensions/src/debug/i18n/hy.ts
+++ b/packages/gui-extensions/src/debug/i18n/hy.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Զարգացման կատարողականի ախտորոշում",
providerAriaLabel: "Մատակարարի արդյունավետության ախտորոշում",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Մատակարարին հարցումն ուղարկելուց մինչև մոդելի առաջին ելքը ընկած ժամանակը։",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Մատակարարին հարցումն ուղարկելուց մինչև պատասխանի առաջին տեքստը ընկած ժամանակը։",
+ "duration.label": "TIME",
+ "duration.tip": "Վերջին հերթը սկսած հարցումից մինչև պատասխանի ավարտն ընկած ժամանակը։",
"tps.label": "TPS",
"tps.tip":
"Ելքային և դատողության տոկենների քանակը վայրկյանում՝ վերջին հերթի մոդելային հարցումներում, առանց գործիքների ժամանակի։",
- "e2e.label": "E2E",
- "e2e.tip": "Մատակարարին հարցումն ուղարկելուց մինչև պատասխանի հոսքի ավարտը ընկած ժամանակը։",
"nav.label": "NAV",
"nav.tip":
"Վերջին ավարտված երթուղու անցումը հպվելով աշխատաշրջանի էջին, որը չափվում է երթուղիչի սկզբից մինչև այն նստելուց հետո առաջին ներկը:",
diff --git a/packages/gui-extensions/src/debug/i18n/id.ts b/packages/gui-extensions/src/debug/i18n/id.ts
index 4c4fb8473320..eb42512799cf 100644
--- a/packages/gui-extensions/src/debug/i18n/id.ts
+++ b/packages/gui-extensions/src/debug/i18n/id.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostik kinerja pengembangan",
providerAriaLabel: "Diagnostik kinerja penyedia",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Waktu sejak permintaan dikirim ke penyedia hingga keluaran pertama model.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Waktu sejak permintaan dikirim ke penyedia hingga teks jawaban pertama.",
+ "duration.label": "TIME",
+ "duration.tip": "Waktu dari prompt yang memulai giliran terakhir hingga responsnya selesai.",
"tps.label": "TPS",
"tps.tip":
"Token keluaran dan penalaran per detik di seluruh permintaan model pada giliran terakhir, tanpa waktu alat.",
- "e2e.label": "E2E",
- "e2e.tip": "Waktu sejak permintaan dikirim ke penyedia hingga aliran responsnya berakhir.",
"nav.label": "NAV",
"nav.tip":
"Transisi rute terakhir yang mencapai halaman sesi, diukur sejak perute dimulai hingga render pertama setelah stabil.",
diff --git a/packages/gui-extensions/src/debug/i18n/is.ts b/packages/gui-extensions/src/debug/i18n/is.ts
index fffb0957655f..d084f2031b86 100644
--- a/packages/gui-extensions/src/debug/i18n/is.ts
+++ b/packages/gui-extensions/src/debug/i18n/is.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Þróunarárangursgreiningar",
providerAriaLabel: "Afkastagreining þjónustuveitu",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til fyrsta úttak líkansins berst.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til fyrsti svartextinn berst.",
+ "duration.label": "TIME",
+ "duration.tip": "Tími frá kvaðningunni sem hóf síðustu umferð þar til svarinu lauk.",
"tps.label": "TPS",
"tps.tip": "Úttaks- og rökhugsunartókar á sekúndu í líkansbeiðnum síðustu umferðar, án tíma verkfæra.",
- "e2e.label": "E2E",
- "e2e.tip": "Tími frá því að beiðni er send til þjónustuveitu þar til svarstraumnum lýkur.",
"nav.label": "NAV",
"nav.tip":
"Síðasta lokið leiðarskipti sem snertir lotusíðu, mæld frá byrjun beinis þar til fyrsta málningin eftir að hún sest.",
diff --git a/packages/gui-extensions/src/debug/i18n/it.ts b/packages/gui-extensions/src/debug/i18n/it.ts
index c2f0c4887089..39fc89635638 100644
--- a/packages/gui-extensions/src/debug/i18n/it.ts
+++ b/packages/gui-extensions/src/debug/i18n/it.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostica delle prestazioni di sviluppo",
providerAriaLabel: "Diagnostica delle prestazioni del provider",
na: "n/d",
- "ttft.label": "TTFT",
- "ttft.tip": "Tempo dall’invio della richiesta al provider al primo output del modello.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tempo dall’invio della richiesta al provider al primo testo della risposta.",
+ "duration.label": "TIME",
+ "duration.tip": "Tempo dal prompt che ha avviato l'ultimo turno al completamento della risposta.",
"tps.label": "TPS",
"tps.tip":
"Token di output e di ragionamento al secondo nelle richieste al modello dell'ultimo turno, escluso il tempo degli strumenti.",
- "e2e.label": "E2E",
- "e2e.tip": "Tempo dall’invio della richiesta al provider alla fine del flusso di risposta.",
"nav.label": "NAV",
"nav.tip":
"Ultima transizione completata relativa a una pagina di sessione, misurata dall'avvio del router fino al primo rendering dopo la stabilizzazione.",
diff --git a/packages/gui-extensions/src/debug/i18n/ja.ts b/packages/gui-extensions/src/debug/i18n/ja.ts
index a2379cb60a23..6f2eb22dc68e 100644
--- a/packages/gui-extensions/src/debug/i18n/ja.ts
+++ b/packages/gui-extensions/src/debug/i18n/ja.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "開発パフォーマンス診断",
providerAriaLabel: "プロバイダーのパフォーマンス診断",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "プロバイダーへのリクエスト送信からモデルの最初の出力までの時間。",
- "ttfa.label": "TTFA",
- "ttfa.tip": "プロバイダーへのリクエスト送信から最初の回答テキストまでの時間。",
+ "duration.label": "TIME",
+ "duration.tip": "直近のターンを開始したプロンプトから応答が完了するまでの時間。",
"tps.label": "TPS",
"tps.tip": "直近のターンのモデルリクエスト全体での1秒あたりの出力・推論トークン数(ツールの実行時間を除く)。",
- "e2e.label": "E2E",
- "e2e.tip": "プロバイダーへのリクエスト送信から応答ストリームの終了までの時間。",
"nav.label": "NAV",
"nav.tip": "セッションページに関係する最後に完了したルート遷移。ルーターの開始から処理完了後の最初の描画までを測定。",
"fps.label": "FPS",
diff --git a/packages/gui-extensions/src/debug/i18n/ka.ts b/packages/gui-extensions/src/debug/i18n/ka.ts
index 2794c2d12da9..0261783024cb 100644
--- a/packages/gui-extensions/src/debug/i18n/ka.ts
+++ b/packages/gui-extensions/src/debug/i18n/ka.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "განვითარების შესრულების დიაგნოსტიკა",
providerAriaLabel: "პროვაიდერის წარმადობის დიაგნოსტიკა",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან მოდელის პირველ გამომავალ მონაცემამდე.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან პასუხის პირველ ტექსტამდე.",
+ "duration.label": "TIME",
+ "duration.tip": "დრო ბოლო სვლის დამწყები მოთხოვნიდან პასუხის დასრულებამდე.",
"tps.label": "TPS",
"tps.tip": "გამომავალი და მსჯელობის ტოკენები წამში ბოლო სვლის მოდელის მოთხოვნებში, ხელსაწყოების დროის გარეშე.",
- "e2e.label": "E2E",
- "e2e.tip": "დრო პროვაიდერისთვის მოთხოვნის გაგზავნიდან პასუხის ნაკადის დასრულებამდე.",
"nav.label": "NAV",
"nav.tip":
"ბოლო დასრულებული მარშრუტის გადასვლა სესიის გვერდთან შეხებით, გაზომილი როუტერის დაწყებიდან პირველ შეღებვამდე მისი დალაგების შემდეგ.",
diff --git a/packages/gui-extensions/src/debug/i18n/km.ts b/packages/gui-extensions/src/debug/i18n/km.ts
index 40327c4ce61a..66942e3ca8af 100644
--- a/packages/gui-extensions/src/debug/i18n/km.ts
+++ b/packages/gui-extensions/src/debug/i18n/km.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "ការវិនិច្ឆ័យដំណើរការអភិវឌ្ឍន៍",
providerAriaLabel: "ការវិនិច្ឆ័យដំណើរការរបស់អ្នកផ្តល់សេវា",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់លទ្ធផលដំបូងរបស់ម៉ូដែល។",
- "ttfa.label": "TTFA",
- "ttfa.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់អត្ថបទចម្លើយដំបូង។",
+ "duration.label": "TIME",
+ "duration.tip": "ពេលវេលាចាប់ពីប្រអប់បញ្ចូលដែលចាប់ផ្តើមវេនចុងក្រោយ រហូតដល់ការឆ្លើយតបបានបញ្ចប់។",
"tps.label": "TPS",
"tps.tip": "ថូខឹនលទ្ធផល និងការវែកញែកក្នុងមួយវិនាទី លើសំណើម៉ូដែលនៃវេនចុងក្រោយ ដោយមិនរាប់ពេលវេលាឧបករណ៍។",
- "e2e.label": "E2E",
- "e2e.tip": "ពេលវេលាចាប់ពីផ្ញើសំណើទៅអ្នកផ្តល់សេវា រហូតដល់ស្ទ្រីមឆ្លើយតបបញ្ចប់។",
"nav.label": "NAV",
"nav.tip":
"ការផ្លាស់ប្តូរផ្លូវដែលបានបញ្ចប់ចុងក្រោយដោយប៉ះទំព័រសម័យមួយ ដែលវាស់វែងពីការចាប់ផ្តើមរ៉ោតទ័រ រហូតដល់ការលាបពណ៌ដំបូងបន្ទាប់ពីវាដោះស្រាយ។",
diff --git a/packages/gui-extensions/src/debug/i18n/ko.ts b/packages/gui-extensions/src/debug/i18n/ko.ts
index 2db8da35a8b5..27604e4f9db2 100644
--- a/packages/gui-extensions/src/debug/i18n/ko.ts
+++ b/packages/gui-extensions/src/debug/i18n/ko.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "개발 성능 진단",
providerAriaLabel: "공급자 성능 진단",
na: "해당 없음",
- "ttft.label": "TTFT",
- "ttft.tip": "공급자 요청 전송부터 모델의 첫 출력까지 걸린 시간입니다.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "공급자 요청 전송부터 첫 답변 텍스트까지 걸린 시간입니다.",
+ "duration.label": "TIME",
+ "duration.tip": "최근 턴을 시작한 프롬프트부터 응답이 완료될 때까지 걸린 시간입니다.",
"tps.label": "TPS",
"tps.tip": "최근 턴의 모델 요청 전체에서 초당 출력 및 추론 토큰 수입니다. 도구 시간은 제외됩니다.",
- "e2e.label": "E2E",
- "e2e.tip": "공급자 요청 전송부터 응답 스트림이 끝날 때까지 걸린 시간입니다.",
"nav.label": "NAV",
"nav.tip": "세션 페이지에 닿은 마지막 완료된 라우트 전환. 라우터 시작부터 정착 후 첫 번째 페인트까지 측정됨.",
"fps.label": "FPS",
diff --git a/packages/gui-extensions/src/debug/i18n/lo.ts b/packages/gui-extensions/src/debug/i18n/lo.ts
index 15089bf60c23..6a1743c2e073 100644
--- a/packages/gui-extensions/src/debug/i18n/lo.ts
+++ b/packages/gui-extensions/src/debug/i18n/lo.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "ການວິນິດໄສປະສິດທິພາບການພັດທະນາ",
providerAriaLabel: "ການວິນິດໄສປະສິດທິພາບຜູ້ໃຫ້ບໍລິການ",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນເຖິງຜົນລັບທຳອິດຈາກໂມເດວ.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນເຖິງຂໍ້ຄວາມຄຳຕອບທຳອິດ.",
+ "duration.label": "TIME",
+ "duration.tip": "ເວລາຕັ້ງແຕ່ຄຳສັ່ງທີ່ເລີ່ມຮອບຫຼ້າສຸດ ຈົນເຖິງການຕອບກັບສຳເລັດ.",
"tps.label": "TPS",
"tps.tip": "ໂທເຄັນຜົນລັບ ແລະ ການໃຫ້ເຫດຜົນຕໍ່ວິນາທີ ໃນຄຳຮ້ອງຂໍໂມເດວຂອງຮອບຫຼ້າສຸດ ໂດຍບໍ່ນັບເວລາຂອງເຄື່ອງມື.",
- "e2e.label": "E2E",
- "e2e.tip": "ເວລາຕັ້ງແຕ່ສົ່ງຄຳຂໍໄປຫາຜູ້ໃຫ້ບໍລິການ ຈົນກະແສການຕອບກັບສິ້ນສຸດ.",
"nav.label": "NAV",
"nav.tip":
"ການປ່ຽນເສັ້ນທາງທີ່ສຳເລັດຫຼ້າສຸດໂດຍແຕະໃສ່ໜ້າເຊສຊັນ, ວັດແທກຈາກການເລີ່ມຕົ້ນຂອງເຣົາເຕີຈົນຮອດສີທຳອິດຫຼັງຈາກທີ່ມັນຕົກລົງ.",
diff --git a/packages/gui-extensions/src/debug/i18n/lt.ts b/packages/gui-extensions/src/debug/i18n/lt.ts
index 993ecf0fd4e0..8f11e194992a 100644
--- a/packages/gui-extensions/src/debug/i18n/lt.ts
+++ b/packages/gui-extensions/src/debug/i18n/lt.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Vystymosi veiklos diagnostika",
providerAriaLabel: "Teikėjo našumo diagnostika",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki pirmosios modelio išvesties.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki pirmojo atsakymo teksto.",
+ "duration.label": "TIME",
+ "duration.tip": "Laikas nuo užklausos, pradėjusios paskutinį ėjimą, iki atsakymo pabaigos.",
"tps.label": "TPS",
"tps.tip":
"Išvesties ir samprotavimo žetonai per sekundę per paskutinio ėjimo modelio užklausas, neįskaitant įrankių laiko.",
- "e2e.label": "E2E",
- "e2e.tip": "Laikas nuo užklausos išsiuntimo teikėjui iki atsakymo srauto pabaigos.",
"nav.label": "NAV",
"nav.tip":
"Paskutinis baigtas maršruto perėjimas, liečiant seanso puslapį, matuojant nuo maršrutizatoriaus pradžios iki pirmojo dažymo po to, kai jis nusistovi.",
diff --git a/packages/gui-extensions/src/debug/i18n/lv.ts b/packages/gui-extensions/src/debug/i18n/lv.ts
index 57dfcbf27e3b..7e0653d60783 100644
--- a/packages/gui-extensions/src/debug/i18n/lv.ts
+++ b/packages/gui-extensions/src/debug/i18n/lv.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Izstrādes veiktspējas diagnostika",
providerAriaLabel: "Pakalpojumu sniedzēja veiktspējas diagnostika",
na: "nav",
- "ttft.label": "TTFT",
- "ttft.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz pirmajai modeļa izvadei.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz pirmajam atbildes tekstam.",
+ "duration.label": "TIME",
+ "duration.tip": "Laiks no uzvednes, kas sāka pēdējo gājienu, līdz atbildes pabeigšanai.",
"tps.label": "TPS",
"tps.tip": "Izvades un spriešanas žetoni sekundē pēdējā gājiena modeļa pieprasījumos, neskaitot rīku laiku.",
- "e2e.label": "E2E",
- "e2e.tip": "Laiks no pieprasījuma nosūtīšanas pakalpojumu sniedzējam līdz atbildes straumes beigām.",
"nav.label": "NAV",
"nav.tip":
"Pēdējā pabeigtā maršruta pāreja, kas skar sesijas lapu, mērīts no maršrutētāja sākuma līdz pirmajam attēlojumam pēc stabilizācijas.",
diff --git a/packages/gui-extensions/src/debug/i18n/mk.ts b/packages/gui-extensions/src/debug/i18n/mk.ts
index cd513d9c343c..05eae87c8819 100644
--- a/packages/gui-extensions/src/debug/i18n/mk.ts
+++ b/packages/gui-extensions/src/debug/i18n/mk.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Дијагностика на перформансите на развојот",
providerAriaLabel: "Дијагностика на перформансите на давателот",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Време од испраќањето на барањето до давателот до првиот излез од моделот.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Време од испраќањето на барањето до давателот до првиот текст на одговорот.",
+ "duration.label": "TIME",
+ "duration.tip": "Време од барањето што го започна последниот потег до завршувањето на одговорот.",
"tps.label": "TPS",
"tps.tip":
"Излезни токени и токени за расудување во секунда низ барањата до моделот во последниот потег, без времето на алатките.",
- "e2e.label": "E2E",
- "e2e.tip": "Време од испраќањето на барањето до давателот до завршувањето на текот на одговорот.",
"nav.label": "NAV",
"nav.tip":
"Последна завршена транзиција на маршрута со допирање на страница со сесија, мерена од почетокот на рутерот до првата боја откако ќе се среди.",
diff --git a/packages/gui-extensions/src/debug/i18n/mn.ts b/packages/gui-extensions/src/debug/i18n/mn.ts
index e2de06e9262c..2ce8a2ddcc78 100644
--- a/packages/gui-extensions/src/debug/i18n/mn.ts
+++ b/packages/gui-extensions/src/debug/i18n/mn.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Хөгжлийн гүйцэтгэлийн оношлогоо",
providerAriaLabel: "Үйлчилгээ үзүүлэгчийн гүйцэтгэлийн оношилгоо",
na: "үгүй",
- "ttft.label": "TTFT",
- "ttft.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс загварын эхний гаралт хүртэлх хугацаа.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс хариултын эхний бичвэр хүртэлх хугацаа.",
+ "duration.label": "TIME",
+ "duration.tip": "Сүүлийн ээлжийг эхлүүлсэн хүсэлтээс хариулт дуусах хүртэлх хугацаа.",
"tps.label": "TPS",
"tps.tip":
"Сүүлийн ээлжийн загварын хүсэлтүүд дэх секунд тутмын гаралтын болон сэтгэлгээний токен, хэрэгслийн хугацааг оруулахгүй.",
- "e2e.label": "E2E",
- "e2e.tip": "Үйлчилгээ үзүүлэгч рүү хүсэлт илгээснээс хариултын урсгал дуусах хүртэлх хугацаа.",
"nav.label": "NAV",
"nav.tip":
"Чиглүүлэгчийн эхлэлээс эхлээд тогтсоны дараа анхны будалт хүртэл хэмжсэн хамгийн сүүлд дууссан маршрутын шилжилтийг сессийн хуудсанд хүрнэ.",
diff --git a/packages/gui-extensions/src/debug/i18n/ms.ts b/packages/gui-extensions/src/debug/i18n/ms.ts
index 862089e27133..96c74fd0ef30 100644
--- a/packages/gui-extensions/src/debug/i18n/ms.ts
+++ b/packages/gui-extensions/src/debug/i18n/ms.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostik prestasi pembangunan",
providerAriaLabel: "Diagnostik prestasi penyedia",
na: "tiada",
- "ttft.label": "TTFT",
- "ttft.tip": "Masa dari penghantaran permintaan penyedia hingga output pertama model.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Masa dari penghantaran permintaan penyedia hingga teks jawapan pertama.",
+ "duration.label": "TIME",
+ "duration.tip": "Masa dari gesaan yang memulakan giliran terakhir sehingga responsnya selesai.",
"tps.label": "TPS",
"tps.tip":
"Token output dan penaakulan sesaat merentas permintaan model dalam giliran terakhir, tidak termasuk masa alat.",
- "e2e.label": "E2E",
- "e2e.tip": "Masa dari penghantaran permintaan penyedia hingga strim responsnya tamat.",
"nav.label": "NAV",
"nav.tip":
"Peralihan laluan terakhir yang melibatkan halaman sesi, diukur dari permulaan router hingga cat pertama selepas ia stabil.",
diff --git a/packages/gui-extensions/src/debug/i18n/my.ts b/packages/gui-extensions/src/debug/i18n/my.ts
index 7f86c188ec1e..f4b1fb4e82b2 100644
--- a/packages/gui-extensions/src/debug/i18n/my.ts
+++ b/packages/gui-extensions/src/debug/i18n/my.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "ဖွံ့ဖြိုးတိုးတက်မှု စွမ်းဆောင်ရည် အဖြေရှာခြင်း",
providerAriaLabel: "ဝန်ဆောင်မှုပေးသူ စွမ်းဆောင်ရည် အဖြေရှာခြင်း",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ မော်ဒယ်၏ ပထမဆုံးအထွက်ရရှိချိန်အထိ ကြာချိန်။",
- "ttfa.label": "TTFA",
- "ttfa.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ ပထမဆုံးအဖြေစာသားရရှိချိန်အထိ ကြာချိန်။",
+ "duration.label": "TIME",
+ "duration.tip": "နောက်ဆုံးအလှည့်ကို စတင်ခဲ့သော ညွှန်ကြားချက်မှ တုံ့ပြန်မှု ပြီးဆုံးချိန်အထိ ကြာချိန်။",
"tps.label": "TPS",
"tps.tip":
"နောက်ဆုံးအလှည့်၏ မော်ဒယ်တောင်းဆိုမှုများတစ်လျှောက် တစ်စက္ကန့်လျှင် ထွက်ရှိမှုနှင့် ဆင်ခြင်မှု တိုကင်များ၊ ကိရိယာအချိန် မပါဝင်ပါ။",
- "e2e.label": "E2E",
- "e2e.tip": "ဝန်ဆောင်မှုပေးသူထံ တောင်းဆိုချက်ပို့ချိန်မှ တုံ့ပြန်မှုစီးကြောင်း ပြီးဆုံးချိန်အထိ ကြာချိန်။",
"nav.label": "NAV",
"nav.tip":
"နောက်ဆုံးပြီးစီးခဲ့သော လမ်းကြောင်းအပြောင်းအရွှေ့သည် အခြေချပြီးနောက် ပထမဆေးခြယ်ခြင်းအထိ တိုင်းတာသည့် စက်ရှင်စာမျက်နှာကိုထိခြင်း၊",
diff --git a/packages/gui-extensions/src/debug/i18n/ne.ts b/packages/gui-extensions/src/debug/i18n/ne.ts
index 7d67af654340..8517d63c0b70 100644
--- a/packages/gui-extensions/src/debug/i18n/ne.ts
+++ b/packages/gui-extensions/src/debug/i18n/ne.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "विकास प्रदर्शन निदान",
providerAriaLabel: "प्रदायकको कार्यसम्पादन निदान",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "प्रदायक अनुरोध पठाइएदेखि मोडेलको पहिलो आउटपुट आउँदासम्मको समय।",
- "ttfa.label": "TTFA",
- "ttfa.tip": "प्रदायक अनुरोध पठाइएदेखि उत्तरको पहिलो पाठ आउँदासम्मको समय।",
+ "duration.label": "TIME",
+ "duration.tip": "पछिल्लो पालो सुरु गर्ने प्रम्प्टदेखि त्यसको जवाफ पूरा हुँदासम्मको समय।",
"tps.label": "TPS",
"tps.tip": "पछिल्लो पालोका मोडेल अनुरोधहरूमा प्रति सेकेन्ड आउटपुट र तर्क टोकन, उपकरणको समय बाहेक।",
- "e2e.label": "E2E",
- "e2e.tip": "प्रदायक अनुरोध पठाइएदेखि यसको प्रतिक्रिया स्ट्रिम समाप्त हुँदासम्मको समय।",
"nav.label": "NAV",
"nav.tip":
"अन्तिम सम्पन्न भएको रुट ट्रान्जिसन सत्र पृष्ठलाई छुँदै, राउटर स्टार्टबाट पहिलो पेन्ट सेटल भएपछि मापन गरिन्छ।",
diff --git a/packages/gui-extensions/src/debug/i18n/nl.ts b/packages/gui-extensions/src/debug/i18n/nl.ts
index fcfc8723062a..c7ea26008b0e 100644
--- a/packages/gui-extensions/src/debug/i18n/nl.ts
+++ b/packages/gui-extensions/src/debug/i18n/nl.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Diagnostiek voor ontwikkelprestaties",
providerAriaLabel: "Prestatiediagnose van provider",
na: "n.v.t.",
- "ttft.label": "TTFT",
- "ttft.tip": "Tijd vanaf het verzenden van de provideraanvraag tot de eerste modeluitvoer.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tijd vanaf het verzenden van de provideraanvraag tot de eerste antwoordtekst.",
+ "duration.label": "TIME",
+ "duration.tip": "Tijd vanaf de prompt die de laatste beurt startte tot het antwoord klaar was.",
"tps.label": "TPS",
"tps.tip": "Uitvoer- en redeneertokens per seconde over de modelverzoeken van de laatste beurt, zonder tooltijd.",
- "e2e.label": "E2E",
- "e2e.tip": "Tijd vanaf het verzenden van de provideraanvraag tot het einde van de antwoordstream.",
"nav.label": "NAV",
"nav.tip":
"Laatst voltooide routenavigatie naar of binnen een sessiepagina, gemeten vanaf het starten van de router tot de eerste render nadat de navigatie is voltooid.",
diff --git a/packages/gui-extensions/src/debug/i18n/no.ts b/packages/gui-extensions/src/debug/i18n/no.ts
index 9dc18c9844fb..af9e6b5c0540 100644
--- a/packages/gui-extensions/src/debug/i18n/no.ts
+++ b/packages/gui-extensions/src/debug/i18n/no.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Utviklingsytelsesdiagnostikk",
providerAriaLabel: "Ytelsesdiagnostikk for leverandør",
na: "i/t",
- "ttft.label": "TTFT",
- "ttft.tip": "Tid fra leverandørforespørselen sendes til den første modellutdataen.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tid fra leverandørforespørselen sendes til den første svarteksten.",
+ "duration.label": "TIME",
+ "duration.tip": "Tid fra ledeteksten som startet siste tur, til svaret var ferdig.",
"tps.label": "TPS",
"tps.tip": "Utdata- og resonneringstokener per sekund på tvers av modellforespørslene i siste tur, uten verktøytid.",
- "e2e.label": "E2E",
- "e2e.tip": "Tid fra leverandørforespørselen sendes til svarstrømmen er avsluttet.",
"nav.label": "NAV",
"nav.tip":
"Siste fullførte ruteovergang som berører en sesjonsside, målt fra ruterstart til første gjengivelse etter at den har roet seg.",
diff --git a/packages/gui-extensions/src/debug/i18n/pa.ts b/packages/gui-extensions/src/debug/i18n/pa.ts
index f0c04ca2bac1..5b4b3cd85a88 100644
--- a/packages/gui-extensions/src/debug/i18n/pa.ts
+++ b/packages/gui-extensions/src/debug/i18n/pa.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "ترقی دی کارکردگی دی تشخیص",
providerAriaLabel: "فراہم کنندہ دی کارکردگی دی تشخیص",
na: "لاگو نئیں",
- "ttft.label": "TTFT",
- "ttft.tip": "فراہم کنندہ دی درخواست بھیجن توں ماڈل دی پہلی آؤٹ پٹ تک دا سماں۔",
- "ttfa.label": "TTFA",
- "ttfa.tip": "فراہم کنندہ دی درخواست بھیجن توں جواب دے پہلے متن تک دا سماں۔",
+ "duration.label": "TIME",
+ "duration.tip": "ਤਾਜ਼ਾ ਵਾਰੀ ਸ਼ੁਰੂ ਕਰਨ ਵਾਲੇ ਪ੍ਰੌਂਪਟ ਤੋਂ ਉਸਦੇ ਜਵਾਬ ਦੇ ਪੂਰਾ ਹੋਣ ਤੱਕ ਦਾ ਸਮਾਂ।",
"tps.label": "TPS",
"tps.tip": "ਤਾਜ਼ਾ ਵਾਰੀ ਦੀਆਂ ਮਾਡਲ ਬੇਨਤੀਆਂ ਵਿੱਚ ਪ੍ਰਤੀ ਸਕਿੰਟ ਆਉਟਪੁੱਟ ਅਤੇ ਤਰਕ ਟੋਕਨ, ਟੂਲ ਦੇ ਸਮੇਂ ਤੋਂ ਬਿਨਾਂ।",
- "e2e.label": "E2E",
- "e2e.tip": "فراہم کنندہ دی درخواست بھیجن توں اوہدے جواب دی سٹریم ختم ہون تک دا سماں۔",
"nav.label": "NAV",
"nav.tip":
"سیشن دے صفحے نو چھون آلے آخری مکمل روٹ ٹرانزیشن، روٹر دے آغاز توں لے کے اس دے ٹک جان دے بعد پہلے پینٹ تک ماپیا جاندا اے۔",
diff --git a/packages/gui-extensions/src/debug/i18n/pl.ts b/packages/gui-extensions/src/debug/i18n/pl.ts
index bb36e8cb901e..35cb68befe93 100644
--- a/packages/gui-extensions/src/debug/i18n/pl.ts
+++ b/packages/gui-extensions/src/debug/i18n/pl.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostyka wydajności w środowisku deweloperskim",
providerAriaLabel: "Diagnostyka wydajności dostawcy",
na: "n.d.",
- "ttft.label": "TTFT",
- "ttft.tip": "Czas od wysłania żądania do dostawcy do pierwszego wyniku modelu.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Czas od wysłania żądania do dostawcy do pierwszego tekstu odpowiedzi.",
+ "duration.label": "TIME",
+ "duration.tip": "Czas od polecenia, które rozpoczęło ostatnią turę, do zakończenia odpowiedzi.",
"tps.label": "TPS",
"tps.tip":
"Tokeny wyjściowe i rozumowania na sekundę we wszystkich żądaniach do modelu w ostatniej turze, bez czasu narzędzi.",
- "e2e.label": "E2E",
- "e2e.tip": "Czas od wysłania żądania do dostawcy do zakończenia strumienia odpowiedzi.",
"nav.label": "NAV",
"nav.tip":
"Ostatnie zakończone przejście między trasami obejmujące stronę sesji, mierzone od uruchomienia routera do pierwszego odrysowania po ustabilizowaniu widoku.",
diff --git a/packages/gui-extensions/src/debug/i18n/ro.ts b/packages/gui-extensions/src/debug/i18n/ro.ts
index ea3937baf1f1..d42f8f14759d 100644
--- a/packages/gui-extensions/src/debug/i18n/ro.ts
+++ b/packages/gui-extensions/src/debug/i18n/ro.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnosticare performanță dezvoltare",
providerAriaLabel: "Diagnosticarea performanței furnizorului",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Timpul de la trimiterea cererii către furnizor până la prima ieșire a modelului.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Timpul de la trimiterea cererii către furnizor până la primul text al răspunsului.",
+ "duration.label": "TIME",
+ "duration.tip": "Timpul de la solicitarea care a început ultima tură până la finalizarea răspunsului.",
"tps.label": "TPS",
"tps.tip":
"Tokenuri de ieșire și de raționament pe secundă în cererile către model din ultima tură, fără timpul instrumentelor.",
- "e2e.label": "E2E",
- "e2e.tip": "Timpul de la trimiterea cererii către furnizor până la încheierea fluxului de răspuns.",
"nav.label": "NAV",
"nav.tip":
"Ultima tranziție de rută finalizată care implică o pagină de sesiune, măsurată de la pornirea routerului până la primul paint după stabilizare.",
diff --git a/packages/gui-extensions/src/debug/i18n/ru.ts b/packages/gui-extensions/src/debug/i18n/ru.ts
index 51dcc2ba50f5..1d32063c4fed 100644
--- a/packages/gui-extensions/src/debug/i18n/ru.ts
+++ b/packages/gui-extensions/src/debug/i18n/ru.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Диагностика производительности разработки",
providerAriaLabel: "Диагностика производительности поставщика",
na: "н/д",
- "ttft.label": "TTFT",
- "ttft.tip": "Время от отправки запроса поставщику до первого вывода модели.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Время от отправки запроса поставщику до первого текста ответа.",
+ "duration.label": "TIME",
+ "duration.tip": "Время от запроса, начавшего последний ход, до завершения ответа.",
"tps.label": "TPS",
"tps.tip":
"Выходные токены и токены рассуждений в секунду по запросам к модели за последний ход, без учёта времени инструментов.",
- "e2e.label": "E2E",
- "e2e.tip": "Время от отправки запроса поставщику до завершения потока ответа.",
"nav.label": "NAV",
"nav.tip":
"Последний завершённый переход по маршруту, затрагивающий страницу сессии: от запуска маршрутизатора до первой отрисовки после стабилизации.",
diff --git a/packages/gui-extensions/src/debug/i18n/si.ts b/packages/gui-extensions/src/debug/i18n/si.ts
index 00bf53086b71..858a4f344dc3 100644
--- a/packages/gui-extensions/src/debug/i18n/si.ts
+++ b/packages/gui-extensions/src/debug/i18n/si.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "සංවර්ධන කාර්ය සාධන රෝග විනිශ්චය",
providerAriaLabel: "සපයන්නාගේ කාර්යසාධන රෝග නිර්ණය",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට පළමු මාදිලි ප්රතිදානය දක්වා කාලය.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට පිළිතුරේ පළමු පෙළ දක්වා කාලය.",
+ "duration.label": "TIME",
+ "duration.tip": "අවසාන වාරය ආරම්භ කළ විමසුමේ සිට එහි ප්රතිචාරය සම්පූර්ණ වන තෙක් කාලය.",
"tps.label": "TPS",
"tps.tip": "අවසාන වාරයේ මාදිලි ඉල්ලීම් පුරා තත්පරයකට ප්රතිදාන සහ තර්කන ටෝකන, මෙවලම් කාලය හැර.",
- "e2e.label": "E2E",
- "e2e.tip": "සපයන්නාගේ ඉල්ලීම යැවූ මොහොතේ සිට එහි ප්රතිචාර ප්රවාහය අවසන් වන තෙක් කාලය.",
"nav.label": "NAV",
"nav.tip":
"සැසි පිටුවක් ස්පර්ශ කරමින් අවසන් වරට සම්පුර්ණ කරන ලද මාර්ග සංක්රාන්තිය, රවුටරය ආරම්භයේ සිට එය නිරවුල් වූ පසු පළමු තීන්ත දක්වා මනිනු ලැබේ.",
diff --git a/packages/gui-extensions/src/debug/i18n/sk.ts b/packages/gui-extensions/src/debug/i18n/sk.ts
index 55d80d827739..e48c65a29c3d 100644
--- a/packages/gui-extensions/src/debug/i18n/sk.ts
+++ b/packages/gui-extensions/src/debug/i18n/sk.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostika výkonu vývoja",
providerAriaLabel: "Diagnostika výkonu poskytovateľa",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Čas od odoslania požiadavky poskytovateľovi po prvý výstup modelu.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Čas od odoslania požiadavky poskytovateľovi po prvý text odpovede.",
+ "duration.label": "TIME",
+ "duration.tip": "Čas od výzvy, ktorá začala posledný ťah, po dokončenie odpovede.",
"tps.label": "TPS",
"tps.tip":
"Výstupné tokeny a tokeny uvažovania za sekundu naprieč požiadavkami na model v poslednom ťahu, bez času nástrojov.",
- "e2e.label": "E2E",
- "e2e.tip": "Čas od odoslania požiadavky poskytovateľovi po ukončenie prúdu odpovede.",
"nav.label": "NAV",
"nav.tip":
"Posledný dokončený prechod trasy dotýkajúci sa stránky relácie, merané od začiatku smerovača po prvé vykreslenie po ustálení.",
diff --git a/packages/gui-extensions/src/debug/i18n/sl.ts b/packages/gui-extensions/src/debug/i18n/sl.ts
index 35a9c860df8f..2c320a8636c5 100644
--- a/packages/gui-extensions/src/debug/i18n/sl.ts
+++ b/packages/gui-extensions/src/debug/i18n/sl.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Diagnostika uspešnosti razvoja",
providerAriaLabel: "Diagnostika učinkovitosti ponudnika",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Čas od pošiljanja zahteve ponudniku do prvega izhoda modela.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Čas od pošiljanja zahteve ponudniku do prvega besedila odgovora.",
+ "duration.label": "TIME",
+ "duration.tip": "Čas od poziva, ki je začel zadnjo potezo, do dokončanja odgovora.",
"tps.label": "TPS",
"tps.tip": "Izhodni žetoni in žetoni sklepanja na sekundo v zahtevah za model v zadnji potezi, brez časa orodij.",
- "e2e.label": "E2E",
- "e2e.tip": "Čas od pošiljanja zahteve ponudniku do konca toka odgovora.",
"nav.label": "NAV",
"nav.tip":
"Zadnji zaključen prehod poti, ki se je dotaknil strani seje, merjeno od začetka usmerjevalnika do prve barve po tem, ko se poravna.",
diff --git a/packages/gui-extensions/src/debug/i18n/sq.ts b/packages/gui-extensions/src/debug/i18n/sq.ts
index 2457cd490153..a5f8b7855a6b 100644
--- a/packages/gui-extensions/src/debug/i18n/sq.ts
+++ b/packages/gui-extensions/src/debug/i18n/sq.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Diagnostifikimi i performancës së zhvillimit",
providerAriaLabel: "Diagnostikimi i performancës së ofruesit",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Koha nga dërgimi i kërkesës te ofruesi deri te dalja e parë e modelit.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Koha nga dërgimi i kërkesës te ofruesi deri te teksti i parë i përgjigjes.",
+ "duration.label": "TIME",
+ "duration.tip": "Koha nga kërkesa që nisi radhën e fundit deri në përfundimin e përgjigjes.",
"tps.label": "TPS",
"tps.tip":
"Shenjat e daljes dhe të arsyetimit për sekondë në kërkesat ndaj modelit në radhën e fundit, pa kohën e mjeteve.",
- "e2e.label": "E2E",
- "e2e.tip": "Koha nga dërgimi i kërkesës te ofruesi deri në përfundimin e rrjedhës së përgjigjes.",
"nav.label": "NAV",
"nav.tip":
"Tranzicioni i fundit i përfunduar i rrugës duke prekur një faqe sesioni, i matur nga fillimi i routerit deri në bojën e parë pasi të vendoset.",
diff --git a/packages/gui-extensions/src/debug/i18n/sr.ts b/packages/gui-extensions/src/debug/i18n/sr.ts
index b47b84a9f85a..8d7828455f40 100644
--- a/packages/gui-extensions/src/debug/i18n/sr.ts
+++ b/packages/gui-extensions/src/debug/i18n/sr.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Дијагностика перформанси развоја",
providerAriaLabel: "Дијагностика перформанси добављача",
na: "н/а",
- "ttft.label": "TTFT",
- "ttft.tip": "Време од слања захтева добављачу до првог излаза модела.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Време од слања захтева добављачу до првог текста одговора.",
+ "duration.label": "TIME",
+ "duration.tip": "Време од упита који је започео последњи потез до завршетка одговора.",
"tps.label": "TPS",
"tps.tip": "Излазни токени и токени резоновања у секунди кроз захтеве моделу у последњем потезу, без времена алата.",
- "e2e.label": "E2E",
- "e2e.tip": "Време од слања захтева добављачу до завршетка тока одговора.",
"nav.label": "NAV",
"nav.tip":
"Последњи довршени прелаз руте додирује страницу сесије, мерено од почетка рутера до прве боје након што се слегне.",
diff --git a/packages/gui-extensions/src/debug/i18n/sv.ts b/packages/gui-extensions/src/debug/i18n/sv.ts
index 1cbefd16fd7c..a7fe97ee0122 100644
--- a/packages/gui-extensions/src/debug/i18n/sv.ts
+++ b/packages/gui-extensions/src/debug/i18n/sv.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Utvecklingsprestandadiagnostik",
providerAriaLabel: "Prestandadiagnostik för leverantör",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "Tid från att leverantörsbegäran skickas tills modellen ger sin första utdata.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Tid från att leverantörsbegäran skickas tills den första svarstexten visas.",
+ "duration.label": "TIME",
+ "duration.tip": "Tid från prompten som startade den senaste turen tills svaret var klart.",
"tps.label": "TPS",
"tps.tip":
"Utdata- och resonemangstoken per sekund över modellförfrågningarna i den senaste turen, utan verktygstid.",
- "e2e.label": "E2E",
- "e2e.tip": "Tid från att leverantörsbegäran skickas tills svarsströmmen avslutas.",
"nav.label": "NAV",
"nav.tip":
"Senast slutförda ruttövergång som berör en sessionssida, mätt från routerns start till första bildrutans rendering efter att övergången har slutförts.",
diff --git a/packages/gui-extensions/src/debug/i18n/tg.ts b/packages/gui-extensions/src/debug/i18n/tg.ts
index b2b1b0413b55..472912611e18 100644
--- a/packages/gui-extensions/src/debug/i18n/tg.ts
+++ b/packages/gui-extensions/src/debug/i18n/tg.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Ташхиси самаранокии рушд",
providerAriaLabel: "Ташхиси кори таъминкунанда",
na: "не",
- "ttft.label": "TTFT",
- "ttft.tip": "Вақт аз фиристодани дархост ба таъминкунанда то баромади аввалини модел.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Вақт аз фиристодани дархост ба таъминкунанда то матни аввалини ҷавоб.",
+ "duration.label": "TIME",
+ "duration.tip": "Вақт аз дархосте, ки навбати охиринро оғоз кард, то анҷоми ҷавоб.",
"tps.label": "TPS",
"tps.tip": "Токенҳои баромад ва муҳокима дар як сония дар дархостҳои модели навбати охирин, бе вақти абзорҳо.",
- "e2e.label": "E2E",
- "e2e.tip": "Вақт аз фиристодани дархост ба таъминкунанда то анҷоми ҷараёни ҷавоб.",
"nav.label": "NAV",
"nav.tip":
"Гузариши охирини хатсайри анҷомёфта ба саҳифаи сеанс, аз оғози роутер то рангкунии аввал пас аз ҳал шудани он чен карда мешавад.",
diff --git a/packages/gui-extensions/src/debug/i18n/th.ts b/packages/gui-extensions/src/debug/i18n/th.ts
index dd41bc2784f7..7adcc4e0c723 100644
--- a/packages/gui-extensions/src/debug/i18n/th.ts
+++ b/packages/gui-extensions/src/debug/i18n/th.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "การวินิจฉัยประสิทธิภาพการพัฒนา",
providerAriaLabel: "การวินิจฉัยประสิทธิภาพผู้ให้บริการ",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนถึงเอาต์พุตแรกจากโมเดล",
- "ttfa.label": "TTFA",
- "ttfa.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนถึงข้อความคำตอบแรก",
+ "duration.label": "TIME",
+ "duration.tip": "เวลาตั้งแต่พรอมต์ที่เริ่มเทิร์นล่าสุดจนถึงการตอบกลับเสร็จสิ้น",
"tps.label": "TPS",
"tps.tip": "โทเค็นเอาต์พุตและการให้เหตุผลต่อวินาทีในคำขอโมเดลของเทิร์นล่าสุด ไม่รวมเวลาของเครื่องมือ",
- "e2e.label": "E2E",
- "e2e.tip": "เวลาตั้งแต่ส่งคำขอไปยังผู้ให้บริการจนกระทั่งสตรีมการตอบกลับสิ้นสุด",
"nav.label": "NAV",
"nav.tip":
"การเปลี่ยนเส้นทางที่เสร็จสมบูรณ์ล่าสุดที่สัมผัสหน้าเซสชัน วัดจากจุดเริ่มต้นเราเตอร์จนถึงการวาดครั้งแรกหลังจากที่นิ่ง",
diff --git a/packages/gui-extensions/src/debug/i18n/tk.ts b/packages/gui-extensions/src/debug/i18n/tk.ts
index 8f50cd63ea90..f0fa30fd6882 100644
--- a/packages/gui-extensions/src/debug/i18n/tk.ts
+++ b/packages/gui-extensions/src/debug/i18n/tk.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Ösüş öndürijiligini anyklaýyş",
providerAriaLabel: "Hyzmat üpjünçiniň öndürijilik diagnostikasy",
na: "n / a",
- "ttft.label": "TTFT",
- "ttft.tip": "Hyzmat üpjünçä haýyş iberilenden modeliň ilkinji çykyşyna çenli wagt.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Hyzmat üpjünçä haýyş iberilenden jogabyň ilkinji tekstine çenli wagt.",
+ "duration.label": "TIME",
+ "duration.tip": "Soňky nobaty başlan haýyşdan jogabyň tamamlanmagyna çenli wagt.",
"tps.label": "TPS",
"tps.tip":
"Soňky nobatyň model haýyşlary boýunça sekuntda çykyş we pikirleniş tokenleri, gural wagty hasaba alynmazdan.",
- "e2e.label": "E2E",
- "e2e.tip": "Hyzmat üpjünçä haýyş iberilenden jogap akymynyň tamamlanmagyna çenli wagt.",
"nav.label": "NAV",
"nav.tip":
"Iň soňky tamamlanan marşrut geçiş, sessiýa sahypasyna degip, marşrutizatoryň başyndan başlap, birinji boýag kesgitlenýänçä ölçelýär.",
diff --git a/packages/gui-extensions/src/debug/i18n/tr.ts b/packages/gui-extensions/src/debug/i18n/tr.ts
index 2b44ea456e7d..261408782035 100644
--- a/packages/gui-extensions/src/debug/i18n/tr.ts
+++ b/packages/gui-extensions/src/debug/i18n/tr.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Geliştirme performansı teşhisi",
providerAriaLabel: "Sağlayıcı performansı tanılaması",
na: "yok",
- "ttft.label": "TTFT",
- "ttft.tip": "Sağlayıcı isteğinin gönderilmesinden ilk model çıktısına kadar geçen süre.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Sağlayıcı isteğinin gönderilmesinden ilk yanıt metnine kadar geçen süre.",
+ "duration.label": "TIME",
+ "duration.tip": "Son turu başlatan istemden yanıtın tamamlanmasına kadar geçen süre.",
"tps.label": "TPS",
"tps.tip": "Son turun model isteklerinde saniye başına çıktı ve akıl yürütme tokeni, araç süresi hariç.",
- "e2e.label": "E2E",
- "e2e.tip": "Sağlayıcı isteğinin gönderilmesinden yanıt akışının sona ermesine kadar geçen süre.",
"nav.label": "NAV",
"nav.tip":
"Yönlendirici başlangıcından yerleşme sonrası ilk boyamaya kadar ölçülen, bir oturum sayfasına dokunan son tamamlanmış rota geçişi.",
diff --git a/packages/gui-extensions/src/debug/i18n/uk.ts b/packages/gui-extensions/src/debug/i18n/uk.ts
index f6a3c9870084..9f14cdefcdc7 100644
--- a/packages/gui-extensions/src/debug/i18n/uk.ts
+++ b/packages/gui-extensions/src/debug/i18n/uk.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Діагностика продуктивності розробки",
providerAriaLabel: "Діагностика продуктивності постачальника",
na: "н/д",
- "ttft.label": "TTFT",
- "ttft.tip": "Час від надсилання запиту постачальнику до першого виводу моделі.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Час від надсилання запиту постачальнику до першого тексту відповіді.",
+ "duration.label": "TIME",
+ "duration.tip": "Час від запиту, що розпочав останній хід, до завершення відповіді.",
"tps.label": "TPS",
"tps.tip": "Вихідні токени й токени міркувань за секунду в запитах до моделі за останній хід, без часу інструментів.",
- "e2e.label": "E2E",
- "e2e.tip": "Час від надсилання запиту постачальнику до завершення потоку відповіді.",
"nav.label": "NAV",
"nav.tip":
"Останній завершений перехід маршруту, що торкається сторінки сесії, виміряний від запуску маршрутизатора до першого відображення після стабілізації.",
diff --git a/packages/gui-extensions/src/debug/i18n/ur.ts b/packages/gui-extensions/src/debug/i18n/ur.ts
index 54d3674a9ef0..123193941d8b 100644
--- a/packages/gui-extensions/src/debug/i18n/ur.ts
+++ b/packages/gui-extensions/src/debug/i18n/ur.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "ترقیاتی کارکردگی کی تشخیص",
providerAriaLabel: "فراہم کنندہ کی کارکردگی کی تشخیص",
na: "n/a",
- "ttft.label": "TTFT",
- "ttft.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے ماڈل کی پہلی آؤٹ پٹ تک کا وقت۔",
- "ttfa.label": "TTFA",
- "ttfa.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے جواب کے پہلے متن تک کا وقت۔",
+ "duration.label": "TIME",
+ "duration.tip": "تازہ ترین باری شروع کرنے والے پرامپٹ سے اس کے جواب کے مکمل ہونے تک کا وقت۔",
"tps.label": "TPS",
"tps.tip": "تازہ ترین باری کی ماڈل درخواستوں میں فی سیکنڈ آؤٹ پٹ اور استدلال ٹوکن، ٹول کے وقت کے بغیر۔",
- "e2e.label": "E2E",
- "e2e.tip": "فراہم کنندہ کی درخواست بھیجے جانے سے اس کے جوابی سلسلے کے اختتام تک کا وقت۔",
"nav.label": "NAV",
"nav.tip":
"سیشن صفحے سے متعلق آخری مکمل روٹ منتقلی، جسے روٹر کے آغاز سے منتقلی مکمل ہونے کے بعد پہلی بار اسکرین بننے تک ناپا گیا ہے۔",
diff --git a/packages/gui-extensions/src/debug/i18n/uz.ts b/packages/gui-extensions/src/debug/i18n/uz.ts
index b9544d230968..9da6eb61639a 100644
--- a/packages/gui-extensions/src/debug/i18n/uz.ts
+++ b/packages/gui-extensions/src/debug/i18n/uz.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "Rivojlanish samaradorligi diagnostikasi",
providerAriaLabel: "Provayder unumdorligi diagnostikasi",
na: "yo'q",
- "ttft.label": "TTFT",
- "ttft.tip": "Provayderga so‘rov yuborilganidan modelning birinchi chiqishigacha bo‘lgan vaqt.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Provayderga so‘rov yuborilganidan javobning birinchi matnigacha bo‘lgan vaqt.",
+ "duration.label": "TIME",
+ "duration.tip": "Oxirgi navbatni boshlagan so'rovdan javob tugaguncha o'tgan vaqt.",
"tps.label": "TPS",
"tps.tip": "Oxirgi navbatdagi model so'rovlari bo'yicha soniyada chiqish va mulohaza tokenlari, vosita vaqtisiz.",
- "e2e.label": "E2E",
- "e2e.tip": "Provayderga so‘rov yuborilganidan javob oqimi tugagunigacha bo‘lgan vaqt.",
"nav.label": "NAV",
"nav.tip":
"Seans sahifasiga tegib oxirgi tugallangan marshrutga o'tish, marshrutizator boshlanishidan boshlab u o'rnatgandan keyingi birinchi bo'yoqgacha o'lchanadi.",
diff --git a/packages/gui-extensions/src/debug/i18n/vi.ts b/packages/gui-extensions/src/debug/i18n/vi.ts
index 45c480dc559a..e2158e86356d 100644
--- a/packages/gui-extensions/src/debug/i18n/vi.ts
+++ b/packages/gui-extensions/src/debug/i18n/vi.ts
@@ -3,15 +3,11 @@ export default {
ariaLabel: "Chẩn đoán hiệu suất phát triển",
providerAriaLabel: "Chẩn đoán hiệu suất nhà cung cấp",
na: "không có",
- "ttft.label": "TTFT",
- "ttft.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến đầu ra đầu tiên của mô hình.",
- "ttfa.label": "TTFA",
- "ttfa.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến văn bản trả lời đầu tiên.",
+ "duration.label": "TIME",
+ "duration.tip": "Thời gian từ lời nhắc bắt đầu lượt gần nhất cho đến khi phản hồi hoàn tất.",
"tps.label": "TPS",
"tps.tip":
"Số token đầu ra và suy luận mỗi giây trên các yêu cầu mô hình của lượt gần nhất, không tính thời gian công cụ.",
- "e2e.label": "E2E",
- "e2e.tip": "Thời gian từ khi gửi yêu cầu đến nhà cung cấp cho đến khi luồng phản hồi kết thúc.",
"nav.label": "NAV",
"nav.tip":
"Lần chuyển tuyến hoàn tất gần nhất có truy cập trang phiên, được đo từ lúc bộ định tuyến bắt đầu đến khung hình đầu tiên sau khi ổn định.",
diff --git a/packages/gui-extensions/src/debug/i18n/zh.ts b/packages/gui-extensions/src/debug/i18n/zh.ts
index 627f972e2f2b..2d2c9b8774cd 100644
--- a/packages/gui-extensions/src/debug/i18n/zh.ts
+++ b/packages/gui-extensions/src/debug/i18n/zh.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "开发性能诊断",
providerAriaLabel: "提供商性能诊断",
na: "不适用",
- "ttft.label": "TTFT",
- "ttft.tip": "从发送提供商请求到模型首次输出所用的时间。",
- "ttfa.label": "TTFA",
- "ttfa.tip": "从发送提供商请求到首次输出回答文本所用的时间。",
+ "duration.label": "TIME",
+ "duration.tip": "从开启最近一轮的提示到其回复完成所用的时间。",
"tps.label": "TPS",
"tps.tip": "最近一轮模型请求中每秒的输出与推理 token 数,不含工具耗时。",
- "e2e.label": "E2E",
- "e2e.tip": "从发送提供商请求到其响应流结束所用的时间。",
"nav.label": "NAV",
"nav.tip": "最后一次完成的涉及会话页面的路由转换,从路由器启动到稳定后的第一次绘制。",
"fps.label": "FPS",
diff --git a/packages/gui-extensions/src/debug/i18n/zht.ts b/packages/gui-extensions/src/debug/i18n/zht.ts
index b45bd97ef856..40654688bdd3 100644
--- a/packages/gui-extensions/src/debug/i18n/zht.ts
+++ b/packages/gui-extensions/src/debug/i18n/zht.ts
@@ -3,14 +3,10 @@ export default {
ariaLabel: "開發效能診斷",
providerAriaLabel: "提供者效能診斷",
na: "不適用",
- "ttft.label": "TTFT",
- "ttft.tip": "從送出提供者要求到模型首次輸出所需的時間。",
- "ttfa.label": "TTFA",
- "ttfa.tip": "從送出提供者要求到首次輸出回答文字所需的時間。",
+ "duration.label": "TIME",
+ "duration.tip": "從開啟最近一輪的提示到其回覆完成所需的時間。",
"tps.label": "TPS",
"tps.tip": "最近一輪模型請求中每秒的輸出與推理 token 數,不含工具耗時。",
- "e2e.label": "E2E",
- "e2e.tip": "從送出提供者要求到其回應串流結束所需的時間。",
"nav.label": "NAV",
"nav.tip": "最後一次完成的涉及工作階段頁面的路由轉換,從路由器啟動到穩定後的第一次繪製。",
"fps.label": "FPS",
diff --git a/packages/gui-extensions/src/debug/metrics.test.ts b/packages/gui-extensions/src/debug/metrics.test.ts
deleted file mode 100644
index 32f1dd0df4ff..000000000000
--- a/packages/gui-extensions/src/debug/metrics.test.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import { expect, test } from "bun:test"
-import type { SessionMessageAssistant, SessionMessageInfo } from "@opencode/client/promise"
-import type { ProviderMetricEvent, ProviderMetricState } from "./metrics"
-import { applyProviderMetricEvent, projectedProviderMetrics } from "./metrics"
-
-const durable = { aggregateID: "ses_test", seq: 0, version: 1 } as const
-
-const events: ProviderMetricEvent[] = [
- {
- id: "evt_started",
- created: 1_000,
- type: "session.step.started",
- durable,
- data: {
- sessionID: "ses_test",
- assistantMessageID: "msg_assistant",
- agent: "build",
- model: { id: "model", providerID: "provider" },
- started: 1_000,
- },
- },
- {
- id: "evt_reasoning",
- created: 1_300,
- type: "session.reasoning.started",
- durable: { ...durable, seq: 1 },
- data: { sessionID: "ses_test", assistantMessageID: "msg_assistant", ordinal: 0 },
- },
- {
- id: "evt_text",
- created: 1_800,
- type: "session.text.started",
- durable: { ...durable, seq: 2 },
- data: { sessionID: "ses_test", assistantMessageID: "msg_assistant", ordinal: 0 },
- },
- {
- id: "evt_streamed",
- created: 3_800,
- type: "session.step.streamed",
- durable: { ...durable, seq: 3 },
- data: { sessionID: "ses_test", assistantMessageID: "msg_assistant" },
- },
- {
- id: "evt_ended",
- created: 4_000,
- type: "session.step.ended",
- durable: { ...durable, seq: 4 },
- data: {
- sessionID: "ses_test",
- assistantMessageID: "msg_assistant",
- finish: "stop",
- cost: 0,
- tokens: { input: 200, output: 100, reasoning: 20, cache: { read: 0, write: 0 } },
- },
- },
-]
-
-test("calculates provider response metrics from durable events", () => {
- const state: ProviderMetricState = {}
- events.forEach((event) => applyProviderMetricEvent(state, event))
- expect(state.latest).toEqual({
- ttft: 300,
- ttfa: 800,
- e2e: 2_800,
- })
-})
-
-const assistant: SessionMessageAssistant = {
- id: "msg_assistant",
- type: "assistant",
- agent: "build",
- model: { id: "model", providerID: "provider" },
- content: [
- { type: "reasoning", text: "Think", time: { created: 1_300, completed: 1_700 } },
- { type: "text", text: "Answer" },
- ],
- tokens: { input: 200, output: 100, reasoning: 20, cache: { read: 0, write: 0 } },
- time: { created: 1_000, streamed: 3_800, completed: 4_000 },
-}
-
-test("derives a baseline from the latest completed projected request", () => {
- const messages: SessionMessageInfo[] = [
- { id: "msg_user", type: "user", text: "Hi", time: { created: 1 } },
- assistant,
- { ...assistant, id: "msg_running", tokens: undefined, time: { created: 5_000 } },
- ]
-
- // Reasoning ended at 1_700, which approximates the answer start.
- expect(projectedProviderMetrics(messages)).toEqual({ ttft: 300, ttfa: 700, e2e: 2_800 })
-})
diff --git a/packages/gui-extensions/src/debug/metrics.ts b/packages/gui-extensions/src/debug/metrics.ts
deleted file mode 100644
index d78352059bea..000000000000
--- a/packages/gui-extensions/src/debug/metrics.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-import type { SessionLogItem, SessionMessageAssistant, SessionMessageInfo } from "@opencode/client/promise"
-
-type ProviderMetricEventType =
- | "session.step.started"
- | "session.step.streamed"
- | "session.step.ended"
- | "session.step.failed"
- | "session.text.started"
- | "session.reasoning.started"
- | "session.tool.input.started"
-
-const types: ReadonlySet = new Set([
- "session.step.started",
- "session.step.streamed",
- "session.step.ended",
- "session.step.failed",
- "session.text.started",
- "session.reasoning.started",
- "session.tool.input.started",
-])
-
-export type ProviderMetricEvent = Extract
-
-export type ProviderMetrics = {
- ttft?: number
- ttfa?: number
- e2e?: number
-}
-
-type Attempt = {
- assistantMessageID: string
- started: number
- first?: number
- answer?: number
- streamed?: number
-}
-
-export type ProviderMetricState = { attempt?: Attempt; latest?: ProviderMetrics }
-
-export function isProviderMetricEvent(event: { type: string }): event is ProviderMetricEvent {
- return types.has(event.type)
-}
-
-export function applyProviderMetricEvent(state: ProviderMetricState, event: ProviderMetricEvent) {
- if (event.type === "session.step.started") {
- state.attempt = {
- assistantMessageID: event.data.assistantMessageID,
- started: event.data.started,
- }
-
- return
- }
-
- if (!state.attempt || event.data.assistantMessageID !== state.attempt.assistantMessageID) return
-
- if (
- event.type === "session.text.started" ||
- event.type === "session.reasoning.started" ||
- event.type === "session.tool.input.started"
- ) {
- state.attempt.first ??= event.created
-
- if (event.type === "session.text.started") state.attempt.answer ??= event.created
-
- return
- }
-
- if (event.type === "session.step.streamed") {
- state.attempt.streamed = event.created
-
- return
- }
-
- // Interrupted or failed attempts without usage would publish misleading partial numbers.
- if (!event.data.tokens || state.attempt.first === undefined || state.attempt.streamed === undefined) return
- state.latest = attemptMetrics(state.attempt)
-}
-
-/**
- * Baseline from already-loaded history. Text parts carry no start timestamp yet, so TTFT and TTFA
- * stay unavailable for text-first requests until a live request supplies them.
- */
-export function projectedProviderMetrics(messages: readonly SessionMessageInfo[]): ProviderMetrics | undefined {
- const message = messages.findLast(
- (item): item is SessionMessageAssistant =>
- item.type === "assistant" && item.time.streamed !== undefined && item.tokens !== undefined,
- )
-
- if (!message) return
-
- // Content is chronological; only a non-text head carries the first-output time.
- const head = message.content[0]
- const first = head && head.type !== "text" ? head.time?.created : undefined
- // Reasoning ends when the answer starts, so a reasoning part right before the first text
- // approximates the live `session.text.started` timestamp.
- const text = message.content.findIndex((item) => item.type === "text")
- const before = text > 0 ? message.content[text - 1] : undefined
- const answer = first !== undefined && before?.type === "reasoning" ? before.time?.completed : undefined
-
- return attemptMetrics({
- assistantMessageID: message.id,
- started: message.time.created,
- first,
- answer,
- streamed: message.time.streamed,
- })
-}
-
-function attemptMetrics(attempt: Attempt): ProviderMetrics {
- const ttft = elapsed(attempt.started, attempt.first)
- const ttfa = elapsed(attempt.started, attempt.answer)
- const e2e = elapsed(attempt.started, attempt.streamed)
-
- return { ttft, ttfa, e2e }
-}
-
-function elapsed(start: number | undefined, end: number | undefined) {
- if (start === undefined || end === undefined) return
-
- return Math.max(0, end - start)
-}
diff --git a/packages/tui/src/util/locale.ts b/packages/tui/src/util/locale.ts
index ac3371eb0795..4dedfdb8b810 100644
--- a/packages/tui/src/util/locale.ts
+++ b/packages/tui/src/util/locale.ts
@@ -26,27 +26,7 @@ export function number(num: number): string {
return num.toString()
}
-export function duration(input: number) {
- if (input < 1000) {
- return `${input}ms`
- }
- if (input < 60000) {
- return `${(input / 1000).toFixed(1)}s`
- }
- if (input < 3600000) {
- const minutes = Math.floor(input / 60000)
- const seconds = Math.floor((input % 60000) / 1000)
- return `${minutes}m ${seconds}s`
- }
- if (input < 86400000) {
- const hours = Math.floor(input / 3600000)
- const minutes = Math.floor((input % 3600000) / 60000)
- return `${hours}h ${minutes}m`
- }
- const days = Math.floor(input / 86400000)
- const hours = Math.floor((input % 86400000) / 3600000)
- return `${days}d ${hours}h`
-}
+export { duration } from "@opencode/util/duration"
export function truncate(str: string, len: number): string {
if (str.length <= len) return str
diff --git a/packages/util/src/duration.ts b/packages/util/src/duration.ts
new file mode 100644
index 000000000000..2a27f5560c11
--- /dev/null
+++ b/packages/util/src/duration.ts
@@ -0,0 +1,22 @@
+/** Compact elapsed time, e.g. `850ms`, `12.4s`, `3m 5s`, `2h 10m` or `1d 4h`. */
+export function duration(input: number) {
+ if (input < 1000) {
+ return `${input}ms`
+ }
+ if (input < 60000) {
+ return `${(input / 1000).toFixed(1)}s`
+ }
+ if (input < 3600000) {
+ const minutes = Math.floor(input / 60000)
+ const seconds = Math.floor((input % 60000) / 1000)
+ return `${minutes}m ${seconds}s`
+ }
+ if (input < 86400000) {
+ const hours = Math.floor(input / 3600000)
+ const minutes = Math.floor((input % 3600000) / 60000)
+ return `${hours}h ${minutes}m`
+ }
+ const days = Math.floor(input / 86400000)
+ const hours = Math.floor((input % 86400000) / 3600000)
+ return `${days}d ${hours}h`
+}
|