assistant-stream 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/core/AssistantStreamChunk.d.ts +4 -4
  2. package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
  3. package/dist/core/accumulators/TimingTracker.d.ts +13 -0
  4. package/dist/core/accumulators/TimingTracker.d.ts.map +1 -0
  5. package/dist/core/accumulators/TimingTracker.js +44 -0
  6. package/dist/core/accumulators/TimingTracker.js.map +1 -0
  7. package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
  8. package/dist/core/accumulators/assistant-message-accumulator.js +40 -2
  9. package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
  10. package/dist/core/index.d.ts +1 -1
  11. package/dist/core/index.d.ts.map +1 -1
  12. package/dist/core/serialization/data-stream/chunk-types.d.ts +2 -2
  13. package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
  14. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +2 -2
  15. package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
  16. package/dist/core/utils/generateId.d.ts.map +1 -1
  17. package/dist/core/utils/generateId.js.map +1 -1
  18. package/dist/core/utils/types.d.ts +19 -2
  19. package/dist/core/utils/types.d.ts.map +1 -1
  20. package/package.json +1 -1
  21. package/src/core/AssistantStreamChunk.ts +4 -4
  22. package/src/core/accumulators/TimingTracker.test.ts +100 -0
  23. package/src/core/accumulators/TimingTracker.ts +55 -0
  24. package/src/core/accumulators/assistant-message-accumulator.test.ts +176 -0
  25. package/src/core/accumulators/assistant-message-accumulator.ts +54 -2
  26. package/src/core/index.ts +1 -1
  27. package/src/core/serialization/data-stream/chunk-types.ts +2 -2
  28. package/src/core/serialization/ui-message-stream/UIMessageStream.test.ts +10 -10
  29. package/src/core/serialization/ui-message-stream/chunk-types.ts +2 -2
  30. package/src/core/tool/schema-utils.test.ts +3 -3
  31. package/src/core/utils/types.ts +20 -2
  32. /package/src/core/utils/{generateId.tsx → generateId.ts} +0 -0
