From 571c49b495d4bc06c4063c2d0fa24af144531448 Mon Sep 17 00:00:00 2001 From: john <> Date: Sun, 8 Feb 2026 14:03:34 -0300 Subject: [PATCH 1/2] feat(tui): display tokens/second metric for assistant responses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds TPS calculation and display to message footers. Tracks firstToken timestamp during streaming and calculates throughput for completed text responses. Filters out tool calls and fast responses to avoid noise. Key features: - Shows TPS next to duration: "3.4s · 45 tok/s" - Includes both output and reasoning tokens - 250ms minimum threshold to filter noise - Comprehensive test coverage (34 tests) Tested with Kimi K2.5 showing ~131 tok/s. Fixes #5374, Closes #6096 --- .../src/cli/cmd/tui/routes/session/index.tsx | 126 ++++----- packages/opencode/src/core/tokens/index.ts | 1 + packages/opencode/src/core/tokens/tps.test.ts | 241 ++++++++++++++++++ packages/opencode/src/core/tokens/tps.ts | 83 ++++++ packages/opencode/src/session/message-v2.ts | 24 +- packages/opencode/src/session/processor.ts | 61 +++-- packages/sdk/js/src/v2/gen/types.gen.ts | 63 ++--- packages/sdk/openapi.json | 181 ++++++------- 8 files changed, 574 insertions(+), 206 deletions(-) create mode 100644 packages/opencode/src/core/tokens/index.ts create mode 100644 packages/opencode/src/core/tokens/tps.test.ts create mode 100644 packages/opencode/src/core/tokens/tps.ts diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 77872eedaddd..809548cb361d 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -1,3 +1,27 @@ +import type { AssistantMessage, Part, ReasoningPart, TextPart, ToolPart, UserMessage } from "@opencode-ai/sdk/v2" +import { + addDefaultParsers, + type BoxRenderable, + MacOSScrollAccel, + RGBA, + type ScrollAcceleration, + type ScrollBoxRenderable, + TextAttributes, +} from "@opentui/core" +import { type JSX, useKeyboard, useRenderer, useTerminalDimensions } from "@opentui/solid" +import { SplitBorder } from "@tui/component/border" +import { useCommandDialog } from "@tui/component/dialog-command" +import { Prompt, type PromptRef } from "@tui/component/prompt" +import { Spinner } from "@tui/component/spinner" +import { useKeybind } from "@tui/context/keybind" +import { useLocal } from "@tui/context/local" +import { useRoute, useRouteData } from "@tui/context/route" +import { useSDK } from "@tui/context/sdk" +import { useSync } from "@tui/context/sync" +import { useTheme } from "@tui/context/theme" +import { DialogConfirm } from "@tui/ui/dialog-confirm" +import { parsePatch } from "diff" +import path from "path" import { batch, createContext, @@ -12,72 +36,49 @@ import { useContext, } from "solid-js" import { Dynamic } from "solid-js/web" -import path from "path" -import { useRoute, useRouteData } from "@tui/context/route" -import { useSync } from "@tui/context/sync" -import { SplitBorder } from "@tui/component/border" -import { Spinner } from "@tui/component/spinner" -import { useTheme } from "@tui/context/theme" -import { - BoxRenderable, - ScrollBoxRenderable, - addDefaultParsers, - MacOSScrollAccel, - type ScrollAcceleration, - TextAttributes, - RGBA, -} from "@opentui/core" -import { Prompt, type PromptRef } from "@tui/component/prompt" -import type { AssistantMessage, Part, ToolPart, UserMessage, TextPart, ReasoningPart } from "@opencode-ai/sdk/v2" -import { useLocal } from "@tui/context/local" -import { Locale } from "@/util/locale" -import type { Tool } from "@/tool/tool" -import type { ReadTool } from "@/tool/read" -import type { WriteTool } from "@/tool/write" -import { BashTool } from "@/tool/bash" +import stripAnsi from "strip-ansi" +import { UI } from "@/cli/ui.ts" +import { calculateTPS, formatTPS, getMessageTPS } from "@/core/tokens" +import { Flag } from "@/flag/flag" +import { Global } from "@/global" +import { LANGUAGE_EXTENSIONS } from "@/lsp/language" +import type { ApplyPatchTool } from "@/tool/apply_patch" +import type { BashTool } from "@/tool/bash" +import type { EditTool } from "@/tool/edit" import type { GlobTool } from "@/tool/glob" -import { TodoWriteTool } from "@/tool/todo" import type { GrepTool } from "@/tool/grep" import type { ListTool } from "@/tool/ls" -import type { EditTool } from "@/tool/edit" -import type { ApplyPatchTool } from "@/tool/apply_patch" -import type { WebFetchTool } from "@/tool/webfetch" -import type { TaskTool } from "@/tool/task" import type { QuestionTool } from "@/tool/question" +import type { ReadTool } from "@/tool/read" import type { SkillTool } from "@/tool/skill" -import { useKeyboard, useRenderer, useTerminalDimensions, type JSX } from "@opentui/solid" -import { useSDK } from "@tui/context/sdk" -import { useCommandDialog } from "@tui/component/dialog-command" -import { useKeybind } from "@tui/context/keybind" -import { Header } from "./header" -import { parsePatch } from "diff" -import { useDialog } from "../../ui/dialog" -import { TodoItem } from "../../component/todo-item" -import { DialogMessage } from "./dialog-message" -import type { PromptInfo } from "../../component/prompt/history" -import { DialogConfirm } from "@tui/ui/dialog-confirm" -import { DialogTimeline } from "./dialog-timeline" -import { DialogForkFromTimeline } from "./dialog-fork-from-timeline" -import { DialogSessionRename } from "../../component/dialog-session-rename" -import { Sidebar } from "./sidebar" -import { Flag } from "@/flag/flag" -import { LANGUAGE_EXTENSIONS } from "@/lsp/language" +import type { TaskTool } from "@/tool/task" +import type { TodoWriteTool } from "@/tool/todo" +import type { Tool } from "@/tool/tool" +import type { WebFetchTool } from "@/tool/webfetch" +import type { WriteTool } from "@/tool/write" +import { Filesystem } from "@/util/filesystem" +import { Locale } from "@/util/locale" import parsers from "../../../../../../parsers-config.ts" -import { Clipboard } from "../../util/clipboard" -import { Toast, useToast } from "../../ui/toast" +import { DialogSessionRename } from "../../component/dialog-session-rename" +import type { PromptInfo } from "../../component/prompt/history" +import { TodoItem } from "../../component/todo-item" +import { useExit } from "../../context/exit" import { useKV } from "../../context/kv.tsx" +import { usePromptRef } from "../../context/prompt" +import { useDialog } from "../../ui/dialog" +import { DialogExportOptions } from "../../ui/dialog-export-options" +import { Toast, useToast } from "../../ui/toast" +import { Clipboard } from "../../util/clipboard" import { Editor } from "../../util/editor" -import stripAnsi from "strip-ansi" +import { formatTranscript } from "../../util/transcript" +import { DialogForkFromTimeline } from "./dialog-fork-from-timeline" +import { DialogMessage } from "./dialog-message" +import { DialogTimeline } from "./dialog-timeline" import { Footer } from "./footer.tsx" -import { usePromptRef } from "../../context/prompt" -import { useExit } from "../../context/exit" -import { Filesystem } from "@/util/filesystem" -import { Global } from "@/global" +import { Header } from "./header" import { PermissionPrompt } from "./permission" import { QuestionPrompt } from "./question" -import { DialogExportOptions } from "../../ui/dialog-export-options" -import { formatTranscript } from "../../util/transcript" -import { UI } from "@/cli/ui.ts" +import { Sidebar } from "./sidebar" addDefaultParsers(parsers.parsers) @@ -200,7 +201,7 @@ export function Session() { } }) - let lastSwitch: string | undefined = undefined + let lastSwitch: string | undefined sdk.event.on("message.part.updated", (evt) => { const part = evt.properties.part if (part.type !== "tool") return @@ -983,7 +984,7 @@ export function Session() { {(message, index) => ( - {(function () { + {(() => { const command = useCommandDialog() const [hover, setHover] = createSignal(false) const dialog = useDialog() @@ -1254,6 +1255,14 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las return props.message.time.completed - user.time.created }) + const tpsResult = createMemo(() => { + return getMessageTPS({ + finish: props.message.finish, + tokens: props.message.tokens, + time: props.message.time, + }) + }) + return ( <> @@ -1304,6 +1313,9 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las · {Locale.duration(duration())} + + · {formatTPS(tpsResult()!)} + · interrupted diff --git a/packages/opencode/src/core/tokens/index.ts b/packages/opencode/src/core/tokens/index.ts new file mode 100644 index 000000000000..711321448649 --- /dev/null +++ b/packages/opencode/src/core/tokens/index.ts @@ -0,0 +1 @@ +export * from "./tps" diff --git a/packages/opencode/src/core/tokens/tps.test.ts b/packages/opencode/src/core/tokens/tps.test.ts new file mode 100644 index 000000000000..64a4c3b42842 --- /dev/null +++ b/packages/opencode/src/core/tokens/tps.test.ts @@ -0,0 +1,241 @@ +import { describe, expect, test } from 'bun:test' +import { + calculateTPS, + DEFAULT_MIN_TPS_ELAPSED_MS, + formatTPS, + getMessageTPS, + isValidForTPS, + totalGeneratedTokens, +} from './tps' + +describe('totalGeneratedTokens', () => { + test('sums output and reasoning by default', () => { + expect(totalGeneratedTokens({ output: 100, reasoning: 50 })).toBe(150) + }) + + test('excludes reasoning when configured', () => { + expect(totalGeneratedTokens({ output: 100, reasoning: 50 }, false)).toBe(100) + }) + + test('handles zero tokens', () => { + expect(totalGeneratedTokens({ output: 0, reasoning: 0 })).toBe(0) + }) + + test('handles reasoning-only responses', () => { + expect(totalGeneratedTokens({ output: 0, reasoning: 50 })).toBe(50) + }) +}) + +describe('isValidForTPS', () => { + const validMessage = { + finish: 'stop' as const, + tokens: { output: 100, reasoning: 50 }, + time: { created: 1000, firstToken: 1100, completed: 2000 }, + } + + test('returns true for valid text response', () => { + expect(isValidForTPS(validMessage)).toBe(true) + }) + + test('returns false for summary messages', () => { + expect(isValidForTPS({ ...validMessage, summary: true })).toBe(false) + }) + + test('returns false for tool-call responses', () => { + expect(isValidForTPS({ ...validMessage, finish: 'tool-calls' })).toBe(false) + }) + + test('returns false for error responses', () => { + expect(isValidForTPS({ ...validMessage, finish: 'error' })).toBe(false) + }) + + test('returns false for unknown finish reasons', () => { + expect(isValidForTPS({ ...validMessage, finish: 'unknown' })).toBe(false) + }) + + test('returns false for null finish', () => { + expect(isValidForTPS({ ...validMessage, finish: null })).toBe(false) + }) + + test('returns false for undefined finish', () => { + expect(isValidForTPS({ ...validMessage, finish: undefined })).toBe(false) + }) + + test('returns false for zero tokens', () => { + expect( + isValidForTPS({ + ...validMessage, + tokens: { output: 0, reasoning: 0 }, + }), + ).toBe(false) + }) + + test('returns false for missing firstToken', () => { + expect( + isValidForTPS({ + ...validMessage, + time: { ...validMessage.time, firstToken: undefined }, + }), + ).toBe(false) + }) + + test('returns false for missing completed', () => { + expect( + isValidForTPS({ + ...validMessage, + time: { ...validMessage.time, completed: undefined }, + }), + ).toBe(false) + }) + + test('returns false for elapsed time below threshold', () => { + expect( + isValidForTPS({ + ...validMessage, + time: { + ...validMessage.time, + completed: validMessage.time.firstToken! + DEFAULT_MIN_TPS_ELAPSED_MS - 1, + }, + }), + ).toBe(false) + }) + + test('returns true for elapsed time at threshold', () => { + expect( + isValidForTPS({ + ...validMessage, + time: { + ...validMessage.time, + completed: validMessage.time.firstToken! + DEFAULT_MIN_TPS_ELAPSED_MS, + }, + }), + ).toBe(true) + }) + + test('respects custom minElapsedMs', () => { + expect( + isValidForTPS({ + ...validMessage, + time: { + ...validMessage.time, + completed: validMessage.time.firstToken! + 100, + }, + minElapsedMs: 50, + }), + ).toBe(true) + }) +}) + +describe('calculateTPS', () => { + test('calculates correct rate for 1 second', () => { + const result = calculateTPS(100, 1000)! + expect(result.rate).toBe(100) + expect(result.totalTokens).toBe(100) + expect(result.elapsedMs).toBe(1000) + expect(result.isValid).toBe(true) + }) + + test('calculates correct rate for 500ms', () => { + const result = calculateTPS(50, 500)! + expect(result.rate).toBe(100) + }) + + test('rounds to nearest integer', () => { + expect(calculateTPS(100, 333)!.rate).toBe(300) + expect(calculateTPS(100, 667)!.rate).toBe(150) + }) + + test('returns undefined for zero tokens', () => { + expect(calculateTPS(0, 1000)).toBeUndefined() + }) + + test('returns undefined for elapsed time below threshold', () => { + expect(calculateTPS(100, 249)).toBeUndefined() + }) + + test('returns undefined for negative elapsed time', () => { + expect(calculateTPS(100, -100)).toBeUndefined() + }) + + test('returns undefined for non-finite results', () => { + expect(calculateTPS(100, 0, 0)).toBeUndefined() + }) + + test('handles very high rates', () => { + // Use custom minElapsedMs to allow short durations + const result = calculateTPS(1000, 100, 50)! + expect(result.rate).toBe(10000) + }) + + test('handles Claude 3.5 typical rate (~45 tok/s)', () => { + const result = calculateTPS(180, 4000)! + expect(result.rate).toBe(45) + }) + + test('handles GPT-4 typical rate (~25 tok/s)', () => { + const result = calculateTPS(100, 4000)! + expect(result.rate).toBe(25) + }) + + test('handles local model typical rate (~120 tok/s)', () => { + const result = calculateTPS(600, 5000)! + expect(result.rate).toBe(120) + }) +}) + +describe('formatTPS', () => { + test('formats with locale string', () => { + expect(formatTPS({ rate: 1234, totalTokens: 100, elapsedMs: 1000, isValid: true })).toBe( + '1,234 tok/s', + ) + }) + + test('formats single digit', () => { + expect(formatTPS({ rate: 5, totalTokens: 10, elapsedMs: 2000, isValid: true })).toBe('5 tok/s') + }) + + test('formats large numbers', () => { + expect(formatTPS({ rate: 1234567, totalTokens: 1000, elapsedMs: 1000, isValid: true })).toBe( + '1,234,567 tok/s', + ) + }) +}) + +describe('getMessageTPS', () => { + test('returns full result for valid message', () => { + const message = { + finish: 'stop' as const, + tokens: { output: 150, reasoning: 50 }, + time: { created: 1000, firstToken: 1000, completed: 3000 }, + } + + const result = getMessageTPS(message) + expect(result).toBeDefined() + expect(result!.rate).toBe(100) + expect(result!.totalTokens).toBe(200) + expect(result!.elapsedMs).toBe(2000) + }) + + test('returns undefined for invalid message', () => { + const message = { + finish: 'tool-calls' as const, + tokens: { output: 0, reasoning: 0 }, + time: { created: 1000, firstToken: 1100, completed: 1200 }, + } + + expect(getMessageTPS(message)).toBeUndefined() + }) + + test('calculates output-only TPS', () => { + const message = { + finish: 'stop' as const, + tokens: { output: 100, reasoning: 0 }, + time: { created: 1000, firstToken: 1000, completed: 3000 }, + } + + const result = getMessageTPS(message) + expect(result).toBeDefined() + expect(result!.rate).toBe(50) + expect(result!.totalTokens).toBe(100) + }) +}) diff --git a/packages/opencode/src/core/tokens/tps.ts b/packages/opencode/src/core/tokens/tps.ts new file mode 100644 index 000000000000..ac1c5cff7e3c --- /dev/null +++ b/packages/opencode/src/core/tokens/tps.ts @@ -0,0 +1,83 @@ +export const DEFAULT_MIN_TPS_ELAPSED_MS = 250 +export const DEFAULT_INCLUDE_REASONING = true + +export interface TokenMetrics { + output: number + reasoning: number +} + +export interface TimestampMetrics { + created: number + firstToken?: number + completed?: number +} + +export interface TPSResult { + rate: number + totalTokens: number + elapsedMs: number + isValid: boolean +} + +export function totalGeneratedTokens(tokens: TokenMetrics, includeReasoning = DEFAULT_INCLUDE_REASONING): number { + return tokens.output + (includeReasoning ? tokens.reasoning : 0) +} + +export function isValidForTPS(msg: { + summary?: boolean + finish?: string | null + tokens: TokenMetrics + time: TimestampMetrics + minElapsedMs?: number +}): boolean { + if (msg.summary) return false + if (!msg.finish) return false + if (["tool-calls", "unknown", "error"].includes(msg.finish)) return false + + const totalTokens = totalGeneratedTokens(msg.tokens) + if (totalTokens <= 0) return false + + if (msg.time.firstToken === undefined || msg.time.completed === undefined) return false + + const elapsedMs = msg.time.completed - msg.time.firstToken + const minElapsedMs = msg.minElapsedMs ?? DEFAULT_MIN_TPS_ELAPSED_MS + + return elapsedMs >= minElapsedMs +} + +export function calculateTPS( + totalTokens: number, + elapsedMs: number, + minElapsedMs = DEFAULT_MIN_TPS_ELAPSED_MS, +): TPSResult | undefined { + if (totalTokens <= 0) return undefined + if (elapsedMs < minElapsedMs) return undefined + + const rate = totalTokens / (elapsedMs / 1000) + if (!Number.isFinite(rate) || rate < 0) return undefined + + return { + rate: Math.round(rate), + totalTokens, + elapsedMs, + isValid: true, + } +} + +export function formatTPS(result: TPSResult): string { + return `${result.rate.toLocaleString()} tok/s` +} + +export function getMessageTPS(msg: { + summary?: boolean + finish?: string | null + tokens: TokenMetrics + time: TimestampMetrics +}): TPSResult | undefined { + if (!isValidForTPS(msg)) return undefined + + const totalTokens = totalGeneratedTokens(msg.tokens) + const elapsedMs = msg.time.completed! - msg.time.firstToken! + + return calculateTPS(totalTokens, elapsedMs) +} diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 65ac72e050cd..51c19ab08fbd 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -1,17 +1,17 @@ -import { BusEvent } from "@/bus/bus-event" -import z from "zod" import { NamedError } from "@opencode-ai/util/error" import { APICallError, convertToModelMessages, LoadAPIKeyError, type ModelMessage, type UIMessage } from "ai" -import { Identifier } from "../id/id" -import { LSP } from "../lsp" +import type { SystemError } from "bun" +import { STATUS_CODES } from "http" +import z from "zod" +import { BusEvent } from "@/bus/bus-event" +import type { Provider } from "@/provider/provider" +import { ProviderTransform } from "@/provider/transform" import { Snapshot } from "@/snapshot" -import { fn } from "@/util/fn" import { Storage } from "@/storage/storage" -import { ProviderTransform } from "@/provider/transform" -import { STATUS_CODES } from "http" +import { fn } from "@/util/fn" import { iife } from "@/util/iife" -import { type SystemError } from "bun" -import type { Provider } from "@/provider/provider" +import { Identifier } from "../id/id" +import { LSP } from "../lsp" export namespace MessageV2 { export const OutputLengthError = NamedError.create("MessageOutputLengthError", z.object({})) @@ -354,6 +354,7 @@ export namespace MessageV2 { time: z.object({ created: z.number(), completed: z.number().optional(), + firstToken: z.number().optional(), }), error: z .discriminatedUnion("name", [ @@ -750,9 +751,9 @@ export namespace MessageV2 { }, { cause: e }, ).toObject() - case APICallError.isInstance(e): + case APICallError.isInstance(e): { const message = iife(() => { - let msg = e.message + const msg = e.message if (msg === "") { if (e.responseBody) return e.responseBody if (e.statusCode) { @@ -793,6 +794,7 @@ export namespace MessageV2 { }, { cause: e }, ).toObject() + } case e instanceof Error: return new NamedError.Unknown({ message: e.toString() }, { cause: e }).toObject() default: diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index b5289e903a16..d4cac3c9c650 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -1,20 +1,20 @@ -import { MessageV2 } from "./message-v2" -import { Log } from "@/util/log" -import { Identifier } from "@/id/id" -import { Session } from "." import { Agent } from "@/agent/agent" -import { Snapshot } from "@/snapshot" -import { SessionSummary } from "./summary" import { Bus } from "@/bus" -import { SessionRetry } from "./retry" -import { SessionStatus } from "./status" -import { Plugin } from "@/plugin" -import type { Provider } from "@/provider/provider" -import { LLM } from "./llm" import { Config } from "@/config/config" -import { SessionCompaction } from "./compaction" +import { Identifier } from "@/id/id" import { PermissionNext } from "@/permission/next" +import { Plugin } from "@/plugin" +import type { Provider } from "@/provider/provider" import { Question } from "@/question" +import { Snapshot } from "@/snapshot" +import { Log } from "@/util/log" +import { Session } from "." +import { SessionCompaction } from "./compaction" +import { LLM } from "./llm" +import { MessageV2 } from "./message-v2" +import { SessionRetry } from "./retry" +import { SessionStatus } from "./status" +import { SessionSummary } from "./summary" export namespace SessionProcessor { const DOOM_LOOP_THRESHOLD = 3 @@ -34,6 +34,16 @@ export namespace SessionProcessor { let blocked = false let attempt = 0 let needsCompaction = false + let firstOutputDeltaTimestamp: number | undefined + let lastOutputDeltaTimestamp: number | undefined + + const markOutputDeltaTimestamp = (now: number) => { + if (firstOutputDeltaTimestamp === undefined) { + firstOutputDeltaTimestamp = now + input.assistantMessage.time.firstToken = now + } + lastOutputDeltaTimestamp = now + } const result = { get message() { @@ -45,11 +55,13 @@ export namespace SessionProcessor { async process(streamInput: LLM.StreamInput) { log.info("process") needsCompaction = false + firstOutputDeltaTimestamp = undefined + lastOutputDeltaTimestamp = undefined const shouldBreak = (await Config.get()).experimental?.continue_loop_on_deny !== true while (true) { try { let currentText: MessageV2.TextPart | undefined - let reasoningMap: Record = {} + const reasoningMap: Record = {} const stream = await LLM.stream(streamInput) for await (const value of stream.fullStream) { @@ -78,6 +90,8 @@ export namespace SessionProcessor { case "reasoning-delta": if (value.id in reasoningMap) { + const now = Date.now() + markOutputDeltaTimestamp(now) const part = reasoningMap[value.id] part.text += value.text if (value.providerMetadata) part.metadata = value.providerMetadata @@ -100,7 +114,7 @@ export namespace SessionProcessor { } break - case "tool-input-start": + case "tool-input-start": { const part = await Session.updatePart({ id: toolcalls[value.id]?.id ?? Identifier.ascending("part"), messageID: input.assistantMessage.id, @@ -116,9 +130,13 @@ export namespace SessionProcessor { }) toolcalls[value.id] = part as MessageV2.ToolPart break + } - case "tool-input-delta": + case "tool-input-delta": { + const now = Date.now() + markOutputDeltaTimestamp(now) break + } case "tool-input-end": break @@ -233,7 +251,7 @@ export namespace SessionProcessor { }) break - case "finish-step": + case "finish-step": { const usage = Session.getUsage({ model: input.model, usage: value.usage, @@ -241,7 +259,11 @@ export namespace SessionProcessor { }) input.assistantMessage.finish = value.finishReason input.assistantMessage.cost += usage.cost - input.assistantMessage.tokens = usage.tokens + input.assistantMessage.tokens.input += usage.tokens.input + input.assistantMessage.tokens.output += usage.tokens.output + input.assistantMessage.tokens.reasoning += usage.tokens.reasoning + input.assistantMessage.tokens.cache.read += usage.tokens.cache.read + input.assistantMessage.tokens.cache.write += usage.tokens.cache.write await Session.updatePart({ id: Identifier.ascending("part"), reason: value.finishReason, @@ -275,6 +297,7 @@ export namespace SessionProcessor { needsCompaction = true } break + } case "text-start": currentText = { @@ -292,6 +315,8 @@ export namespace SessionProcessor { case "text-delta": if (currentText) { + const now = Date.now() + markOutputDeltaTimestamp(now) currentText.text += value.text if (value.providerMetadata) currentText.metadata = value.providerMetadata if (currentText.text) @@ -393,7 +418,7 @@ export namespace SessionProcessor { }) } } - input.assistantMessage.time.completed = Date.now() + input.assistantMessage.time.completed = lastOutputDeltaTimestamp ?? Date.now() await Session.updateMessage(input.assistantMessage) if (needsCompaction) return "compact" if (blocked) return "stop" diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index d72c37a28b5a..5d520f29b525 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -175,6 +175,7 @@ export type AssistantMessage = { time: { created: number completed?: number + firstToken?: number } error?: ProviderAuthError | UnknownError | MessageOutputLengthError | MessageAbortedError | ApiError parentID: string @@ -524,35 +525,6 @@ export type EventPermissionReplied = { } } -export type SessionStatus = - | { - type: "idle" - } - | { - type: "retry" - attempt: number - message: string - next: number - } - | { - type: "busy" - } - -export type EventSessionStatus = { - type: "session.status" - properties: { - sessionID: string - status: SessionStatus - } -} - -export type EventSessionIdle = { - type: "session.idle" - properties: { - sessionID: string - } -} - export type QuestionOption = { /** * Display text (1-5 words, concise) @@ -624,6 +596,35 @@ export type EventQuestionRejected = { } } +export type SessionStatus = + | { + type: "idle" + } + | { + type: "retry" + attempt: number + message: string + next: number + } + | { + type: "busy" + } + +export type EventSessionStatus = { + type: "session.status" + properties: { + sessionID: string + status: SessionStatus + } +} + +export type EventSessionIdle = { + type: "session.idle" + properties: { + sessionID: string + } +} + export type EventSessionCompacted = { type: "session.compacted" properties: { @@ -901,11 +902,11 @@ export type Event = | EventMessagePartRemoved | EventPermissionAsked | EventPermissionReplied - | EventSessionStatus - | EventSessionIdle | EventQuestionAsked | EventQuestionReplied | EventQuestionRejected + | EventSessionStatus + | EventSessionIdle | EventSessionCompacted | EventFileWatcherUpdated | EventTodoUpdated diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index f50cc06c1010..8c4c3a2764ea 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -6309,6 +6309,9 @@ }, "completed": { "type": "number" + }, + "firstToken": { + "type": "number" } }, "required": ["created"] @@ -7346,90 +7349,6 @@ }, "required": ["type", "properties"] }, - "SessionStatus": { - "anyOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "idle" - } - }, - "required": ["type"] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "retry" - }, - "attempt": { - "type": "number" - }, - "message": { - "type": "string" - }, - "next": { - "type": "number" - } - }, - "required": ["type", "attempt", "message", "next"] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "busy" - } - }, - "required": ["type"] - } - ] - }, - "Event.session.status": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "session.status" - }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "type": "string" - }, - "status": { - "$ref": "#/components/schemas/SessionStatus" - } - }, - "required": ["sessionID", "status"] - } - }, - "required": ["type", "properties"] - }, - "Event.session.idle": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "session.idle" - }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "type": "string" - } - }, - "required": ["sessionID"] - } - }, - "required": ["type", "properties"] - }, "QuestionOption": { "type": "object", "properties": { @@ -7575,6 +7494,90 @@ }, "required": ["type", "properties"] }, + "SessionStatus": { + "anyOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "idle" + } + }, + "required": ["type"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "retry" + }, + "attempt": { + "type": "number" + }, + "message": { + "type": "string" + }, + "next": { + "type": "number" + } + }, + "required": ["type", "attempt", "message", "next"] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "busy" + } + }, + "required": ["type"] + } + ] + }, + "Event.session.status": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "session.status" + }, + "properties": { + "type": "object", + "properties": { + "sessionID": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/SessionStatus" + } + }, + "required": ["sessionID", "status"] + } + }, + "required": ["type", "properties"] + }, + "Event.session.idle": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "session.idle" + }, + "properties": { + "type": "object", + "properties": { + "sessionID": { + "type": "string" + } + }, + "required": ["sessionID"] + } + }, + "required": ["type", "properties"] + }, "Event.session.compacted": { "type": "object", "properties": { @@ -8324,19 +8327,19 @@ "$ref": "#/components/schemas/Event.permission.replied" }, { - "$ref": "#/components/schemas/Event.session.status" + "$ref": "#/components/schemas/Event.question.asked" }, { - "$ref": "#/components/schemas/Event.session.idle" + "$ref": "#/components/schemas/Event.question.replied" }, { - "$ref": "#/components/schemas/Event.question.asked" + "$ref": "#/components/schemas/Event.question.rejected" }, { - "$ref": "#/components/schemas/Event.question.replied" + "$ref": "#/components/schemas/Event.session.status" }, { - "$ref": "#/components/schemas/Event.question.rejected" + "$ref": "#/components/schemas/Event.session.idle" }, { "$ref": "#/components/schemas/Event.session.compacted" From 4687e48e9092062ebfaa275c610205cde1410865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Carlos=20Magalh=C3=A3es=20de=20Castro?= <88864312+JohnC0de@users.noreply.github.com> Date: Sun, 8 Feb 2026 15:11:39 -0300 Subject: [PATCH 2/2] Add TPS screenshot --- docs/assets/tps-screenshot.png | Bin 0 -> 96758 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/tps-screenshot.png diff --git a/docs/assets/tps-screenshot.png b/docs/assets/tps-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..1916471bee09154e5e46f003a9ff12164ac0b785 GIT binary patch literal 96758 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�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