ai 5.0.0-canary.17 → 5.0.0-canary.18

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.
package/dist/index.mjs CHANGED
@@ -17,18 +17,6 @@ import {
17
17
  // core/util/process-chat-response.ts
18
18
  import { generateId as generateIdFunction } from "@ai-sdk/provider-utils";
19
19
 
20
- // core/types/duplicated/usage.ts
21
- function calculateLanguageModelUsage({
22
- promptTokens,
23
- completionTokens
24
- }) {
25
- return {
26
- promptTokens,
27
- completionTokens,
28
- totalTokens: promptTokens + completionTokens
29
- };
30
- }
31
-
32
20
  // core/ui/get-tool-invocations.ts
33
21
  function getToolInvocations(message) {
34
22
  return message.parts.filter(
@@ -494,10 +482,13 @@ var finishMessageStreamPart = {
494
482
  const result = {
495
483
  finishReason: value.finishReason
496
484
  };
497
- if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) {
485
+ if ("usage" in value && value.usage != null && typeof value.usage === "object") {
498
486
  result.usage = {
499
- promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : Number.NaN,
500
- completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : Number.NaN
487
+ inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
488
+ outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
489
+ totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
490
+ reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
491
+ cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
501
492
  };
502
493
  }
503
494
  return {
@@ -519,10 +510,13 @@ var finishStepStreamPart = {
519
510
  finishReason: value.finishReason,
520
511
  isContinued: false
521
512
  };
522
- if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) {
513
+ if ("usage" in value && value.usage != null && typeof value.usage === "object") {
523
514
  result.usage = {
524
- promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : Number.NaN,
525
- completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : Number.NaN
515
+ inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
516
+ outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
517
+ totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
518
+ reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
519
+ cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
526
520
  };
527
521
  }
528
522
  if ("isContinued" in value && typeof value.isContinued === "boolean") {
@@ -795,9 +789,9 @@ async function processChatResponse({
795
789
  let messageAnnotations = replaceLastMessage ? lastMessage == null ? void 0 : lastMessage.annotations : void 0;
796
790
  const partialToolCalls = {};
797
791
  let usage = {
798
- completionTokens: NaN,
799
- promptTokens: NaN,
800
- totalTokens: NaN
792
+ inputTokens: void 0,
793
+ outputTokens: void 0,
794
+ totalTokens: void 0
801
795
  };
802
796
  let finishReason = "unknown";
803
797
  function execUpdate() {
@@ -970,7 +964,7 @@ async function processChatResponse({
970
964
  onFinishMessagePart(value) {
971
965
  finishReason = value.finishReason;
972
966
  if (value.usage != null) {
973
- usage = calculateLanguageModelUsage(value.usage);
967
+ usage = value.usage;
974
968
  }
975
969
  },
976
970
  onErrorPart(error) {
@@ -1027,7 +1021,11 @@ async function processChatTextResponse({
1027
1021
  }
1028
1022
  });
1029
1023
  onFinish == null ? void 0 : onFinish(resultMessage, {
1030
- usage: { completionTokens: NaN, promptTokens: NaN, totalTokens: NaN },
1024
+ usage: {
1025
+ inputTokens: void 0,
1026
+ outputTokens: void 0,
1027
+ totalTokens: void 0
1028
+ },
1031
1029
  finishReason: "unknown"
1032
1030
  });
1033
1031
  }
@@ -1041,7 +1039,6 @@ async function callChatApi({
1041
1039
  credentials,
1042
1040
  headers,
1043
1041
  abortController,
1044
- restoreMessagesOnFailure,
1045
1042
  onResponse,
1046
1043
  onUpdate,
1047
1044
  onFinish,
@@ -1053,7 +1050,7 @@ async function callChatApi({
1053
1050
  requestType = "generate"
1054
1051
  }) {
1055
1052
  var _a17, _b, _c;
1056
- const request = requestType === "resume" ? fetch2(`${api}?chatId=${body.id}`, {
1053
+ const response = requestType === "resume" ? await fetch2(`${api}?chatId=${body.id}`, {
1057
1054
  method: "GET",
1058
1055
  headers: {
1059
1056
  "Content-Type": "application/json",
@@ -1061,7 +1058,7 @@ async function callChatApi({
1061
1058
  },
1062
1059
  signal: (_a17 = abortController == null ? void 0 : abortController()) == null ? void 0 : _a17.signal,
1063
1060
  credentials
1064
- }) : fetch2(api, {
1061
+ }) : await fetch2(api, {
1065
1062
  method: "POST",
1066
1063
  body: JSON.stringify(body),
1067
1064
  headers: {
@@ -1071,19 +1068,10 @@ async function callChatApi({
1071
1068
  signal: (_b = abortController == null ? void 0 : abortController()) == null ? void 0 : _b.signal,
1072
1069
  credentials
1073
1070
  });
1074
- const response = await request.catch((err) => {
1075
- restoreMessagesOnFailure();
1076
- throw err;
1077
- });
1078
- if (onResponse) {
1079
- try {
1080
- await onResponse(response);
1081
- } catch (err) {
1082
- throw err;
1083
- }
1071
+ if (onResponse != null) {
1072
+ await onResponse(response);
1084
1073
  }
1085
1074
  if (!response.ok) {
1086
- restoreMessagesOnFailure();
1087
1075
  throw new Error(
1088
1076
  (_c = await response.text()) != null ? _c : "Failed to fetch the chat response."
1089
1077
  );
@@ -1097,7 +1085,8 @@ async function callChatApi({
1097
1085
  stream: response.body,
1098
1086
  update: onUpdate,
1099
1087
  onFinish,
1100
- generateId: generateId3
1088
+ generateId: generateId3,
1089
+ getCurrentDate
1101
1090
  });
1102
1091
  return;
1103
1092
  }
@@ -1992,6 +1981,7 @@ function splitArray(array, chunkSize) {
1992
1981
  async function embedMany({
1993
1982
  model,
1994
1983
  values,
1984
+ maxParallelCalls = Infinity,
1995
1985
  maxRetries: maxRetriesArg,
1996
1986
  abortSignal,
1997
1987
  headers,
@@ -2021,7 +2011,10 @@ async function embedMany({
2021
2011
  }),
2022
2012
  tracer,
2023
2013
  fn: async (span) => {
2024
- const maxEmbeddingsPerCall = await model.maxEmbeddingsPerCall;
2014
+ const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([
2015
+ model.maxEmbeddingsPerCall,
2016
+ model.supportsParallelCalls
2017
+ ]);
2025
2018
  if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {
2026
2019
  const { embeddings: embeddings2, usage, response } = await retry(() => {
2027
2020
  return recordSpan({
@@ -2092,61 +2085,69 @@ async function embedMany({
2092
2085
  const embeddings = [];
2093
2086
  const responses = [];
2094
2087
  let tokens = 0;
2095
- for (const chunk of valueChunks) {
2096
- const {
2097
- embeddings: responseEmbeddings,
2098
- usage,
2099
- response
2100
- } = await retry(() => {
2101
- return recordSpan({
2102
- name: "ai.embedMany.doEmbed",
2103
- attributes: selectTelemetryAttributes({
2104
- telemetry,
2105
- attributes: {
2106
- ...assembleOperationName({
2107
- operationId: "ai.embedMany.doEmbed",
2108
- telemetry
2109
- }),
2110
- ...baseTelemetryAttributes,
2111
- // specific settings that only make sense on the outer level:
2112
- "ai.values": {
2113
- input: () => chunk.map((value) => JSON.stringify(value))
2114
- }
2115
- }
2116
- }),
2117
- tracer,
2118
- fn: async (doEmbedSpan) => {
2119
- var _a17;
2120
- const modelResponse = await model.doEmbed({
2121
- values: chunk,
2122
- abortSignal,
2123
- headers,
2124
- providerOptions
2125
- });
2126
- const embeddings2 = modelResponse.embeddings;
2127
- const usage2 = (_a17 = modelResponse.usage) != null ? _a17 : { tokens: NaN };
2128
- doEmbedSpan.setAttributes(
2129
- selectTelemetryAttributes({
2088
+ const parallelChunks = splitArray(
2089
+ valueChunks,
2090
+ supportsParallelCalls ? maxParallelCalls : 1
2091
+ );
2092
+ for (const parallelChunk of parallelChunks) {
2093
+ const results = await Promise.all(
2094
+ parallelChunk.map((chunk) => {
2095
+ return retry(() => {
2096
+ return recordSpan({
2097
+ name: "ai.embedMany.doEmbed",
2098
+ attributes: selectTelemetryAttributes({
2130
2099
  telemetry,
2131
2100
  attributes: {
2132
- "ai.embeddings": {
2133
- output: () => embeddings2.map((embedding) => JSON.stringify(embedding))
2134
- },
2135
- "ai.usage.tokens": usage2.tokens
2101
+ ...assembleOperationName({
2102
+ operationId: "ai.embedMany.doEmbed",
2103
+ telemetry
2104
+ }),
2105
+ ...baseTelemetryAttributes,
2106
+ // specific settings that only make sense on the outer level:
2107
+ "ai.values": {
2108
+ input: () => chunk.map((value) => JSON.stringify(value))
2109
+ }
2136
2110
  }
2137
- })
2138
- );
2139
- return {
2140
- embeddings: embeddings2,
2141
- usage: usage2,
2142
- response: modelResponse.response
2143
- };
2144
- }
2145
- });
2146
- });
2147
- embeddings.push(...responseEmbeddings);
2148
- responses.push(response);
2149
- tokens += usage.tokens;
2111
+ }),
2112
+ tracer,
2113
+ fn: async (doEmbedSpan) => {
2114
+ var _a17;
2115
+ const modelResponse = await model.doEmbed({
2116
+ values: chunk,
2117
+ abortSignal,
2118
+ headers,
2119
+ providerOptions
2120
+ });
2121
+ const embeddings2 = modelResponse.embeddings;
2122
+ const usage = (_a17 = modelResponse.usage) != null ? _a17 : { tokens: NaN };
2123
+ doEmbedSpan.setAttributes(
2124
+ selectTelemetryAttributes({
2125
+ telemetry,
2126
+ attributes: {
2127
+ "ai.embeddings": {
2128
+ output: () => embeddings2.map(
2129
+ (embedding) => JSON.stringify(embedding)
2130
+ )
2131
+ },
2132
+ "ai.usage.tokens": usage.tokens
2133
+ }
2134
+ })
2135
+ );
2136
+ return {
2137
+ embeddings: embeddings2,
2138
+ usage,
2139
+ response: modelResponse.response
2140
+ };
2141
+ }
2142
+ });
2143
+ });
2144
+ })
2145
+ );
2146
+ for (const result of results) {
2147
+ embeddings.push(...result.embeddings);
2148
+ responses.push(result.response);
2149
+ tokens += result.usage.tokens;
2150
+ }
2150
2151
  }
2151
2152
  span.setAttributes(
2152
2153
  selectTelemetryAttributes({
@@ -3434,25 +3435,6 @@ async function standardizePrompt({
3434
3435
  throw new Error("unreachable");
3435
3436
  }
3436
3437
 
3437
- // core/types/usage.ts
3438
- function calculateLanguageModelUsage2({
3439
- inputTokens,
3440
- outputTokens
3441
- }) {
3442
- return {
3443
- promptTokens: inputTokens != null ? inputTokens : NaN,
3444
- completionTokens: outputTokens != null ? outputTokens : NaN,
3445
- totalTokens: (inputTokens != null ? inputTokens : 0) + (outputTokens != null ? outputTokens : 0)
3446
- };
3447
- }
3448
- function addLanguageModelUsage(usage1, usage2) {
3449
- return {
3450
- promptTokens: usage1.promptTokens + usage2.promptTokens,
3451
- completionTokens: usage1.completionTokens + usage2.completionTokens,
3452
- totalTokens: usage1.totalTokens + usage2.totalTokens
3453
- };
3454
- }
3455
-
3456
3438
  // core/generate-object/output-strategy.ts
3457
3439
  import {
3458
3440
  isJSONArray,
@@ -3990,7 +3972,7 @@ async function generateObject(options) {
3990
3972
  throw new NoObjectGeneratedError({
3991
3973
  message: "No object generated: the model did not return a response.",
3992
3974
  response: responseData,
3993
- usage: calculateLanguageModelUsage2(result2.usage),
3975
+ usage: result2.usage,
3994
3976
  finishReason: result2.finishReason
3995
3977
  });
3996
3978
  }
@@ -4034,7 +4016,7 @@ async function generateObject(options) {
4034
4016
  cause: parseResult.error,
4035
4017
  text: result2,
4036
4018
  response,
4037
- usage: calculateLanguageModelUsage2(usage),
4019
+ usage,
4038
4020
  finishReason
4039
4021
  });
4040
4022
  }
@@ -4043,7 +4025,7 @@ async function generateObject(options) {
4043
4025
  {
4044
4026
  text: result2,
4045
4027
  response,
4046
- usage: calculateLanguageModelUsage2(usage)
4028
+ usage
4047
4029
  }
4048
4030
  );
4049
4031
  if (!validationResult.success) {
@@ -4052,7 +4034,7 @@ async function generateObject(options) {
4052
4034
  cause: validationResult.error,
4053
4035
  text: result2,
4054
4036
  response,
4055
- usage: calculateLanguageModelUsage2(usage),
4037
+ usage,
4056
4038
  finishReason
4057
4039
  });
4058
4040
  }
@@ -4092,7 +4074,7 @@ async function generateObject(options) {
4092
4074
  return new DefaultGenerateObjectResult({
4093
4075
  object: object2,
4094
4076
  finishReason,
4095
- usage: calculateLanguageModelUsage2(usage),
4077
+ usage,
4096
4078
  warnings,
4097
4079
  request,
4098
4080
  response,
@@ -4474,7 +4456,11 @@ var DefaultStreamObjectResult = class {
4474
4456
  );
4475
4457
  self.requestPromise.resolve(request != null ? request : {});
4476
4458
  let warnings;
4477
- let usage;
4459
+ let usage = {
4460
+ inputTokens: void 0,
4461
+ outputTokens: void 0,
4462
+ totalTokens: void 0
4463
+ };
4478
4464
  let finishReason;
4479
4465
  let providerMetadata;
4480
4466
  let object2;
@@ -4554,7 +4540,7 @@ var DefaultStreamObjectResult = class {
4554
4540
  controller.enqueue({ type: "text-delta", textDelta });
4555
4541
  }
4556
4542
  finishReason = chunk.finishReason;
4557
- usage = calculateLanguageModelUsage2(chunk.usage);
4543
+ usage = chunk.usage;
4558
4544
  providerMetadata = chunk.providerMetadata;
4559
4545
  controller.enqueue({
4560
4546
  ...chunk,
@@ -4616,14 +4602,17 @@ var DefaultStreamObjectResult = class {
4616
4602
  "ai.response.id": fullResponse.id,
4617
4603
  "ai.response.model": fullResponse.modelId,
4618
4604
  "ai.response.timestamp": fullResponse.timestamp.toISOString(),
4619
- "ai.usage.promptTokens": finalUsage.promptTokens,
4620
- "ai.usage.completionTokens": finalUsage.completionTokens,
4605
+ "ai.usage.inputTokens": finalUsage.inputTokens,
4606
+ "ai.usage.outputTokens": finalUsage.outputTokens,
4607
+ "ai.usage.totalTokens": finalUsage.totalTokens,
4608
+ "ai.usage.reasoningTokens": finalUsage.reasoningTokens,
4609
+ "ai.usage.cachedInputTokens": finalUsage.cachedInputTokens,
4621
4610
  // standardized gen-ai llm span attributes:
4622
4611
  "gen_ai.response.finish_reasons": [finishReason],
4623
4612
  "gen_ai.response.id": fullResponse.id,
4624
4613
  "gen_ai.response.model": fullResponse.modelId,
4625
- "gen_ai.usage.input_tokens": finalUsage.promptTokens,
4626
- "gen_ai.usage.output_tokens": finalUsage.completionTokens
4614
+ "gen_ai.usage.input_tokens": finalUsage.inputTokens,
4615
+ "gen_ai.usage.output_tokens": finalUsage.outputTokens
4627
4616
  }
4628
4617
  })
4629
4618
  );
@@ -4632,8 +4621,11 @@ var DefaultStreamObjectResult = class {
4632
4621
  selectTelemetryAttributes({
4633
4622
  telemetry,
4634
4623
  attributes: {
4635
- "ai.usage.promptTokens": finalUsage.promptTokens,
4636
- "ai.usage.completionTokens": finalUsage.completionTokens,
4624
+ "ai.usage.inputTokens": finalUsage.inputTokens,
4625
+ "ai.usage.outputTokens": finalUsage.outputTokens,
4626
+ "ai.usage.totalTokens": finalUsage.totalTokens,
4627
+ "ai.usage.reasoningTokens": finalUsage.reasoningTokens,
4628
+ "ai.usage.cachedInputTokens": finalUsage.cachedInputTokens,
4637
4629
  "ai.response.object": {
4638
4630
  output: () => JSON.stringify(object2)
4639
4631
  }
@@ -4863,6 +4855,26 @@ function prepareToolsAndToolChoice({
4863
4855
  };
4864
4856
  }
4865
4857
 
4858
+ // core/types/usage.ts
4859
+ function addLanguageModelUsage(usage1, usage2) {
4860
+ return {
4861
+ inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),
4862
+ outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),
4863
+ totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),
4864
+ reasoningTokens: addTokenCounts(
4865
+ usage1.reasoningTokens,
4866
+ usage2.reasoningTokens
4867
+ ),
4868
+ cachedInputTokens: addTokenCounts(
4869
+ usage1.cachedInputTokens,
4870
+ usage2.cachedInputTokens
4871
+ )
4872
+ };
4873
+ }
4874
+ function addTokenCounts(tokenCount1, tokenCount2) {
4875
+ return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
4876
+ }
4877
+
4866
4878
  // core/util/split-on-last-whitespace.ts
4867
4879
  var lastWhitespaceRegexp = /^([\s\S]*?)(\s+)(\S*)$/;
4868
4880
  function splitOnLastWhitespace(text2) {
@@ -5187,9 +5199,9 @@ async function generateText({
5187
5199
  const sources = [];
5188
5200
  const steps = [];
5189
5201
  let usage = {
5190
- completionTokens: 0,
5191
- promptTokens: 0,
5192
- totalTokens: 0
5202
+ inputTokens: void 0,
5203
+ outputTokens: void 0,
5204
+ totalTokens: void 0
5193
5205
  };
5194
5206
  let stepType = "initial";
5195
5207
  do {
@@ -5330,10 +5342,7 @@ async function generateText({
5330
5342
  messages: stepInputMessages,
5331
5343
  abortSignal
5332
5344
  });
5333
- const currentUsage = calculateLanguageModelUsage2(
5334
- currentModelResponse.usage
5335
- );
5336
- usage = addLanguageModelUsage(usage, currentUsage);
5345
+ usage = addLanguageModelUsage(usage, currentModelResponse.usage);
5337
5346
  let nextStepType = "done";
5338
5347
  if (++stepCount < maxSteps) {
5339
5348
  if (continueSteps && currentModelResponse.finishReason === "length" && // only use continue when there are no tool calls:
@@ -5398,7 +5407,7 @@ async function generateText({
5398
5407
  toolCalls: currentToolCalls,
5399
5408
  toolResults: currentToolResults,
5400
5409
  finishReason: currentModelResponse.finishReason,
5401
- usage: currentUsage,
5410
+ usage: currentModelResponse.usage,
5402
5411
  warnings: currentModelResponse.warnings,
5403
5412
  request: (_e = currentModelResponse.request) != null ? _e : {},
5404
5413
  response: {
@@ -5936,6 +5945,7 @@ function runToolsTransformation({
5936
5945
  const chunkType = chunk.type;
5937
5946
  switch (chunkType) {
5938
5947
  case "stream-start":
5948
+ case "finish":
5939
5949
  case "text":
5940
5950
  case "reasoning":
5941
5951
  case "reasoning-part-finish":
@@ -6056,15 +6066,6 @@ function runToolsTransformation({
6056
6066
  }
6057
6067
  break;
6058
6068
  }
6059
- case "finish": {
6060
- finishChunk = {
6061
- type: "finish",
6062
- finishReason: chunk.finishReason,
6063
- usage: calculateLanguageModelUsage2(chunk.usage),
6064
- providerMetadata: chunk.providerMetadata
6065
- };
6066
- break;
6067
- }
6068
6069
  default: {
6069
6070
  const _exhaustiveCheck = chunkType;
6070
6071
  throw new Error(`Unhandled chunk type: ${_exhaustiveCheck}`);
@@ -6427,9 +6428,9 @@ var DefaultStreamTextResult = class {
6427
6428
  self.reasoningDetailsPromise.resolve(lastStep.reasoning);
6428
6429
  const finishReason = recordedFinishReason != null ? recordedFinishReason : "unknown";
6429
6430
  const usage = recordedUsage != null ? recordedUsage : {
6430
- completionTokens: NaN,
6431
- promptTokens: NaN,
6432
- totalTokens: NaN
6431
+ inputTokens: void 0,
6432
+ outputTokens: void 0,
6433
+ totalTokens: void 0
6433
6434
  };
6434
6435
  self.finishReasonPromise.resolve(finishReason);
6435
6436
  self.usagePromise.resolve(usage);
@@ -6465,8 +6466,11 @@ var DefaultStreamTextResult = class {
6465
6466
  return ((_a18 = lastStep.toolCalls) == null ? void 0 : _a18.length) ? JSON.stringify(lastStep.toolCalls) : void 0;
6466
6467
  }
6467
6468
  },
6468
- "ai.usage.promptTokens": usage.promptTokens,
6469
- "ai.usage.completionTokens": usage.completionTokens
6469
+ "ai.usage.inputTokens": usage.inputTokens,
6470
+ "ai.usage.outputTokens": usage.outputTokens,
6471
+ "ai.usage.totalTokens": usage.totalTokens,
6472
+ "ai.usage.reasoningTokens": usage.reasoningTokens,
6473
+ "ai.usage.cachedInputTokens": usage.cachedInputTokens
6470
6474
  }
6471
6475
  })
6472
6476
  );
@@ -6631,9 +6635,9 @@ var DefaultStreamTextResult = class {
6631
6635
  let activeReasoningPart2 = void 0;
6632
6636
  let stepFinishReason = "unknown";
6633
6637
  let stepUsage = {
6634
- promptTokens: 0,
6635
- completionTokens: 0,
6636
- totalTokens: 0
6638
+ inputTokens: void 0,
6639
+ outputTokens: void 0,
6640
+ totalTokens: void 0
6637
6641
  };
6638
6642
  let stepProviderMetadata;
6639
6643
  let stepFirstChunk = true;
@@ -6662,7 +6666,7 @@ var DefaultStreamTextResult = class {
6662
6666
  transformedStream.pipeThrough(
6663
6667
  new TransformStream({
6664
6668
  async transform(chunk, controller) {
6665
- var _a17, _b, _c;
6669
+ var _a17, _b, _c, _d;
6666
6670
  if (chunk.type === "stream-start") {
6667
6671
  warnings = chunk.warnings;
6668
6672
  return;
@@ -6758,7 +6762,7 @@ var DefaultStreamTextResult = class {
6758
6762
  doStreamSpan.addEvent("ai.stream.finish");
6759
6763
  doStreamSpan.setAttributes({
6760
6764
  "ai.response.msToFinish": msToFinish,
6761
- "ai.response.avgCompletionTokensPerSecond": 1e3 * stepUsage.completionTokens / msToFinish
6765
+ "ai.response.avgOutputTokensPerSecond": 1e3 * ((_d = stepUsage.outputTokens) != null ? _d : 0) / msToFinish
6762
6766
  });
6763
6767
  break;
6764
6768
  }
@@ -6821,14 +6825,17 @@ var DefaultStreamTextResult = class {
6821
6825
  "ai.response.id": stepResponse.id,
6822
6826
  "ai.response.model": stepResponse.modelId,
6823
6827
  "ai.response.timestamp": stepResponse.timestamp.toISOString(),
6824
- "ai.usage.promptTokens": stepUsage.promptTokens,
6825
- "ai.usage.completionTokens": stepUsage.completionTokens,
6828
+ "ai.usage.inputTokens": stepUsage.inputTokens,
6829
+ "ai.usage.outputTokens": stepUsage.outputTokens,
6830
+ "ai.usage.totalTokens": stepUsage.totalTokens,
6831
+ "ai.usage.reasoningTokens": stepUsage.reasoningTokens,
6832
+ "ai.usage.cachedInputTokens": stepUsage.cachedInputTokens,
6826
6833
  // standardized gen-ai llm span attributes:
6827
6834
  "gen_ai.response.finish_reasons": [stepFinishReason],
6828
6835
  "gen_ai.response.id": stepResponse.id,
6829
6836
  "gen_ai.response.model": stepResponse.modelId,
6830
- "gen_ai.usage.input_tokens": stepUsage.promptTokens,
6831
- "gen_ai.usage.output_tokens": stepUsage.completionTokens
6837
+ "gen_ai.usage.input_tokens": stepUsage.inputTokens,
6838
+ "gen_ai.usage.output_tokens": stepUsage.outputTokens
6832
6839
  }
6833
6840
  })
6834
6841
  );
@@ -6910,9 +6917,9 @@ var DefaultStreamTextResult = class {
6910
6917
  currentStep: 0,
6911
6918
  responseMessages: [],
6912
6919
  usage: {
6913
- promptTokens: 0,
6914
- completionTokens: 0,
6915
- totalTokens: 0
6920
+ inputTokens: void 0,
6921
+ outputTokens: void 0,
6922
+ totalTokens: void 0
6916
6923
  },
6917
6924
  previousStepText: "",
6918
6925
  stepType: "initial",
@@ -7141,8 +7148,11 @@ var DefaultStreamTextResult = class {
7141
7148
  formatDataStreamPart("finish_step", {
7142
7149
  finishReason: chunk.finishReason,
7143
7150
  usage: sendUsage ? {
7144
- promptTokens: chunk.usage.promptTokens,
7145
- completionTokens: chunk.usage.completionTokens
7151
+ inputTokens: chunk.usage.inputTokens,
7152
+ outputTokens: chunk.usage.outputTokens,
7153
+ totalTokens: chunk.usage.totalTokens,
7154
+ reasoningTokens: chunk.usage.reasoningTokens,
7155
+ cachedInputTokens: chunk.usage.cachedInputTokens
7146
7156
  } : void 0,
7147
7157
  isContinued: chunk.isContinued
7148
7158
  })
@@ -7155,8 +7165,11 @@ var DefaultStreamTextResult = class {
7155
7165
  formatDataStreamPart("finish_message", {
7156
7166
  finishReason: chunk.finishReason,
7157
7167
  usage: sendUsage ? {
7158
- promptTokens: chunk.usage.promptTokens,
7159
- completionTokens: chunk.usage.completionTokens
7168
+ inputTokens: chunk.usage.inputTokens,
7169
+ outputTokens: chunk.usage.outputTokens,
7170
+ totalTokens: chunk.usage.totalTokens,
7171
+ reasoningTokens: chunk.usage.reasoningTokens,
7172
+ cachedInputTokens: chunk.usage.cachedInputTokens
7160
7173
  } : void 0
7161
7174
  })
7162
7175
  );
@@ -7808,7 +7821,6 @@ function appendResponseMessages({
7808
7821
  if (isLastMessageAssistant) {
7809
7822
  const maxStep = extractMaxToolInvocationStep(
7810
7823
  getToolInvocations(lastMessage)
7811
- // TODO remove once Message is removed
7812
7824
  );
7813
7825
  (_a17 = lastMessage.parts) != null ? _a17 : lastMessage.parts = [];
7814
7826
  lastMessage.content = textContent;
@@ -7845,10 +7857,9 @@ function appendResponseMessages({
7845
7857
  }
7846
7858
  (_b = lastMessage.parts) != null ? _b : lastMessage.parts = [];
7847
7859
  for (const contentPart of message.content) {
7848
- const toolCall = getToolInvocations(
7849
- lastMessage
7850
- // TODO remove once Message is removed
7851
- ).find((call) => call.toolCallId === contentPart.toolCallId);
7860
+ const toolCall = getToolInvocations(lastMessage).find(
7861
+ (call) => call.toolCallId === contentPart.toolCallId
7862
+ );
7852
7863
  const toolCallPart = lastMessage.parts.find(
7853
7864
  (part) => part.type === "tool-invocation" && part.toolInvocation.toolCallId === contentPart.toolCallId
7854
7865
  );