@@ -45,16 +45,16 @@ export type AssistantStreamChunk = {
45
45
  readonly type: "step-finish";
46
46
  readonly finishReason: "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
47
47
  readonly usage: {
48
- readonly promptTokens: number;
49
- readonly completionTokens: number;
48
+ readonly inputTokens: number;
49
+ readonly outputTokens: number;
50
50
  };
51
51
  readonly isContinued: boolean;
52
52
  } | {
53
53
  readonly type: "message-finish";
54
54
  readonly finishReason: "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
55
55
  readonly usage: {
56
- readonly promptTokens: number;
57
- readonly completionTokens: number;
56
+ readonly inputTokens: number;
57
+ readonly outputTokens: number;
58
58
  };
59
59
  } | {
60
60
  readonly type: "result";
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantStreamChunk.d.ts","sourceRoot":"","sources":["../../src/core/AssistantStreamChunk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantStreamChunk.d.ts","sourceRoot":"","sources":["../../src/core/AssistantStreamChunk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AssistantMessageTiming } from "../utils/types.js";
2
+ export declare class TimingTracker {
3
+ private _streamStartTime;
4
+ private _firstTokenTime;
5
+ private _totalChunks;
6
+ private _toolCallIds;
7
+ constructor();
8
+ recordChunk(): void;
9
+ recordFirstToken(): void;
10
+ recordToolCallStart(toolCallId: string): void;
11
+ getTiming(outputTokens?: number, totalText?: string): AssistantMessageTiming;
12
+ }
13
+ //# sourceMappingURL=TimingTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimingTracker.d.ts","sourceRoot":"","sources":["../../../src/core/accumulators/TimingTracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,0BAAuB;AAE7D,qBAAa,aAAa;IACxB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAqB;;IAMzC,WAAW,IAAI,IAAI;IAInB,gBAAgB,IAAI,IAAI;IAMxB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI7C,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,sBAAsB;CA4B7E"}
@@ -0,0 +1,44 @@
1
+ export class TimingTracker {
2
+ _streamStartTime;
3
+ _firstTokenTime;
4
+ _totalChunks = 0;
5
+ _toolCallIds = new Set();
6
+ constructor() {
7
+ this._streamStartTime = Date.now();
8
+ }
9
+ recordChunk() {
10
+ this._totalChunks++;
11
+ }
12
+ recordFirstToken() {
13
+ if (this._firstTokenTime === undefined) {
14
+ this._firstTokenTime = Date.now();
15
+ }
16
+ }
17
+ recordToolCallStart(toolCallId) {
18
+ this._toolCallIds.add(toolCallId);
19
+ }
20
+ getTiming(outputTokens, totalText) {
21
+ const now = Date.now();
22
+ const totalStreamTime = now - this._streamStartTime;
23
+ const tokenCount = outputTokens && outputTokens > 0
24
+ ? outputTokens
25
+ : totalText
26
+ ? Math.ceil(totalText.length / 4)
27
+ : undefined;
28
+ const tokensPerSecond = tokenCount && totalStreamTime > 0
29
+ ? (tokenCount / totalStreamTime) * 1000
30
+ : undefined;
31
+ return {
32
+ streamStartTime: this._streamStartTime,
33
+ ...(this._firstTokenTime !== undefined
34
+ ? { firstTokenTime: this._firstTokenTime - this._streamStartTime }
35
+ : undefined),
36
+ totalStreamTime,
37
+ ...(tokenCount !== undefined ? { tokenCount } : undefined),
38
+ ...(tokensPerSecond !== undefined ? { tokensPerSecond } : undefined),
39
+ totalChunks: this._totalChunks,
40
+ toolCallCount: this._toolCallIds.size,
41
+ };
42
+ }
43
+ }
44
+ //# sourceMappingURL=TimingTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimingTracker.js","sourceRoot":"","sources":["../../../src/core/accumulators/TimingTracker.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAChB,gBAAgB,CAAS;IACzB,eAAe,CAAqB;IACpC,YAAY,GAAG,CAAC,CAAC;IACjB,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC;QACE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,UAAkB;QACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,YAAqB,EAAE,SAAkB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAEpD,MAAM,UAAU,GACd,YAAY,IAAI,YAAY,GAAG,CAAC;YAC9B,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACjC,CAAC,CAAC,SAAS,CAAC;QAElB,MAAM,eAAe,GACnB,UAAU,IAAI,eAAe,GAAG,CAAC;YAC/B,CAAC,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG,IAAI;YACvC,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;gBACpC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE;gBAClE,CAAC,CAAC,SAAS,CAAC;YACd,eAAe;YACf,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;SACtC,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"assistant-message-accumulator.d.ts","sourceRoot":"","sources":["../../../src/core/accumulators/assistant-message-accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,mCAAgC;AAG/D,OAAO,EACL,gBAAgB,EAQjB,0BAAuB;AAExB,OAAO,EAAE,iBAAiB,EAAE,uBAAoB;AAEhD,eAAO,MAAM,oBAAoB,GAAI,sBAElC;IACD,cAAc,CAAC,EAAE,iBAAiB,CAAC;CAC/B,KAAG,gBAcP,CAAC;AA+UH,qBAAa,2BAA4B,SAAQ,eAAe,CAC9D,oBAAoB,EACpB,gBAAgB,CACjB;gBACa,EACV,cAAc,EACd,QAAQ,EACR,OAAO,GACR,GAAE;QACD,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9B;CA0FP"}
1
+ {"version":3,"file":"assistant-message-accumulator.d.ts","sourceRoot":"","sources":["../../../src/core/accumulators/assistant-message-accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,mCAAgC;AAG/D,OAAO,EACL,gBAAgB,EASjB,0BAAuB;AAExB,OAAO,EAAE,iBAAiB,EAAE,uBAAoB;AAGhD,eAAO,MAAM,oBAAoB,GAAI,sBAElC;IACD,cAAc,CAAC,EAAE,iBAAiB,CAAC;CAC/B,KAAG,gBAcP,CAAC;AAuWH,qBAAa,2BAA4B,SAAQ,eAAe,CAC9D,oBAAoB,EACpB,gBAAgB,CACjB;gBACa,EACV,cAAc,EACd,QAAQ,EACR,OAAO,GACR,GAAE;QACD,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9B;CAoHP"}
@@ -1,6 +1,7 @@
1
1
  import { generateId } from "../utils/generateId.js";
2
2
  import { parsePartialJsonObject } from "../../utils/json/parse-partial-json-object.js";
3
3
  import { ObjectStreamAccumulator } from "../object/ObjectStreamAccumulator.js";
4
+ import { TimingTracker } from "./TimingTracker.js";
4
5
  export const createInitialMessage = ({ unstable_state = null, } = {}) => ({
5
6
  role: "assistant",
6
7
  status: { type: "running" },
@@ -272,6 +273,21 @@ const handleUpdateState = (message, chunk) => {
272
273
  },
273
274
  };
274
275
  };
276
+ const computeTiming = (tracker, message) => {
277
+ let outputTokens = 0;
278
+ for (const step of message.metadata.steps) {
279
+ if (step.state === "finished" && step.usage) {
280
+ outputTokens += step.usage.outputTokens;
281
+ }
282
+ }
283
+ let totalText = "";
284
+ for (const part of message.parts) {
285
+ if (part.type === "text" || part.type === "reasoning") {
286
+ totalText += part.text;
287
+ }
288
+ }
289
+ return tracker.getTiming(outputTokens > 0 ? outputTokens : undefined, totalText || undefined);
290
+ };
275
291
  const throttleCallback = (callback) => {
276
292
  let hasScheduled = false;
277
293
  return () => {
@@ -287,6 +303,7 @@ const throttleCallback = (callback) => {
287
303
  export class AssistantMessageAccumulator extends TransformStream {
288
304
  constructor({ initialMessage, throttle, onError, } = {}) {
289
305
  let message = initialMessage ?? createInitialMessage();
306
+ const tracker = new TimingTracker();
290
307
  let controller;
291
308
  const emitChunk = throttle
292
309
  ? throttleCallback(() => {
@@ -300,10 +317,14 @@ export class AssistantMessageAccumulator extends TransformStream {
300
317
  controller = c;
301
318
  },
302
319
  transform(chunk) {
320
+ tracker.recordChunk();
303
321
  const type = chunk.type;
304
322
  switch (type) {
305
323
  case "part-start":
306
324
  message = handlePartStart(message, chunk);
325
+ if (chunk.part.type === "tool-call") {
326
+ tracker.recordToolCallStart(chunk.part.toolCallId);
327
+ }
307
328
  break;
308
329
  case "tool-call-args-text-finish":
309
330
  message = handleToolCallArgsTextFinish(message, chunk);
@@ -313,6 +334,7 @@ export class AssistantMessageAccumulator extends TransformStream {
313
334
  break;
314
335
  case "text-delta":
315
336
  message = handleTextDelta(message, chunk);
337
+ tracker.recordFirstToken();
316
338
  break;
317
339
  case "result":
318
340
  message = handleResult(message, chunk);
@@ -344,6 +366,15 @@ export class AssistantMessageAccumulator extends TransformStream {
344
366
  throw new Error(`Unsupported chunk type: ${unhandledType}`);
345
367
  }
346
368
  }
369
+ if (message.status.type !== "running") {
370
+ message = {
371
+ ...message,
372
+ metadata: {
373
+ ...message.metadata,
374
+ timing: computeTiming(tracker, message),
375
+ },
376
+ };
377
+ }
347
378
  emitChunk();
348
379
  },
349
380
  flush(controller) {
@@ -357,10 +388,17 @@ export class AssistantMessageAccumulator extends TransformStream {
357
388
  path: [],
358
389
  finishReason: requiresAction ? "tool-calls" : "unknown",
359
390
  usage: {
360
- promptTokens: 0,
361
- completionTokens: 0,
391
+ inputTokens: 0,
392
+ outputTokens: 0,
362
393
  },
363
394
  });
395
+ message = {
396
+ ...message,
397
+ metadata: {
398
+ ...message.metadata,
399
+ timing: computeTiming(tracker, message),
400
+ },
401
+ };
364
402
  controller.enqueue(message);
365
403
  }
366
404
  },
@@ -1 +1 @@
1
- {"version":3,"file":"assistant-message-accumulator.js","sourceRoot":"","sources":["../../../src/core/accumulators/assistant-message-accumulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assistant-message-accumulator.js","sourceRoot":"","sources":["../../../src/core/accumulators/assistant-message-accumulator.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export { PlainTextDecoder, PlainTextEncoder } from "./serialization/PlainText.js
8
8
  export { AssistantTransportDecoder, AssistantTransportEncoder, } from "./serialization/assistant-transport/AssistantTransport.js";
9
9
  export { UIMessageStreamDecoder, type UIMessageStreamChunk, type UIMessageStreamDataChunk, type UIMessageStreamDecoderOptions, } from "./serialization/ui-message-stream/UIMessageStream.js";
10
10
  export { AssistantMessageStream } from "./accumulators/AssistantMessageStream.js";
11
- export type { AssistantMessage } from "./utils/types.js";
11
+ export type { AssistantMessage, AssistantMessageTiming } from "./utils/types.js";
12
12
  export * from "./tool/index.js";
13
13
  export type { TextStreamController } from "./modules/text.js";
14
14
  export type { ToolCallStreamController } from "./modules/tool-call.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,+BAA+B,GAChC,sCAAmC;AACpC,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,IAAI,6BAA6B,GACtD,wDAAqD;AACtD,OAAO,EAAE,eAAe,EAAE,6BAA0B;AACpD,YAAY,EAAE,yBAAyB,EAAE,sCAAmC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,kCAA+B;AACnE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,kDAA+C;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qCAAkC;AAC/E,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAC1B,kEAA+D;AAChE,OAAO,EACL,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,GACnC,6DAA0D;AAC3D,OAAO,EAAE,sBAAsB,EAAE,iDAA8C;AAC/E,YAAY,EAAE,gBAAgB,EAAE,yBAAsB;AAEtD,gCAAuB;AACvB,YAAY,EAAE,oBAAoB,EAAE,0BAAuB;AAC3D,YAAY,EAAE,wBAAwB,EAAE,+BAA4B;AAEpE,OAAO,EAAE,kBAAkB,EAAE,uCAAoC;AACjE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,yCAAsC;AACvC,YAAY,EAAE,iBAAiB,EAAE,0BAAuB;AAExD,sCAA6B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,+BAA+B,GAChC,sCAAmC;AACpC,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,IAAI,6BAA6B,GACtD,wDAAqD;AACtD,OAAO,EAAE,eAAe,EAAE,6BAA0B;AACpD,YAAY,EAAE,yBAAyB,EAAE,sCAAmC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,kCAA+B;AACnE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,kDAA+C;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qCAAkC;AAC/E,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAC1B,kEAA+D;AAChE,OAAO,EACL,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,GACnC,6DAA0D;AAC3D,OAAO,EAAE,sBAAsB,EAAE,iDAA8C;AAC/E,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,yBAAsB;AAE9E,gCAAuB;AACvB,YAAY,EAAE,oBAAoB,EAAE,0BAAuB;AAC3D,YAAY,EAAE,wBAAwB,EAAE,+BAA4B;AAEpE,OAAO,EAAE,kBAAkB,EAAE,uCAAoC;AACjE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,yCAAsC;AACvC,YAAY,EAAE,iBAAiB,EAAE,0BAAuB;AAExD,sCAA6B"}
@@ -8,8 +8,8 @@ export type DataStreamChunk = {
8
8
  }[DataStreamStreamChunkType];
9
9
  type LanguageModelV1FinishReason = "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
10
10
  type LanguageModelV1Usage = {
11
- promptTokens: number;
12
- completionTokens: number;
11
+ inputTokens: number;
12
+ outputTokens: number;
13
13
  };
14
14
  export declare enum DataStreamStreamChunkType {
15
15
  TextDelta = "0",
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-types.d.ts","sourceRoot":"","sources":["../../../../src/core/serialization/data-stream/chunk-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunk-types.d.ts","sourceRoot":"","sources":["../../../../src/core/serialization/data-stream/chunk-types.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { ReadonlyJSONValue } from "../../../utils/json/json-value.js";
2
2
  type FinishReason = "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
3
3
  type Usage = {
4
- promptTokens: number;
5
- completionTokens: number;
4
+ inputTokens: number;
5
+ outputTokens: number;
6
6
  };
7
7
  export type UIMessageStreamChunk = {
8
8
  type: "start";
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-types.d.ts","sourceRoot":"","sources":["../../../../src/core/serialization/ui-message-stream/chunk-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,0CAAuC;AAExE,KAAK,YAAY,GACb,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,CAAC;AAEd,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE;QAAE,UAAU,EAAE,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1D;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpC,wBAAwB,CAAC;AAE7B,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,QAAQ,MAAM,EAAE,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC"}
1
+ {"version":3,"file":"chunk-types.d.ts","sourceRoot":"","sources":["../../../../src/core/serialization/ui-message-stream/chunk-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,0CAAuC;AAExE,KAAK,YAAY,GACb,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,CAAC;AAEd,KAAK,KAAK,GAAG;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE;QAAE,UAAU,EAAE,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1D;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACpC,wBAAwB,CAAC;AAE7B,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,QAAQ,MAAM,EAAE,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateId.d.ts","sourceRoot":"","sources":["../../../src/core/utils/generateId.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,2BAGtB,CAAC"}
1
+ {"version":3,"file":"generateId.d.ts","sourceRoot":"","sources":["../../../src/core/utils/generateId.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,2BAGtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateId.js","sourceRoot":"","sources":["../../../src/core/utils/generateId.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CACtC,gEAAgE,EAChE,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"generateId.js","sourceRoot":"","sources":["../../../src/core/utils/generateId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CACtC,gEAAgE,EAChE,CAAC,CACF,CAAC"}
@@ -71,8 +71,8 @@ export type FilePart = {
71
71
  };
72
72
  export type AssistantMessagePart = TextPart | ReasoningPart | ToolCallPart | SourcePart | FilePart;
73
73
  type AssistantMessageStepUsage = {
74
- promptTokens: number;
75
- completionTokens: number;
74
+ inputTokens: number;
75
+ outputTokens: number;
76
76
  };
77
77
  type AssistantMessageStepMetadata = {
78
78
  state: "started";
@@ -97,6 +97,22 @@ export type AssistantMessageStatus = {
97
97
  reason: "cancelled" | "tool-calls" | "length" | "content-filter" | "other" | "error";
98
98
  error?: ReadonlyJSONValue;
99
99
  };
100
+ export type AssistantMessageTiming = {
101
+ /** Timestamp when the stream started (ms since epoch) */
102
+ streamStartTime: number;
103
+ /** Time to first text token (ms), undefined if no text was generated */
104
+ firstTokenTime?: number;
105
+ /** Total stream duration (ms) */
106
+ totalStreamTime?: number;
107
+ /** Estimated or actual completion token count */
108
+ tokenCount?: number;
109
+ /** Tokens per second throughput */
110
+ tokensPerSecond?: number;
111
+ /** Total number of chunks received */
112
+ totalChunks: number;
113
+ /** Number of tool calls in the message */
114
+ toolCallCount: number;
115
+ };
100
116
  export type AssistantMessage = {
101
117
  role: "assistant";
102
118
  status: AssistantMessageStatus;
@@ -111,6 +127,7 @@ export type AssistantMessage = {
111
127
  unstable_annotations: ReadonlyJSONValue[];
112
128
  steps: AssistantMessageStepMetadata[];
113
129
  custom: Record<string, unknown>;
130
+ timing?: AssistantMessageTiming;
114
131
  };
115
132
  };
116
133
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAClB,uCAAoC;AAErC,KAAK,UAAU,GACX;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;CAC7D,CAAC;AAMN,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,cAAc,GACf;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;CAC7D,CAAC;AAEN,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,yBAAyB,GAAG,gBAAgB,GAAG;IAClD,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,KAAK,sBAAsB,GAAG,gBAAgB,GAAG;IAC/C,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,yBAAyB,GAAG,sBAAsB,CAAC;AAE9E,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,KAAK,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,UAAU,GACV,QAAQ,CAAC;AAEb,KAAK,yBAAyB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,KAAK,4BAA4B,GAC7B;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EACR,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,CAAC;IACd,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,sBAAsB,GAC9B;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;CACtB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EACF,WAAW,GACX,YAAY,GACZ,QAAQ,GACR,gBAAgB,GAChB,OAAO,GACP,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAEhC,QAAQ,EAAE;QACR,cAAc,EAAE,iBAAiB,CAAC;QAClC,aAAa,EAAE,iBAAiB,EAAE,CAAC;QACnC,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;QAC1C,KAAK,EAAE,4BAA4B,EAAE,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/utils/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistant-stream",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Streaming utilities for AI assistants",
5
5
  "keywords": [
6
6
  "ai",
@@ -64,8 +64,8 @@ export type AssistantStreamChunk = { readonly path: readonly number[] } & (
64
64
  | "other"
65
65
  | "unknown";
66
66
  readonly usage: {
67
- readonly promptTokens: number;
68
- readonly completionTokens: number;
67
+ readonly inputTokens: number;
68
+ readonly outputTokens: number;
69
69
  };
70
70
  readonly isContinued: boolean;
71
71
  }
@@ -80,8 +80,8 @@ export type AssistantStreamChunk = { readonly path: readonly number[] } & (
80
80
  | "other"
81
81
  | "unknown";
82
82
  readonly usage: {
83
- readonly promptTokens: number;
84
- readonly completionTokens: number;
83
+ readonly inputTokens: number;
84
+ readonly outputTokens: number;
85
85
  };
86
86
  }
87
87
  | {
@@ -0,0 +1,100 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { TimingTracker } from "./TimingTracker";
3
+
4
+ describe("TimingTracker", () => {
5
+ beforeEach(() => {
6
+ vi.useFakeTimers();
7
+ vi.setSystemTime(1000);
8
+ });
9
+
10
+ afterEach(() => {
11
+ vi.useRealTimers();
12
+ });
13
+
14
+ it("should record stream start time", () => {
15
+ const tracker = new TimingTracker();
16
+ const timing = tracker.getTiming();
17
+ expect(timing.streamStartTime).toBe(1000);
18
+ });
19
+
20
+ it("should count chunks", () => {
21
+ const tracker = new TimingTracker();
22
+ tracker.recordChunk();
23
+ tracker.recordChunk();
24
+ tracker.recordChunk();
25
+ const timing = tracker.getTiming();
26
+ expect(timing.totalChunks).toBe(3);
27
+ });
28
+
29
+ it("should record first token time", () => {
30
+ const tracker = new TimingTracker();
31
+ vi.advanceTimersByTime(50);
32
+ tracker.recordFirstToken();
33
+ vi.advanceTimersByTime(100);
34
+ tracker.recordFirstToken(); // should not overwrite
35
+ const timing = tracker.getTiming();
36
+ expect(timing.firstTokenTime).toBe(50);
37
+ });
38
+
39
+ it("should not set firstTokenTime if no text tokens", () => {
40
+ const tracker = new TimingTracker();
41
+ const timing = tracker.getTiming();
42
+ expect(timing.firstTokenTime).toBeUndefined();
43
+ });
44
+
45
+ it("should track unique tool calls", () => {
46
+ const tracker = new TimingTracker();
47
+ tracker.recordToolCallStart("tc-1");
48
+ tracker.recordToolCallStart("tc-2");
49
+ tracker.recordToolCallStart("tc-1"); // duplicate
50
+ const timing = tracker.getTiming();
51
+ expect(timing.toolCallCount).toBe(2);
52
+ });
53
+
54
+ it("should compute totalStreamTime", () => {
55
+ const tracker = new TimingTracker();
56
+ vi.advanceTimersByTime(200);
57
+ const timing = tracker.getTiming();
58
+ expect(timing.totalStreamTime).toBe(200);
59
+ });
60
+
61
+ it("should use outputTokens when available", () => {
62
+ const tracker = new TimingTracker();
63
+ vi.advanceTimersByTime(1000);
64
+ const timing = tracker.getTiming(42, "some text");
65
+ expect(timing.tokenCount).toBe(42);
66
+ expect(timing.tokensPerSecond).toBe(42);
67
+ });
68
+
69
+ it("should estimate tokens from text when no outputTokens", () => {
70
+ const tracker = new TimingTracker();
71
+ vi.advanceTimersByTime(1000);
72
+ // 20 chars / 4 = 5 tokens
73
+ const timing = tracker.getTiming(undefined, "12345678901234567890");
74
+ expect(timing.tokenCount).toBe(5);
75
+ expect(timing.tokensPerSecond).toBe(5);
76
+ });
77
+
78
+ it("should handle zero outputTokens by falling back to text", () => {
79
+ const tracker = new TimingTracker();
80
+ vi.advanceTimersByTime(1000);
81
+ const timing = tracker.getTiming(0, "1234567890"); // 10 chars -> 3 tokens
82
+ expect(timing.tokenCount).toBe(3);
83
+ });
84
+
85
+ it("should handle no tokens and no text", () => {
86
+ const tracker = new TimingTracker();
87
+ vi.advanceTimersByTime(100);
88
+ const timing = tracker.getTiming();
89
+ expect(timing.tokenCount).toBeUndefined();
90
+ expect(timing.tokensPerSecond).toBeUndefined();
91
+ });
92
+
93
+ it("should handle zero stream time (no division by zero)", () => {
94
+ const tracker = new TimingTracker();
95
+ // Don't advance time — totalStreamTime = 0
96
+ const timing = tracker.getTiming(100, "text");
97
+ expect(timing.totalStreamTime).toBe(0);
98
+ expect(timing.tokensPerSecond).toBeUndefined();
99
+ });
100
+ });
@@ -0,0 +1,55 @@
1
+ import type { AssistantMessageTiming } from "../utils/types";
2
+
3
+ export class TimingTracker {
4
+ private _streamStartTime: number;
5
+ private _firstTokenTime: number | undefined;
6
+ private _totalChunks = 0;
7
+ private _toolCallIds = new Set<string>();
8
+
9
+ constructor() {
10
+ this._streamStartTime = Date.now();
11
+ }
12
+
13
+ recordChunk(): void {
14
+ this._totalChunks++;
15
+ }
16
+
17
+ recordFirstToken(): void {
18
+ if (this._firstTokenTime === undefined) {
19
+ this._firstTokenTime = Date.now();
20
+ }
21
+ }
22
+
23
+ recordToolCallStart(toolCallId: string): void {
24
+ this._toolCallIds.add(toolCallId);
25
+ }
26
+
27
+ getTiming(outputTokens?: number, totalText?: string): AssistantMessageTiming {
28
+ const now = Date.now();
29
+ const totalStreamTime = now - this._streamStartTime;
30
+
31
+ const tokenCount =
32
+ outputTokens && outputTokens > 0
33
+ ? outputTokens
34
+ : totalText
35
+ ? Math.ceil(totalText.length / 4)
36
+ : undefined;
37
+
38
+ const tokensPerSecond =
39
+ tokenCount && totalStreamTime > 0
40
+ ? (tokenCount / totalStreamTime) * 1000
41
+ : undefined;
42
+
43
+ return {
44
+ streamStartTime: this._streamStartTime,
45
+ ...(this._firstTokenTime !== undefined
46
+ ? { firstTokenTime: this._firstTokenTime - this._streamStartTime }
47
+ : undefined),
48
+ totalStreamTime,
49
+ ...(tokenCount !== undefined ? { tokenCount } : undefined),
50
+ ...(tokensPerSecond !== undefined ? { tokensPerSecond } : undefined),
51
+ totalChunks: this._totalChunks,
52
+ toolCallCount: this._toolCallIds.size,
53
+ };
54
+ }
55
+ }
@@ -0,0 +1,176 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { AssistantMessageAccumulator } from "./assistant-message-accumulator";
3
+ import type { AssistantStreamChunk } from "../AssistantStreamChunk";
4
+ import type { AssistantMessage } from "../utils/types";
5
+
6
+ const collectStream = async (
7
+ chunks: AssistantStreamChunk[],
8
+ ): Promise<AssistantMessage[]> => {
9
+ const accumulator = new AssistantMessageAccumulator();
10
+ const messages: AssistantMessage[] = [];
11
+
12
+ const source = new ReadableStream<AssistantStreamChunk>({
13
+ start(controller) {
14
+ for (const chunk of chunks) {
15
+ controller.enqueue(chunk);
16
+ }
17
+ controller.close();
18
+ },
19
+ });
20
+
21
+ await source.pipeThrough(accumulator).pipeTo(
22
+ new WritableStream({
23
+ write(message) {
24
+ messages.push(message);
25
+ },
26
+ }),
27
+ );
28
+
29
+ return messages;
30
+ };
31
+
32
+ describe("AssistantMessageAccumulator timing", () => {
33
+ it("should include timing on message-finish", async () => {
34
+ const chunks: AssistantStreamChunk[] = [
35
+ { type: "step-start", path: [], messageId: "msg-1" },
36
+ { type: "part-start", path: [0], part: { type: "text" } },
37
+ { type: "text-delta", path: [0], textDelta: "Hello " },
38
+ { type: "text-delta", path: [0], textDelta: "world" },
39
+ { type: "part-finish", path: [0] },
40
+ {
41
+ type: "step-finish",
42
+ path: [],
43
+ finishReason: "stop",
44
+ usage: { inputTokens: 10, outputTokens: 5 },
45
+ isContinued: false,
46
+ },
47
+ {
48
+ type: "message-finish",
49
+ path: [],
50
+ finishReason: "stop",
51
+ usage: { inputTokens: 10, outputTokens: 5 },
52
+ },
53
+ ];
54
+
55
+ const messages = await collectStream(chunks);
56
+ const last = messages.at(-1)!;
57
+
58
+ expect(last.metadata.timing).toBeDefined();
59
+ const timing = last.metadata.timing!;
60
+ expect(timing.streamStartTime).toBeTypeOf("number");
61
+ expect(timing.totalChunks).toBe(7);
62
+ expect(timing.toolCallCount).toBe(0);
63
+ expect(timing.tokenCount).toBe(5);
64
+ expect(timing.firstTokenTime).toBeTypeOf("number");
65
+ expect(timing.totalStreamTime).toBeTypeOf("number");
66
+ expect(timing.totalStreamTime).toBeGreaterThanOrEqual(0);
67
+ });
68
+
69
+ it("should track tool calls in timing", async () => {
70
+ const chunks: AssistantStreamChunk[] = [
71
+ {
72
+ type: "part-start",
73
+ path: [0],
74
+ part: {
75
+ type: "tool-call",
76
+ toolCallId: "tc-1",
77
+ toolName: "search",
78
+ },
79
+ },
80
+ { type: "text-delta", path: [0], textDelta: '{"q":"test"}' },
81
+ { type: "tool-call-args-text-finish", path: [0] },
82
+ {
83
+ type: "result",
84
+ path: [0],
85
+ result: "found",
86
+ isError: false,
87
+ },
88
+ { type: "part-finish", path: [0] },
89
+ {
90
+ type: "message-finish",
91
+ path: [],
92
+ finishReason: "stop",
93
+ usage: { inputTokens: 0, outputTokens: 0 },
94
+ },
95
+ ];
96
+
97
+ const messages = await collectStream(chunks);
98
+ const last = messages.at(-1)!;
99
+
100
+ expect(last.metadata.timing).toBeDefined();
101
+ expect(last.metadata.timing!.toolCallCount).toBe(1);
102
+ });
103
+
104
+ it("should include timing on flush when stream closes without message-finish", async () => {
105
+ const chunks: AssistantStreamChunk[] = [
106
+ { type: "part-start", path: [0], part: { type: "text" } },
107
+ { type: "text-delta", path: [0], textDelta: "partial" },
108
+ ];
109
+
110
+ const messages = await collectStream(chunks);
111
+ const last = messages.at(-1)!;
112
+
113
+ // flush should have produced a message with timing
114
+ expect(last.metadata.timing).toBeDefined();
115
+ expect(last.metadata.timing!.totalChunks).toBe(2);
116
+ });
117
+
118
+ it("should estimate tokens from text when no usage provided", async () => {
119
+ const chunks: AssistantStreamChunk[] = [
120
+ { type: "part-start", path: [0], part: { type: "text" } },
121
+ {
122
+ type: "text-delta",
123
+ path: [0],
124
+ textDelta: "1234567890123456789012345678901234567890",
125
+ }, // 40 chars
126
+ { type: "part-finish", path: [0] },
127
+ {
128
+ type: "message-finish",
129
+ path: [],
130
+ finishReason: "stop",
131
+ usage: { inputTokens: 0, outputTokens: 0 },
132
+ },
133
+ ];
134
+
135
+ const messages = await collectStream(chunks);
136
+ const last = messages.at(-1)!;
137
+
138
+ expect(last.metadata.timing!.tokenCount).toBe(10); // 40/4
139
+ });
140
+
141
+ it("should record firstTokenTime on text-delta", async () => {
142
+ const chunks: AssistantStreamChunk[] = [
143
+ {
144
+ type: "part-start",
145
+ path: [0],
146
+ part: {
147
+ type: "tool-call",
148
+ toolCallId: "tc-1",
149
+ toolName: "search",
150
+ },
151
+ },
152
+ { type: "text-delta", path: [0], textDelta: "{}" },
153
+ { type: "tool-call-args-text-finish", path: [0] },
154
+ {
155
+ type: "result",
156
+ path: [0],
157
+ result: "ok",
158
+ isError: false,
159
+ },
160
+ { type: "part-finish", path: [0] },
161
+ {
162
+ type: "message-finish",
163
+ path: [],
164
+ finishReason: "stop",
165
+ usage: { inputTokens: 0, outputTokens: 0 },
166
+ },
167
+ ];
168
+
169
+ const messages = await collectStream(chunks);
170
+ const last = messages.at(-1)!;
171
+
172
+ // text-delta on tool-call args still records first token
173
+ expect(last.metadata.timing).toBeDefined();
174
+ expect(last.metadata.timing!.firstTokenTime).toBeTypeOf("number");
175
+ });
176
+ });
@@ -4,6 +4,7 @@ import { parsePartialJsonObject } from "../../utils/json/parse-partial-json-obje
4
4
  import {
5
5
  AssistantMessage,
6
6
  AssistantMessageStatus,
7
+ AssistantMessageTiming,
7
8
  TextPart,
8
9
  ToolCallPart,
9
10
  SourcePart,
@@ -13,6 +14,7 @@ import {
13
14
  } from "../utils/types";
14
15
  import { ObjectStreamAccumulator } from "../object/ObjectStreamAccumulator";
15
16
  import { ReadonlyJSONValue } from "../../utils";
17
+ import { TimingTracker } from "./TimingTracker";
16
18
 
17
19
  export const createInitialMessage = ({
18
20
  unstable_state = null,
@@ -355,6 +357,30 @@ const handleUpdateState = (
355
357
  };
356
358
  };
357
359
 
360
+ const computeTiming = (
361
+ tracker: TimingTracker,
362
+ message: AssistantMessage,
363
+ ): AssistantMessageTiming => {
364
+ let outputTokens = 0;
365
+ for (const step of message.metadata.steps) {
366
+ if (step.state === "finished" && step.usage) {
367
+ outputTokens += step.usage.outputTokens;
368
+ }
369
+ }
370
+
371
+ let totalText = "";
372
+ for (const part of message.parts) {
373
+ if (part.type === "text" || part.type === "reasoning") {
374
+ totalText += part.text;
375
+ }
376
+ }
377
+
378
+ return tracker.getTiming(
379
+ outputTokens > 0 ? outputTokens : undefined,
380
+ totalText || undefined,
381
+ );
382
+ };
383
+
358
384
  const throttleCallback = (callback: () => void) => {
359
385
  let hasScheduled = false;
360
386
  return () => {
@@ -381,6 +407,7 @@ export class AssistantMessageAccumulator extends TransformStream<
381
407
  onError?: (error: string) => void;
382
408
  } = {}) {
383
409
  let message = initialMessage ?? createInitialMessage();
410
+ const tracker = new TimingTracker();
384
411
  let controller:
385
412
  | TransformStreamDefaultController<AssistantMessage>
386
413
  | undefined;
@@ -396,10 +423,14 @@ export class AssistantMessageAccumulator extends TransformStream<
396
423
  controller = c;
397
424
  },
398
425
  transform(chunk) {
426
+ tracker.recordChunk();
399
427
  const type = chunk.type;
400
428
  switch (type) {
401
429
  case "part-start":
402
430
  message = handlePartStart(message, chunk);
431
+ if (chunk.part.type === "tool-call") {
432
+ tracker.recordToolCallStart(chunk.part.toolCallId);
433
+ }
403
434
  break;
404
435
 
405
436
  case "tool-call-args-text-finish":
@@ -412,6 +443,7 @@ export class AssistantMessageAccumulator extends TransformStream<
412
443
 
413
444
  case "text-delta":
414
445
  message = handleTextDelta(message, chunk);
446
+ tracker.recordFirstToken();
415
447
  break;
416
448
  case "result":
417
449
  message = handleResult(message, chunk);
@@ -443,6 +475,17 @@ export class AssistantMessageAccumulator extends TransformStream<
443
475
  throw new Error(`Unsupported chunk type: ${unhandledType}`);
444
476
  }
445
477
  }
478
+
479
+ if (message.status.type !== "running") {
480
+ message = {
481
+ ...message,
482
+ metadata: {
483
+ ...message.metadata,
484
+ timing: computeTiming(tracker, message),
485
+ },
486
+ };
487
+ }
488
+
446
489
  emitChunk();
447
490
  },
448
491
  flush(controller) {
@@ -460,10 +503,19 @@ export class AssistantMessageAccumulator extends TransformStream<
460
503
  path: [],
461
504
  finishReason: requiresAction ? "tool-calls" : "unknown",
462
505
  usage: {
463
- promptTokens: 0,
464
- completionTokens: 0,
506
+ inputTokens: 0,
507
+ outputTokens: 0,
465
508
  },
466
509
  });
510
+
511
+ message = {
512
+ ...message,
513
+ metadata: {
514
+ ...message.metadata,
515
+ timing: computeTiming(tracker, message),
516
+ },
517
+ };
518
+
467
519
  controller.enqueue(message);
468
520
  }
469
521
  },
package/src/core/index.ts CHANGED
@@ -26,7 +26,7 @@ export {
26
26
  type UIMessageStreamDecoderOptions,
27
27
  } from "./serialization/ui-message-stream/UIMessageStream";
28
28
  export { AssistantMessageStream } from "./accumulators/AssistantMessageStream";
29
- export type { AssistantMessage } from "./utils/types";
29
+ export type { AssistantMessage, AssistantMessageTiming } from "./utils/types";
30
30
 
31
31
  export * from "./tool";
32
32
  export type { TextStreamController } from "./modules/text";
@@ -21,8 +21,8 @@ type LanguageModelV1FinishReason =
21
21
  | "unknown";
22
22
 
23
23
  type LanguageModelV1Usage = {
24
- promptTokens: number;
25
- completionTokens: number;
24
+ inputTokens: number;
25
+ outputTokens: number;
26
26
  };
27
27
 
28
28
  export enum DataStreamStreamChunkType {
@@ -44,7 +44,7 @@ describe("UIMessageStreamDecoder", () => {
44
44
  JSON.stringify({
45
45
  type: "finish",
46
46
  finishReason: "stop",
47
- usage: { promptTokens: 10, completionTokens: 5 },
47
+ usage: { inputTokens: 10, outputTokens: 5 },
48
48
  }),
49
49
  "[DONE]",
50
50
  ];
@@ -72,7 +72,7 @@ describe("UIMessageStreamDecoder", () => {
72
72
  JSON.stringify({
73
73
  type: "finish",
74
74
  finishReason: "stop",
75
- usage: { promptTokens: 10, completionTokens: 5 },
75
+ usage: { inputTokens: 10, outputTokens: 5 },
76
76
  }),
77
77
  "[DONE]",
78
78
  ];
@@ -109,7 +109,7 @@ describe("UIMessageStreamDecoder", () => {
109
109
  JSON.stringify({
110
110
  type: "finish",
111
111
  finishReason: "stop",
112
- usage: { promptTokens: 10, completionTokens: 5 },
112
+ usage: { inputTokens: 10, outputTokens: 5 },
113
113
  }),
114
114
  "[DONE]",
115
115
  ];
@@ -153,7 +153,7 @@ describe("UIMessageStreamDecoder", () => {
153
153
  JSON.stringify({
154
154
  type: "finish",
155
155
  finishReason: "stop",
156
- usage: { promptTokens: 10, completionTokens: 5 },
156
+ usage: { inputTokens: 10, outputTokens: 5 },
157
157
  }),
158
158
  "[DONE]",
159
159
  ];
@@ -186,7 +186,7 @@ describe("UIMessageStreamDecoder", () => {
186
186
  JSON.stringify({
187
187
  type: "finish",
188
188
  finishReason: "stop",
189
- usage: { promptTokens: 10, completionTokens: 5 },
189
+ usage: { inputTokens: 10, outputTokens: 5 },
190
190
  }),
191
191
  "[DONE]",
192
192
  ];
@@ -217,7 +217,7 @@ describe("UIMessageStreamDecoder", () => {
217
217
  JSON.stringify({
218
218
  type: "finish",
219
219
  finishReason: "stop",
220
- usage: { promptTokens: 10, completionTokens: 5 },
220
+ usage: { inputTokens: 10, outputTokens: 5 },
221
221
  }),
222
222
  "[DONE]",
223
223
  ];
@@ -248,7 +248,7 @@ describe("UIMessageStreamDecoder", () => {
248
248
  JSON.stringify({
249
249
  type: "finish",
250
250
  finishReason: "stop",
251
- usage: { promptTokens: 10, completionTokens: 5 },
251
+ usage: { inputTokens: 10, outputTokens: 5 },
252
252
  }),
253
253
  "[DONE]",
254
254
  ];
@@ -282,13 +282,13 @@ describe("UIMessageStreamDecoder", () => {
282
282
  JSON.stringify({
283
283
  type: "finish-step",
284
284
  finishReason: "stop",
285
- usage: { promptTokens: 10, completionTokens: 5 },
285
+ usage: { inputTokens: 10, outputTokens: 5 },
286
286
  isContinued: false,
287
287
  }),
288
288
  JSON.stringify({
289
289
  type: "finish",
290
290
  finishReason: "stop",
291
- usage: { promptTokens: 10, completionTokens: 5 },
291
+ usage: { inputTokens: 10, outputTokens: 5 },
292
292
  }),
293
293
  "[DONE]",
294
294
  ];
@@ -355,7 +355,7 @@ describe("UIMessageStreamDecoder", () => {
355
355
  JSON.stringify({
356
356
  type: "finish",
357
357
  finishReason: "stop",
358
- usage: { promptTokens: 10, completionTokens: 5 },
358
+ usage: { inputTokens: 10, outputTokens: 5 },
359
359
  }),
360
360
  "[DONE]",
361
361
  ];
@@ -10,8 +10,8 @@ type FinishReason =
10
10
  | "unknown";
11
11
 
12
12
  type Usage = {
13
- promptTokens: number;
14
- completionTokens: number;
13
+ inputTokens: number;
14
+ outputTokens: number;
15
15
  };
16
16
 
17
17
  export type UIMessageStreamChunk =
@@ -6,7 +6,7 @@ describe("toJSONSchema", () => {
6
6
  it("converts StandardSchemaV1 with ~standard.toJSONSchema", () => {
7
7
  const mockStandardSchema = {
8
8
  "~standard": {
9
- version: 1,
9
+ version: 1 as const,
10
10
  vendor: "test",
11
11
  validate: () => ({ value: {} }),
12
12
  toJSONSchema: () => ({
@@ -69,7 +69,7 @@ describe("toJSONSchema", () => {
69
69
  it("prioritizes StandardSchema over toJSONSchema method", () => {
70
70
  const mixedSchema = {
71
71
  "~standard": {
72
- version: 1,
72
+ version: 1 as const,
73
73
  vendor: "test",
74
74
  validate: () => ({ value: {} }),
75
75
  toJSONSchema: () => ({ type: "string", description: "from standard" }),
@@ -291,7 +291,7 @@ describe("toToolsJSONSchema", () => {
291
291
  it("converts parameters via toJSONSchema", () => {
292
292
  const mockStandardSchema = {
293
293
  "~standard": {
294
- version: 1,
294
+ version: 1 as const,
295
295
  vendor: "test",
296
296
  validate: () => ({ value: {} }),
297
297
  toJSONSchema: () => ({
@@ -102,8 +102,8 @@ export type AssistantMessagePart =
102
102
  | FilePart;
103
103
 
104
104
  type AssistantMessageStepUsage = {
105
- promptTokens: number;
106
- completionTokens: number;
105
+ inputTokens: number;
106
+ outputTokens: number;
107
107
  };
108
108
 
109
109
  type AssistantMessageStepMetadata =
@@ -150,6 +150,23 @@ export type AssistantMessageStatus =
150
150
  error?: ReadonlyJSONValue;
151
151
  };
152
152
 
153
+ export type AssistantMessageTiming = {
154
+ /** Timestamp when the stream started (ms since epoch) */
155
+ streamStartTime: number;
156
+ /** Time to first text token (ms), undefined if no text was generated */
157
+ firstTokenTime?: number;
158
+ /** Total stream duration (ms) */
159
+ totalStreamTime?: number;
160
+ /** Estimated or actual completion token count */
161
+ tokenCount?: number;
162
+ /** Tokens per second throughput */
163
+ tokensPerSecond?: number;
164
+ /** Total number of chunks received */
165
+ totalChunks: number;
166
+ /** Number of tool calls in the message */
167
+ toolCallCount: number;
168
+ };
169
+
153
170
  export type AssistantMessage = {
154
171
  role: "assistant";
155
172
  status: AssistantMessageStatus;
@@ -165,5 +182,6 @@ export type AssistantMessage = {
165
182
  unstable_annotations: ReadonlyJSONValue[];
166
183
  steps: AssistantMessageStepMetadata[];
167
184
  custom: Record<string, unknown>;
185
+ timing?: AssistantMessageTiming;
168
186
  };
169
187
  };