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.js CHANGED
@@ -119,18 +119,6 @@ var import_provider_utils4 = require("@ai-sdk/provider-utils");
119
119
  // core/util/process-chat-response.ts
120
120
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
121
121
 
122
- // core/types/duplicated/usage.ts
123
- function calculateLanguageModelUsage({
124
- promptTokens,
125
- completionTokens
126
- }) {
127
- return {
128
- promptTokens,
129
- completionTokens,
130
- totalTokens: promptTokens + completionTokens
131
- };
132
- }
133
-
134
122
  // core/ui/get-tool-invocations.ts
135
123
  function getToolInvocations(message) {
136
124
  return message.parts.filter(
@@ -596,10 +584,13 @@ var finishMessageStreamPart = {
596
584
  const result = {
597
585
  finishReason: value.finishReason
598
586
  };
599
- if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) {
587
+ if ("usage" in value && value.usage != null && typeof value.usage === "object") {
600
588
  result.usage = {
601
- promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : Number.NaN,
602
- completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : Number.NaN
589
+ inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
590
+ outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
591
+ totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
592
+ reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
593
+ cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
603
594
  };
604
595
  }
605
596
  return {
@@ -621,10 +612,13 @@ var finishStepStreamPart = {
621
612
  finishReason: value.finishReason,
622
613
  isContinued: false
623
614
  };
624
- if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) {
615
+ if ("usage" in value && value.usage != null && typeof value.usage === "object") {
625
616
  result.usage = {
626
- promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : Number.NaN,
627
- completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : Number.NaN
617
+ inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
618
+ outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
619
+ totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
620
+ reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
621
+ cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
628
622
  };
629
623
  }
630
624
  if ("isContinued" in value && typeof value.isContinued === "boolean") {
@@ -897,9 +891,9 @@ async function processChatResponse({
897
891
  let messageAnnotations = replaceLastMessage ? lastMessage == null ? void 0 : lastMessage.annotations : void 0;
898
892
  const partialToolCalls = {};
899
893
  let usage = {
900
- completionTokens: NaN,
901
- promptTokens: NaN,
902
- totalTokens: NaN
894
+ inputTokens: void 0,
895
+ outputTokens: void 0,
896
+ totalTokens: void 0
903
897
  };
904
898
  let finishReason = "unknown";
905
899
  function execUpdate() {
@@ -1072,7 +1066,7 @@ async function processChatResponse({
1072
1066
  onFinishMessagePart(value) {
1073
1067
  finishReason = value.finishReason;
1074
1068
  if (value.usage != null) {
1075
- usage = calculateLanguageModelUsage(value.usage);
1069
+ usage = value.usage;
1076
1070
  }
1077
1071
  },
1078
1072
  onErrorPart(error) {
@@ -1129,7 +1123,11 @@ async function processChatTextResponse({
1129
1123
  }
1130
1124
  });
1131
1125
  onFinish == null ? void 0 : onFinish(resultMessage, {
1132
- usage: { completionTokens: NaN, promptTokens: NaN, totalTokens: NaN },
1126
+ usage: {
1127
+ inputTokens: void 0,
1128
+ outputTokens: void 0,
1129
+ totalTokens: void 0
1130
+ },
1133
1131
  finishReason: "unknown"
1134
1132
  });
1135
1133
  }
@@ -1143,7 +1141,6 @@ async function callChatApi({
1143
1141
  credentials,
1144
1142
  headers,
1145
1143
  abortController,
1146
- restoreMessagesOnFailure,
1147
1144
  onResponse,
1148
1145
  onUpdate,
1149
1146
  onFinish,
@@ -1155,7 +1152,7 @@ async function callChatApi({
1155
1152
  requestType = "generate"
1156
1153
  }) {
1157
1154
  var _a17, _b, _c;
1158
- const request = requestType === "resume" ? fetch2(`${api}?chatId=${body.id}`, {
1155
+ const response = requestType === "resume" ? await fetch2(`${api}?chatId=${body.id}`, {
1159
1156
  method: "GET",
1160
1157
  headers: {
1161
1158
  "Content-Type": "application/json",
@@ -1163,7 +1160,7 @@ async function callChatApi({
1163
1160
  },
1164
1161
  signal: (_a17 = abortController == null ? void 0 : abortController()) == null ? void 0 : _a17.signal,
1165
1162
  credentials
1166
- }) : fetch2(api, {
1163
+ }) : await fetch2(api, {
1167
1164
  method: "POST",
1168
1165
  body: JSON.stringify(body),
1169
1166
  headers: {
@@ -1173,19 +1170,10 @@ async function callChatApi({
1173
1170
  signal: (_b = abortController == null ? void 0 : abortController()) == null ? void 0 : _b.signal,
1174
1171
  credentials
1175
1172
  });
1176
- const response = await request.catch((err) => {
1177
- restoreMessagesOnFailure();
1178
- throw err;
1179
- });
1180
- if (onResponse) {
1181
- try {
1182
- await onResponse(response);
1183
- } catch (err) {
1184
- throw err;
1185
- }
1173
+ if (onResponse != null) {
1174
+ await onResponse(response);
1186
1175
  }
1187
1176
  if (!response.ok) {
1188
- restoreMessagesOnFailure();
1189
1177
  throw new Error(
1190
1178
  (_c = await response.text()) != null ? _c : "Failed to fetch the chat response."
1191
1179
  );
@@ -1199,7 +1187,8 @@ async function callChatApi({
1199
1187
  stream: response.body,
1200
1188
  update: onUpdate,
1201
1189
  onFinish,
1202
- generateId: generateId3
1190
+ generateId: generateId3,
1191
+ getCurrentDate
1203
1192
  });
1204
1193
  return;
1205
1194
  }
@@ -2094,6 +2083,7 @@ function splitArray(array, chunkSize) {
2094
2083
  async function embedMany({
2095
2084
  model,
2096
2085
  values,
2086
+ maxParallelCalls = Infinity,
2097
2087
  maxRetries: maxRetriesArg,
2098
2088
  abortSignal,
2099
2089
  headers,
@@ -2123,7 +2113,10 @@ async function embedMany({
2123
2113
  }),
2124
2114
  tracer,
2125
2115
  fn: async (span) => {
2126
- const maxEmbeddingsPerCall = await model.maxEmbeddingsPerCall;
2116
+ const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([
2117
+ model.maxEmbeddingsPerCall,
2118
+ model.supportsParallelCalls
2119
+ ]);
2127
2120
  if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {
2128
2121
  const { embeddings: embeddings2, usage, response } = await retry(() => {
2129
2122
  return recordSpan({
@@ -2194,61 +2187,69 @@ async function embedMany({
2194
2187
  const embeddings = [];
2195
2188
  const responses = [];
2196
2189
  let tokens = 0;
2197
- for (const chunk of valueChunks) {
2198
- const {
2199
- embeddings: responseEmbeddings,
2200
- usage,
2201
- response
2202
- } = await retry(() => {
2203
- return recordSpan({
2204
- name: "ai.embedMany.doEmbed",
2205
- attributes: selectTelemetryAttributes({
2206
- telemetry,
2207
- attributes: {
2208
- ...assembleOperationName({
2209
- operationId: "ai.embedMany.doEmbed",
2210
- telemetry
2211
- }),
2212
- ...baseTelemetryAttributes,
2213
- // specific settings that only make sense on the outer level:
2214
- "ai.values": {
2215
- input: () => chunk.map((value) => JSON.stringify(value))
2216
- }
2217
- }
2218
- }),
2219
- tracer,
2220
- fn: async (doEmbedSpan) => {
2221
- var _a17;
2222
- const modelResponse = await model.doEmbed({
2223
- values: chunk,
2224
- abortSignal,
2225
- headers,
2226
- providerOptions
2227
- });
2228
- const embeddings2 = modelResponse.embeddings;
2229
- const usage2 = (_a17 = modelResponse.usage) != null ? _a17 : { tokens: NaN };
2230
- doEmbedSpan.setAttributes(
2231
- selectTelemetryAttributes({
2190
+ const parallelChunks = splitArray(
2191
+ valueChunks,
2192
+ supportsParallelCalls ? maxParallelCalls : 1
2193
+ );
2194
+ for (const parallelChunk of parallelChunks) {
2195
+ const results = await Promise.all(
2196
+ parallelChunk.map((chunk) => {
2197
+ return retry(() => {
2198
+ return recordSpan({
2199
+ name: "ai.embedMany.doEmbed",
2200
+ attributes: selectTelemetryAttributes({
2232
2201
  telemetry,
2233
2202
  attributes: {
2234
- "ai.embeddings": {
2235
- output: () => embeddings2.map((embedding) => JSON.stringify(embedding))
2236
- },
2237
- "ai.usage.tokens": usage2.tokens
2203
+ ...assembleOperationName({
2204
+ operationId: "ai.embedMany.doEmbed",
2205
+ telemetry
2206
+ }),
2207
+ ...baseTelemetryAttributes,
2208
+ // specific settings that only make sense on the outer level:
2209
+ "ai.values": {
2210
+ input: () => chunk.map((value) => JSON.stringify(value))
2211
+ }
2238
2212
  }
2239
- })
2240
- );
2241
- return {
2242
- embeddings: embeddings2,
2243
- usage: usage2,
2244
- response: modelResponse.response
2245
- };
2246
- }
2247
- });
2248
- });
2249
- embeddings.push(...responseEmbeddings);
2250
- responses.push(response);
2251
- tokens += usage.tokens;
2213
+ }),
2214
+ tracer,
2215
+ fn: async (doEmbedSpan) => {
2216
+ var _a17;
2217
+ const modelResponse = await model.doEmbed({
2218
+ values: chunk,
2219
+ abortSignal,
2220
+ headers,
2221
+ providerOptions
2222
+ });
2223
+ const embeddings2 = modelResponse.embeddings;
2224
+ const usage = (_a17 = modelResponse.usage) != null ? _a17 : { tokens: NaN };
2225
+ doEmbedSpan.setAttributes(
2226
+ selectTelemetryAttributes({
2227
+ telemetry,
2228
+ attributes: {
2229
+ "ai.embeddings": {
2230
+ output: () => embeddings2.map(
2231
+ (embedding) => JSON.stringify(embedding)
2232
+ )
2233
+ },
2234
+ "ai.usage.tokens": usage.tokens
2235
+ }
2236
+ })
2237
+ );
2238
+ return {
2239
+ embeddings: embeddings2,
2240
+ usage,
2241
+ response: modelResponse.response
2242
+ };
2243
+ }
2244
+ });
2245
+ });
2246
+ })
2247
+ );
2248
+ for (const result of results) {
2249
+ embeddings.push(...result.embeddings);
2250
+ responses.push(result.response);
2251
+ tokens += result.usage.tokens;
2252
+ }
2252
2253
  }
2253
2254
  span.setAttributes(
2254
2255
  selectTelemetryAttributes({
@@ -3527,25 +3528,6 @@ async function standardizePrompt({
3527
3528
  throw new Error("unreachable");
3528
3529
  }
3529
3530
 
3530
- // core/types/usage.ts
3531
- function calculateLanguageModelUsage2({
3532
- inputTokens,
3533
- outputTokens
3534
- }) {
3535
- return {
3536
- promptTokens: inputTokens != null ? inputTokens : NaN,
3537
- completionTokens: outputTokens != null ? outputTokens : NaN,
3538
- totalTokens: (inputTokens != null ? inputTokens : 0) + (outputTokens != null ? outputTokens : 0)
3539
- };
3540
- }
3541
- function addLanguageModelUsage(usage1, usage2) {
3542
- return {
3543
- promptTokens: usage1.promptTokens + usage2.promptTokens,
3544
- completionTokens: usage1.completionTokens + usage2.completionTokens,
3545
- totalTokens: usage1.totalTokens + usage2.totalTokens
3546
- };
3547
- }
3548
-
3549
3531
  // core/generate-object/output-strategy.ts
3550
3532
  var import_provider12 = require("@ai-sdk/provider");
3551
3533
  var import_provider_utils11 = require("@ai-sdk/provider-utils");
@@ -4078,7 +4060,7 @@ async function generateObject(options) {
4078
4060
  throw new NoObjectGeneratedError({
4079
4061
  message: "No object generated: the model did not return a response.",
4080
4062
  response: responseData,
4081
- usage: calculateLanguageModelUsage2(result2.usage),
4063
+ usage: result2.usage,
4082
4064
  finishReason: result2.finishReason
4083
4065
  });
4084
4066
  }
@@ -4122,7 +4104,7 @@ async function generateObject(options) {
4122
4104
  cause: parseResult.error,
4123
4105
  text: result2,
4124
4106
  response,
4125
- usage: calculateLanguageModelUsage2(usage),
4107
+ usage,
4126
4108
  finishReason
4127
4109
  });
4128
4110
  }
@@ -4131,7 +4113,7 @@ async function generateObject(options) {
4131
4113
  {
4132
4114
  text: result2,
4133
4115
  response,
4134
- usage: calculateLanguageModelUsage2(usage)
4116
+ usage
4135
4117
  }
4136
4118
  );
4137
4119
  if (!validationResult.success) {
@@ -4140,7 +4122,7 @@ async function generateObject(options) {
4140
4122
  cause: validationResult.error,
4141
4123
  text: result2,
4142
4124
  response,
4143
- usage: calculateLanguageModelUsage2(usage),
4125
+ usage,
4144
4126
  finishReason
4145
4127
  });
4146
4128
  }
@@ -4180,7 +4162,7 @@ async function generateObject(options) {
4180
4162
  return new DefaultGenerateObjectResult({
4181
4163
  object: object2,
4182
4164
  finishReason,
4183
- usage: calculateLanguageModelUsage2(usage),
4165
+ usage,
4184
4166
  warnings,
4185
4167
  request,
4186
4168
  response,
@@ -4562,7 +4544,11 @@ var DefaultStreamObjectResult = class {
4562
4544
  );
4563
4545
  self.requestPromise.resolve(request != null ? request : {});
4564
4546
  let warnings;
4565
- let usage;
4547
+ let usage = {
4548
+ inputTokens: void 0,
4549
+ outputTokens: void 0,
4550
+ totalTokens: void 0
4551
+ };
4566
4552
  let finishReason;
4567
4553
  let providerMetadata;
4568
4554
  let object2;
@@ -4642,7 +4628,7 @@ var DefaultStreamObjectResult = class {
4642
4628
  controller.enqueue({ type: "text-delta", textDelta });
4643
4629
  }
4644
4630
  finishReason = chunk.finishReason;
4645
- usage = calculateLanguageModelUsage2(chunk.usage);
4631
+ usage = chunk.usage;
4646
4632
  providerMetadata = chunk.providerMetadata;
4647
4633
  controller.enqueue({
4648
4634
  ...chunk,
@@ -4704,14 +4690,17 @@ var DefaultStreamObjectResult = class {
4704
4690
  "ai.response.id": fullResponse.id,
4705
4691
  "ai.response.model": fullResponse.modelId,
4706
4692
  "ai.response.timestamp": fullResponse.timestamp.toISOString(),
4707
- "ai.usage.promptTokens": finalUsage.promptTokens,
4708
- "ai.usage.completionTokens": finalUsage.completionTokens,
4693
+ "ai.usage.inputTokens": finalUsage.inputTokens,
4694
+ "ai.usage.outputTokens": finalUsage.outputTokens,
4695
+ "ai.usage.totalTokens": finalUsage.totalTokens,
4696
+ "ai.usage.reasoningTokens": finalUsage.reasoningTokens,
4697
+ "ai.usage.cachedInputTokens": finalUsage.cachedInputTokens,
4709
4698
  // standardized gen-ai llm span attributes:
4710
4699
  "gen_ai.response.finish_reasons": [finishReason],
4711
4700
  "gen_ai.response.id": fullResponse.id,
4712
4701
  "gen_ai.response.model": fullResponse.modelId,
4713
- "gen_ai.usage.input_tokens": finalUsage.promptTokens,
4714
- "gen_ai.usage.output_tokens": finalUsage.completionTokens
4702
+ "gen_ai.usage.input_tokens": finalUsage.inputTokens,
4703
+ "gen_ai.usage.output_tokens": finalUsage.outputTokens
4715
4704
  }
4716
4705
  })
4717
4706
  );
@@ -4720,8 +4709,11 @@ var DefaultStreamObjectResult = class {
4720
4709
  selectTelemetryAttributes({
4721
4710
  telemetry,
4722
4711
  attributes: {
4723
- "ai.usage.promptTokens": finalUsage.promptTokens,
4724
- "ai.usage.completionTokens": finalUsage.completionTokens,
4712
+ "ai.usage.inputTokens": finalUsage.inputTokens,
4713
+ "ai.usage.outputTokens": finalUsage.outputTokens,
4714
+ "ai.usage.totalTokens": finalUsage.totalTokens,
4715
+ "ai.usage.reasoningTokens": finalUsage.reasoningTokens,
4716
+ "ai.usage.cachedInputTokens": finalUsage.cachedInputTokens,
4725
4717
  "ai.response.object": {
4726
4718
  output: () => JSON.stringify(object2)
4727
4719
  }
@@ -4951,6 +4943,26 @@ function prepareToolsAndToolChoice({
4951
4943
  };
4952
4944
  }
4953
4945
 
4946
+ // core/types/usage.ts
4947
+ function addLanguageModelUsage(usage1, usage2) {
4948
+ return {
4949
+ inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),
4950
+ outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),
4951
+ totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),
4952
+ reasoningTokens: addTokenCounts(
4953
+ usage1.reasoningTokens,
4954
+ usage2.reasoningTokens
4955
+ ),
4956
+ cachedInputTokens: addTokenCounts(
4957
+ usage1.cachedInputTokens,
4958
+ usage2.cachedInputTokens
4959
+ )
4960
+ };
4961
+ }
4962
+ function addTokenCounts(tokenCount1, tokenCount2) {
4963
+ return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
4964
+ }
4965
+
4954
4966
  // core/util/split-on-last-whitespace.ts
4955
4967
  var lastWhitespaceRegexp = /^([\s\S]*?)(\s+)(\S*)$/;
4956
4968
  function splitOnLastWhitespace(text2) {
@@ -5275,9 +5287,9 @@ async function generateText({
5275
5287
  const sources = [];
5276
5288
  const steps = [];
5277
5289
  let usage = {
5278
- completionTokens: 0,
5279
- promptTokens: 0,
5280
- totalTokens: 0
5290
+ inputTokens: void 0,
5291
+ outputTokens: void 0,
5292
+ totalTokens: void 0
5281
5293
  };
5282
5294
  let stepType = "initial";
5283
5295
  do {
@@ -5418,10 +5430,7 @@ async function generateText({
5418
5430
  messages: stepInputMessages,
5419
5431
  abortSignal
5420
5432
  });
5421
- const currentUsage = calculateLanguageModelUsage2(
5422
- currentModelResponse.usage
5423
- );
5424
- usage = addLanguageModelUsage(usage, currentUsage);
5433
+ usage = addLanguageModelUsage(usage, currentModelResponse.usage);
5425
5434
  let nextStepType = "done";
5426
5435
  if (++stepCount < maxSteps) {
5427
5436
  if (continueSteps && currentModelResponse.finishReason === "length" && // only use continue when there are no tool calls:
@@ -5486,7 +5495,7 @@ async function generateText({
5486
5495
  toolCalls: currentToolCalls,
5487
5496
  toolResults: currentToolResults,
5488
5497
  finishReason: currentModelResponse.finishReason,
5489
- usage: currentUsage,
5498
+ usage: currentModelResponse.usage,
5490
5499
  warnings: currentModelResponse.warnings,
5491
5500
  request: (_e = currentModelResponse.request) != null ? _e : {},
5492
5501
  response: {
@@ -6012,6 +6021,7 @@ function runToolsTransformation({
6012
6021
  const chunkType = chunk.type;
6013
6022
  switch (chunkType) {
6014
6023
  case "stream-start":
6024
+ case "finish":
6015
6025
  case "text":
6016
6026
  case "reasoning":
6017
6027
  case "reasoning-part-finish":
@@ -6132,15 +6142,6 @@ function runToolsTransformation({
6132
6142
  }
6133
6143
  break;
6134
6144
  }
6135
- case "finish": {
6136
- finishChunk = {
6137
- type: "finish",
6138
- finishReason: chunk.finishReason,
6139
- usage: calculateLanguageModelUsage2(chunk.usage),
6140
- providerMetadata: chunk.providerMetadata
6141
- };
6142
- break;
6143
- }
6144
6145
  default: {
6145
6146
  const _exhaustiveCheck = chunkType;
6146
6147
  throw new Error(`Unhandled chunk type: ${_exhaustiveCheck}`);
@@ -6503,9 +6504,9 @@ var DefaultStreamTextResult = class {
6503
6504
  self.reasoningDetailsPromise.resolve(lastStep.reasoning);
6504
6505
  const finishReason = recordedFinishReason != null ? recordedFinishReason : "unknown";
6505
6506
  const usage = recordedUsage != null ? recordedUsage : {
6506
- completionTokens: NaN,
6507
- promptTokens: NaN,
6508
- totalTokens: NaN
6507
+ inputTokens: void 0,
6508
+ outputTokens: void 0,
6509
+ totalTokens: void 0
6509
6510
  };
6510
6511
  self.finishReasonPromise.resolve(finishReason);
6511
6512
  self.usagePromise.resolve(usage);
@@ -6541,8 +6542,11 @@ var DefaultStreamTextResult = class {
6541
6542
  return ((_a18 = lastStep.toolCalls) == null ? void 0 : _a18.length) ? JSON.stringify(lastStep.toolCalls) : void 0;
6542
6543
  }
6543
6544
  },
6544
- "ai.usage.promptTokens": usage.promptTokens,
6545
- "ai.usage.completionTokens": usage.completionTokens
6545
+ "ai.usage.inputTokens": usage.inputTokens,
6546
+ "ai.usage.outputTokens": usage.outputTokens,
6547
+ "ai.usage.totalTokens": usage.totalTokens,
6548
+ "ai.usage.reasoningTokens": usage.reasoningTokens,
6549
+ "ai.usage.cachedInputTokens": usage.cachedInputTokens
6546
6550
  }
6547
6551
  })
6548
6552
  );
@@ -6707,9 +6711,9 @@ var DefaultStreamTextResult = class {
6707
6711
  let activeReasoningPart2 = void 0;
6708
6712
  let stepFinishReason = "unknown";
6709
6713
  let stepUsage = {
6710
- promptTokens: 0,
6711
- completionTokens: 0,
6712
- totalTokens: 0
6714
+ inputTokens: void 0,
6715
+ outputTokens: void 0,
6716
+ totalTokens: void 0
6713
6717
  };
6714
6718
  let stepProviderMetadata;
6715
6719
  let stepFirstChunk = true;
@@ -6738,7 +6742,7 @@ var DefaultStreamTextResult = class {
6738
6742
  transformedStream.pipeThrough(
6739
6743
  new TransformStream({
6740
6744
  async transform(chunk, controller) {
6741
- var _a17, _b, _c;
6745
+ var _a17, _b, _c, _d;
6742
6746
  if (chunk.type === "stream-start") {
6743
6747
  warnings = chunk.warnings;
6744
6748
  return;
@@ -6834,7 +6838,7 @@ var DefaultStreamTextResult = class {
6834
6838
  doStreamSpan.addEvent("ai.stream.finish");
6835
6839
  doStreamSpan.setAttributes({
6836
6840
  "ai.response.msToFinish": msToFinish,
6837
- "ai.response.avgCompletionTokensPerSecond": 1e3 * stepUsage.completionTokens / msToFinish
6841
+ "ai.response.avgOutputTokensPerSecond": 1e3 * ((_d = stepUsage.outputTokens) != null ? _d : 0) / msToFinish
6838
6842
  });
6839
6843
  break;
6840
6844
  }
@@ -6897,14 +6901,17 @@ var DefaultStreamTextResult = class {
6897
6901
  "ai.response.id": stepResponse.id,
6898
6902
  "ai.response.model": stepResponse.modelId,
6899
6903
  "ai.response.timestamp": stepResponse.timestamp.toISOString(),
6900
- "ai.usage.promptTokens": stepUsage.promptTokens,
6901
- "ai.usage.completionTokens": stepUsage.completionTokens,
6904
+ "ai.usage.inputTokens": stepUsage.inputTokens,
6905
+ "ai.usage.outputTokens": stepUsage.outputTokens,
6906
+ "ai.usage.totalTokens": stepUsage.totalTokens,
6907
+ "ai.usage.reasoningTokens": stepUsage.reasoningTokens,
6908
+ "ai.usage.cachedInputTokens": stepUsage.cachedInputTokens,
6902
6909
  // standardized gen-ai llm span attributes:
6903
6910
  "gen_ai.response.finish_reasons": [stepFinishReason],
6904
6911
  "gen_ai.response.id": stepResponse.id,
6905
6912
  "gen_ai.response.model": stepResponse.modelId,
6906
- "gen_ai.usage.input_tokens": stepUsage.promptTokens,
6907
- "gen_ai.usage.output_tokens": stepUsage.completionTokens
6913
+ "gen_ai.usage.input_tokens": stepUsage.inputTokens,
6914
+ "gen_ai.usage.output_tokens": stepUsage.outputTokens
6908
6915
  }
6909
6916
  })
6910
6917
  );
@@ -6986,9 +6993,9 @@ var DefaultStreamTextResult = class {
6986
6993
  currentStep: 0,
6987
6994
  responseMessages: [],
6988
6995
  usage: {
6989
- promptTokens: 0,
6990
- completionTokens: 0,
6991
- totalTokens: 0
6996
+ inputTokens: void 0,
6997
+ outputTokens: void 0,
6998
+ totalTokens: void 0
6992
6999
  },
6993
7000
  previousStepText: "",
6994
7001
  stepType: "initial",
@@ -7217,8 +7224,11 @@ var DefaultStreamTextResult = class {
7217
7224
  formatDataStreamPart("finish_step", {
7218
7225
  finishReason: chunk.finishReason,
7219
7226
  usage: sendUsage ? {
7220
- promptTokens: chunk.usage.promptTokens,
7221
- completionTokens: chunk.usage.completionTokens
7227
+ inputTokens: chunk.usage.inputTokens,
7228
+ outputTokens: chunk.usage.outputTokens,
7229
+ totalTokens: chunk.usage.totalTokens,
7230
+ reasoningTokens: chunk.usage.reasoningTokens,
7231
+ cachedInputTokens: chunk.usage.cachedInputTokens
7222
7232
  } : void 0,
7223
7233
  isContinued: chunk.isContinued
7224
7234
  })
@@ -7231,8 +7241,11 @@ var DefaultStreamTextResult = class {
7231
7241
  formatDataStreamPart("finish_message", {
7232
7242
  finishReason: chunk.finishReason,
7233
7243
  usage: sendUsage ? {
7234
- promptTokens: chunk.usage.promptTokens,
7235
- completionTokens: chunk.usage.completionTokens
7244
+ inputTokens: chunk.usage.inputTokens,
7245
+ outputTokens: chunk.usage.outputTokens,
7246
+ totalTokens: chunk.usage.totalTokens,
7247
+ reasoningTokens: chunk.usage.reasoningTokens,
7248
+ cachedInputTokens: chunk.usage.cachedInputTokens
7236
7249
  } : void 0
7237
7250
  })
7238
7251
  );
@@ -7884,7 +7897,6 @@ function appendResponseMessages({
7884
7897
  if (isLastMessageAssistant) {
7885
7898
  const maxStep = extractMaxToolInvocationStep(
7886
7899
  getToolInvocations(lastMessage)
7887
- // TODO remove once Message is removed
7888
7900
  );
7889
7901
  (_a17 = lastMessage.parts) != null ? _a17 : lastMessage.parts = [];
7890
7902
  lastMessage.content = textContent;
@@ -7921,10 +7933,9 @@ function appendResponseMessages({
7921
7933
  }
7922
7934
  (_b = lastMessage.parts) != null ? _b : lastMessage.parts = [];
7923
7935
  for (const contentPart of message.content) {
7924
- const toolCall = getToolInvocations(
7925
- lastMessage
7926
- // TODO remove once Message is removed
7927
- ).find((call) => call.toolCallId === contentPart.toolCallId);
7936
+ const toolCall = getToolInvocations(lastMessage).find(
7937
+ (call) => call.toolCallId === contentPart.toolCallId
7938
+ );
7928
7939
  const toolCallPart = lastMessage.parts.find(
7929
7940
  (part) => part.type === "tool-invocation" && part.toolInvocation.toolCallId === contentPart.toolCallId
7930
7941
  );