ai 5.0.0-beta.20 → 5.0.0-beta.22

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
@@ -108,7 +108,8 @@ __export(src_exports, {
108
108
  tool: () => import_provider_utils23.tool,
109
109
  toolModelMessageSchema: () => toolModelMessageSchema,
110
110
  userModelMessageSchema: () => userModelMessageSchema,
111
- wrapLanguageModel: () => wrapLanguageModel
111
+ wrapLanguageModel: () => wrapLanguageModel,
112
+ wrapProvider: () => wrapProvider
112
113
  });
113
114
  module.exports = __toCommonJS(src_exports);
114
115
  var import_provider_utils29 = require("@ai-sdk/provider-utils");
@@ -1874,7 +1875,11 @@ function toResponseMessages({
1874
1875
  ).filter((part) => part.type !== "text" || part.text.length > 0).map((part) => {
1875
1876
  switch (part.type) {
1876
1877
  case "text":
1877
- return part;
1878
+ return {
1879
+ type: "text",
1880
+ text: part.text,
1881
+ providerOptions: part.providerMetadata
1882
+ };
1878
1883
  case "reasoning":
1879
1884
  return {
1880
1885
  type: "reasoning",
@@ -2616,16 +2621,19 @@ var import_v47 = require("zod/v4");
2616
2621
  var uiMessageChunkSchema = import_v47.z.union([
2617
2622
  import_v47.z.strictObject({
2618
2623
  type: import_v47.z.literal("text-start"),
2619
- id: import_v47.z.string()
2624
+ id: import_v47.z.string(),
2625
+ providerMetadata: providerMetadataSchema.optional()
2620
2626
  }),
2621
2627
  import_v47.z.strictObject({
2622
2628
  type: import_v47.z.literal("text-delta"),
2623
2629
  id: import_v47.z.string(),
2624
- delta: import_v47.z.string()
2630
+ delta: import_v47.z.string(),
2631
+ providerMetadata: providerMetadataSchema.optional()
2625
2632
  }),
2626
2633
  import_v47.z.strictObject({
2627
2634
  type: import_v47.z.literal("text-end"),
2628
- id: import_v47.z.string()
2635
+ id: import_v47.z.string(),
2636
+ providerMetadata: providerMetadataSchema.optional()
2629
2637
  }),
2630
2638
  import_v47.z.strictObject({
2631
2639
  type: import_v47.z.literal("error"),
@@ -2647,7 +2655,8 @@ var uiMessageChunkSchema = import_v47.z.union([
2647
2655
  toolCallId: import_v47.z.string(),
2648
2656
  toolName: import_v47.z.string(),
2649
2657
  input: import_v47.z.unknown(),
2650
- providerExecuted: import_v47.z.boolean().optional()
2658
+ providerExecuted: import_v47.z.boolean().optional(),
2659
+ providerMetadata: providerMetadataSchema.optional()
2651
2660
  }),
2652
2661
  import_v47.z.strictObject({
2653
2662
  type: import_v47.z.literal("tool-output-available"),
@@ -2664,23 +2673,23 @@ var uiMessageChunkSchema = import_v47.z.union([
2664
2673
  import_v47.z.strictObject({
2665
2674
  type: import_v47.z.literal("reasoning"),
2666
2675
  text: import_v47.z.string(),
2667
- providerMetadata: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional()
2676
+ providerMetadata: providerMetadataSchema.optional()
2668
2677
  }),
2669
2678
  import_v47.z.strictObject({
2670
2679
  type: import_v47.z.literal("reasoning-start"),
2671
2680
  id: import_v47.z.string(),
2672
- providerMetadata: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional()
2681
+ providerMetadata: providerMetadataSchema.optional()
2673
2682
  }),
2674
2683
  import_v47.z.strictObject({
2675
2684
  type: import_v47.z.literal("reasoning-delta"),
2676
2685
  id: import_v47.z.string(),
2677
2686
  delta: import_v47.z.string(),
2678
- providerMetadata: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional()
2687
+ providerMetadata: providerMetadataSchema.optional()
2679
2688
  }),
2680
2689
  import_v47.z.strictObject({
2681
2690
  type: import_v47.z.literal("reasoning-end"),
2682
2691
  id: import_v47.z.string(),
2683
- providerMetadata: import_v47.z.record(import_v47.z.string(), import_v47.z.any()).optional()
2692
+ providerMetadata: providerMetadataSchema.optional()
2684
2693
  }),
2685
2694
  import_v47.z.strictObject({
2686
2695
  type: import_v47.z.literal("reasoning-part-finish")
@@ -2690,8 +2699,7 @@ var uiMessageChunkSchema = import_v47.z.union([
2690
2699
  sourceId: import_v47.z.string(),
2691
2700
  url: import_v47.z.string(),
2692
2701
  title: import_v47.z.string().optional(),
2693
- providerMetadata: import_v47.z.any().optional()
2694
- // Use z.any() for generic metadata
2702
+ providerMetadata: providerMetadataSchema.optional()
2695
2703
  }),
2696
2704
  import_v47.z.strictObject({
2697
2705
  type: import_v47.z.literal("source-document"),
@@ -2699,13 +2707,13 @@ var uiMessageChunkSchema = import_v47.z.union([
2699
2707
  mediaType: import_v47.z.string(),
2700
2708
  title: import_v47.z.string(),
2701
2709
  filename: import_v47.z.string().optional(),
2702
- providerMetadata: import_v47.z.any().optional()
2703
- // Use z.any() for generic metadata
2710
+ providerMetadata: providerMetadataSchema.optional()
2704
2711
  }),
2705
2712
  import_v47.z.strictObject({
2706
2713
  type: import_v47.z.literal("file"),
2707
2714
  url: import_v47.z.string(),
2708
- mediaType: import_v47.z.string()
2715
+ mediaType: import_v47.z.string(),
2716
+ providerMetadata: providerMetadataSchema.optional()
2709
2717
  }),
2710
2718
  import_v47.z.strictObject({
2711
2719
  type: import_v47.z.string().startsWith("data-"),
@@ -3143,22 +3151,25 @@ function processUIMessageStream({
3143
3151
  }) {
3144
3152
  return stream.pipeThrough(
3145
3153
  new TransformStream({
3146
- async transform(part, controller) {
3154
+ async transform(chunk, controller) {
3147
3155
  await runUpdateMessageJob(async ({ state, write }) => {
3148
- var _a16, _b;
3156
+ var _a16, _b, _c, _d;
3149
3157
  function updateToolInvocationPart(options) {
3150
3158
  var _a17;
3151
- const part2 = state.message.parts.find(
3152
- (part3) => isToolUIPart(part3) && part3.toolCallId === options.toolCallId
3159
+ const part = state.message.parts.find(
3160
+ (part2) => isToolUIPart(part2) && part2.toolCallId === options.toolCallId
3153
3161
  );
3154
3162
  const anyOptions = options;
3155
- const anyPart = part2;
3156
- if (part2 != null) {
3157
- part2.state = options.state;
3163
+ const anyPart = part;
3164
+ if (part != null) {
3165
+ part.state = options.state;
3158
3166
  anyPart.input = anyOptions.input;
3159
3167
  anyPart.output = anyOptions.output;
3160
3168
  anyPart.errorText = anyOptions.errorText;
3161
- anyPart.providerExecuted = (_a17 = anyOptions.providerExecuted) != null ? _a17 : part2.providerExecuted;
3169
+ anyPart.providerExecuted = (_a17 = anyOptions.providerExecuted) != null ? _a17 : part.providerExecuted;
3170
+ if (anyOptions.providerMetadata != null && part.state === "input-available") {
3171
+ part.callProviderMetadata = anyOptions.providerMetadata;
3172
+ }
3162
3173
  } else {
3163
3174
  state.message.parts.push({
3164
3175
  type: `tool-${options.toolName}`,
@@ -3167,7 +3178,8 @@ function processUIMessageStream({
3167
3178
  input: anyOptions.input,
3168
3179
  output: anyOptions.output,
3169
3180
  errorText: anyOptions.errorText,
3170
- providerExecuted: anyOptions.providerExecuted
3181
+ providerExecuted: anyOptions.providerExecuted,
3182
+ ...anyOptions.providerMetadata != null ? { callProviderMetadata: anyOptions.providerMetadata } : {}
3171
3183
  });
3172
3184
  }
3173
3185
  }
@@ -3183,27 +3195,31 @@ function processUIMessageStream({
3183
3195
  state.message.metadata = mergedMetadata;
3184
3196
  }
3185
3197
  }
3186
- switch (part.type) {
3198
+ switch (chunk.type) {
3187
3199
  case "text-start": {
3188
3200
  const textPart = {
3189
3201
  type: "text",
3190
3202
  text: "",
3203
+ providerMetadata: chunk.providerMetadata,
3191
3204
  state: "streaming"
3192
3205
  };
3193
- state.activeTextParts[part.id] = textPart;
3206
+ state.activeTextParts[chunk.id] = textPart;
3194
3207
  state.message.parts.push(textPart);
3195
3208
  write();
3196
3209
  break;
3197
3210
  }
3198
3211
  case "text-delta": {
3199
- state.activeTextParts[part.id].text += part.delta;
3212
+ const textPart = state.activeTextParts[chunk.id];
3213
+ textPart.text += chunk.delta;
3214
+ textPart.providerMetadata = (_a16 = chunk.providerMetadata) != null ? _a16 : textPart.providerMetadata;
3200
3215
  write();
3201
3216
  break;
3202
3217
  }
3203
3218
  case "text-end": {
3204
- const textPart = state.activeTextParts[part.id];
3219
+ const textPart = state.activeTextParts[chunk.id];
3205
3220
  textPart.state = "done";
3206
- delete state.activeTextParts[part.id];
3221
+ textPart.providerMetadata = (_b = chunk.providerMetadata) != null ? _b : textPart.providerMetadata;
3222
+ delete state.activeTextParts[chunk.id];
3207
3223
  write();
3208
3224
  break;
3209
3225
  }
@@ -3211,34 +3227,34 @@ function processUIMessageStream({
3211
3227
  const reasoningPart = {
3212
3228
  type: "reasoning",
3213
3229
  text: "",
3214
- providerMetadata: part.providerMetadata,
3230
+ providerMetadata: chunk.providerMetadata,
3215
3231
  state: "streaming"
3216
3232
  };
3217
- state.activeReasoningParts[part.id] = reasoningPart;
3233
+ state.activeReasoningParts[chunk.id] = reasoningPart;
3218
3234
  state.message.parts.push(reasoningPart);
3219
3235
  write();
3220
3236
  break;
3221
3237
  }
3222
3238
  case "reasoning-delta": {
3223
- const reasoningPart = state.activeReasoningParts[part.id];
3224
- reasoningPart.text += part.delta;
3225
- reasoningPart.providerMetadata = (_a16 = part.providerMetadata) != null ? _a16 : reasoningPart.providerMetadata;
3239
+ const reasoningPart = state.activeReasoningParts[chunk.id];
3240
+ reasoningPart.text += chunk.delta;
3241
+ reasoningPart.providerMetadata = (_c = chunk.providerMetadata) != null ? _c : reasoningPart.providerMetadata;
3226
3242
  write();
3227
3243
  break;
3228
3244
  }
3229
3245
  case "reasoning-end": {
3230
- const reasoningPart = state.activeReasoningParts[part.id];
3231
- reasoningPart.providerMetadata = (_b = part.providerMetadata) != null ? _b : reasoningPart.providerMetadata;
3246
+ const reasoningPart = state.activeReasoningParts[chunk.id];
3247
+ reasoningPart.providerMetadata = (_d = chunk.providerMetadata) != null ? _d : reasoningPart.providerMetadata;
3232
3248
  reasoningPart.state = "done";
3233
- delete state.activeReasoningParts[part.id];
3249
+ delete state.activeReasoningParts[chunk.id];
3234
3250
  write();
3235
3251
  break;
3236
3252
  }
3237
3253
  case "file": {
3238
3254
  state.message.parts.push({
3239
3255
  type: "file",
3240
- mediaType: part.mediaType,
3241
- url: part.url
3256
+ mediaType: chunk.mediaType,
3257
+ url: chunk.url
3242
3258
  });
3243
3259
  write();
3244
3260
  break;
@@ -3246,10 +3262,10 @@ function processUIMessageStream({
3246
3262
  case "source-url": {
3247
3263
  state.message.parts.push({
3248
3264
  type: "source-url",
3249
- sourceId: part.sourceId,
3250
- url: part.url,
3251
- title: part.title,
3252
- providerMetadata: part.providerMetadata
3265
+ sourceId: chunk.sourceId,
3266
+ url: chunk.url,
3267
+ title: chunk.title,
3268
+ providerMetadata: chunk.providerMetadata
3253
3269
  });
3254
3270
  write();
3255
3271
  break;
@@ -3257,40 +3273,40 @@ function processUIMessageStream({
3257
3273
  case "source-document": {
3258
3274
  state.message.parts.push({
3259
3275
  type: "source-document",
3260
- sourceId: part.sourceId,
3261
- mediaType: part.mediaType,
3262
- title: part.title,
3263
- filename: part.filename,
3264
- providerMetadata: part.providerMetadata
3276
+ sourceId: chunk.sourceId,
3277
+ mediaType: chunk.mediaType,
3278
+ title: chunk.title,
3279
+ filename: chunk.filename,
3280
+ providerMetadata: chunk.providerMetadata
3265
3281
  });
3266
3282
  write();
3267
3283
  break;
3268
3284
  }
3269
3285
  case "tool-input-start": {
3270
3286
  const toolInvocations = state.message.parts.filter(isToolUIPart);
3271
- state.partialToolCalls[part.toolCallId] = {
3287
+ state.partialToolCalls[chunk.toolCallId] = {
3272
3288
  text: "",
3273
- toolName: part.toolName,
3289
+ toolName: chunk.toolName,
3274
3290
  index: toolInvocations.length
3275
3291
  };
3276
3292
  updateToolInvocationPart({
3277
- toolCallId: part.toolCallId,
3278
- toolName: part.toolName,
3293
+ toolCallId: chunk.toolCallId,
3294
+ toolName: chunk.toolName,
3279
3295
  state: "input-streaming",
3280
3296
  input: void 0,
3281
- providerExecuted: part.providerExecuted
3297
+ providerExecuted: chunk.providerExecuted
3282
3298
  });
3283
3299
  write();
3284
3300
  break;
3285
3301
  }
3286
3302
  case "tool-input-delta": {
3287
- const partialToolCall = state.partialToolCalls[part.toolCallId];
3288
- partialToolCall.text += part.inputTextDelta;
3303
+ const partialToolCall = state.partialToolCalls[chunk.toolCallId];
3304
+ partialToolCall.text += chunk.inputTextDelta;
3289
3305
  const { value: partialArgs } = await parsePartialJson(
3290
3306
  partialToolCall.text
3291
3307
  );
3292
3308
  updateToolInvocationPart({
3293
- toolCallId: part.toolCallId,
3309
+ toolCallId: chunk.toolCallId,
3294
3310
  toolName: partialToolCall.toolName,
3295
3311
  state: "input-streaming",
3296
3312
  input: partialArgs
@@ -3300,23 +3316,24 @@ function processUIMessageStream({
3300
3316
  }
3301
3317
  case "tool-input-available": {
3302
3318
  updateToolInvocationPart({
3303
- toolCallId: part.toolCallId,
3304
- toolName: part.toolName,
3319
+ toolCallId: chunk.toolCallId,
3320
+ toolName: chunk.toolName,
3305
3321
  state: "input-available",
3306
- input: part.input,
3307
- providerExecuted: part.providerExecuted
3322
+ input: chunk.input,
3323
+ providerExecuted: chunk.providerExecuted,
3324
+ providerMetadata: chunk.providerMetadata
3308
3325
  });
3309
3326
  write();
3310
- if (onToolCall && !part.providerExecuted) {
3327
+ if (onToolCall && !chunk.providerExecuted) {
3311
3328
  const result = await onToolCall({
3312
- toolCall: part
3329
+ toolCall: chunk
3313
3330
  });
3314
3331
  if (result != null) {
3315
3332
  updateToolInvocationPart({
3316
- toolCallId: part.toolCallId,
3317
- toolName: part.toolName,
3333
+ toolCallId: chunk.toolCallId,
3334
+ toolName: chunk.toolName,
3318
3335
  state: "output-available",
3319
- input: part.input,
3336
+ input: chunk.input,
3320
3337
  output: result
3321
3338
  });
3322
3339
  write();
@@ -3330,7 +3347,7 @@ function processUIMessageStream({
3330
3347
  throw new Error("tool_result must be preceded by a tool_call");
3331
3348
  }
3332
3349
  const toolInvocationIndex = toolInvocations.findIndex(
3333
- (invocation) => invocation.toolCallId === part.toolCallId
3350
+ (invocation) => invocation.toolCallId === chunk.toolCallId
3334
3351
  );
3335
3352
  if (toolInvocationIndex === -1) {
3336
3353
  throw new Error(
@@ -3341,12 +3358,12 @@ function processUIMessageStream({
3341
3358
  toolInvocations[toolInvocationIndex]
3342
3359
  );
3343
3360
  updateToolInvocationPart({
3344
- toolCallId: part.toolCallId,
3361
+ toolCallId: chunk.toolCallId,
3345
3362
  toolName,
3346
3363
  state: "output-available",
3347
3364
  input: toolInvocations[toolInvocationIndex].input,
3348
- output: part.output,
3349
- providerExecuted: part.providerExecuted
3365
+ output: chunk.output,
3366
+ providerExecuted: chunk.providerExecuted
3350
3367
  });
3351
3368
  write();
3352
3369
  break;
@@ -3357,7 +3374,7 @@ function processUIMessageStream({
3357
3374
  throw new Error("tool_result must be preceded by a tool_call");
3358
3375
  }
3359
3376
  const toolInvocationIndex = toolInvocations.findIndex(
3360
- (invocation) => invocation.toolCallId === part.toolCallId
3377
+ (invocation) => invocation.toolCallId === chunk.toolCallId
3361
3378
  );
3362
3379
  if (toolInvocationIndex === -1) {
3363
3380
  throw new Error(
@@ -3368,12 +3385,12 @@ function processUIMessageStream({
3368
3385
  toolInvocations[toolInvocationIndex]
3369
3386
  );
3370
3387
  updateToolInvocationPart({
3371
- toolCallId: part.toolCallId,
3388
+ toolCallId: chunk.toolCallId,
3372
3389
  toolName,
3373
3390
  state: "output-error",
3374
3391
  input: toolInvocations[toolInvocationIndex].input,
3375
- errorText: part.errorText,
3376
- providerExecuted: part.providerExecuted
3392
+ errorText: chunk.errorText,
3393
+ providerExecuted: chunk.providerExecuted
3377
3394
  });
3378
3395
  write();
3379
3396
  break;
@@ -3388,62 +3405,65 @@ function processUIMessageStream({
3388
3405
  break;
3389
3406
  }
3390
3407
  case "start": {
3391
- if (part.messageId != null) {
3392
- state.message.id = part.messageId;
3408
+ if (chunk.messageId != null) {
3409
+ state.message.id = chunk.messageId;
3393
3410
  }
3394
- await updateMessageMetadata(part.messageMetadata);
3395
- if (part.messageId != null || part.messageMetadata != null) {
3411
+ await updateMessageMetadata(chunk.messageMetadata);
3412
+ if (chunk.messageId != null || chunk.messageMetadata != null) {
3396
3413
  write();
3397
3414
  }
3398
3415
  break;
3399
3416
  }
3400
3417
  case "finish": {
3401
- await updateMessageMetadata(part.messageMetadata);
3402
- if (part.messageMetadata != null) {
3418
+ await updateMessageMetadata(chunk.messageMetadata);
3419
+ if (chunk.messageMetadata != null) {
3403
3420
  write();
3404
3421
  }
3405
3422
  break;
3406
3423
  }
3407
3424
  case "message-metadata": {
3408
- await updateMessageMetadata(part.messageMetadata);
3409
- if (part.messageMetadata != null) {
3425
+ await updateMessageMetadata(chunk.messageMetadata);
3426
+ if (chunk.messageMetadata != null) {
3410
3427
  write();
3411
3428
  }
3412
3429
  break;
3413
3430
  }
3414
3431
  case "error": {
3415
- onError == null ? void 0 : onError(new Error(part.errorText));
3432
+ onError == null ? void 0 : onError(new Error(chunk.errorText));
3416
3433
  break;
3417
3434
  }
3418
3435
  default: {
3419
- if (isDataUIMessageChunk(part)) {
3420
- const dataPart = part;
3421
- if (dataPart.transient) {
3422
- onData == null ? void 0 : onData(dataPart);
3436
+ if (isDataUIMessageChunk(chunk)) {
3437
+ if ((dataPartSchemas == null ? void 0 : dataPartSchemas[chunk.type]) != null) {
3438
+ await (0, import_provider_utils11.validateTypes)({
3439
+ value: chunk.data,
3440
+ schema: dataPartSchemas[chunk.type]
3441
+ });
3442
+ }
3443
+ const dataChunk = chunk;
3444
+ if (dataChunk.transient) {
3445
+ onData == null ? void 0 : onData(dataChunk);
3423
3446
  break;
3424
3447
  }
3425
- const existingPart = dataPart.id != null ? state.message.parts.find(
3426
- (partArg) => dataPart.type === partArg.type && dataPart.id === partArg.id
3448
+ const existingUIPart = dataChunk.id != null ? state.message.parts.find(
3449
+ (chunkArg) => dataChunk.type === chunkArg.type && dataChunk.id === chunkArg.id
3427
3450
  ) : void 0;
3428
- if (existingPart != null) {
3429
- existingPart.data = isObject(existingPart.data) && isObject(dataPart.data) ? mergeObjects(existingPart.data, dataPart.data) : dataPart.data;
3451
+ if (existingUIPart != null) {
3452
+ existingUIPart.data = dataChunk.data;
3430
3453
  } else {
3431
- state.message.parts.push(dataPart);
3454
+ state.message.parts.push(dataChunk);
3432
3455
  }
3433
- onData == null ? void 0 : onData(dataPart);
3456
+ onData == null ? void 0 : onData(dataChunk);
3434
3457
  write();
3435
3458
  }
3436
3459
  }
3437
3460
  }
3438
- controller.enqueue(part);
3461
+ controller.enqueue(chunk);
3439
3462
  });
3440
3463
  }
3441
3464
  })
3442
3465
  );
3443
3466
  }
3444
- function isObject(value) {
3445
- return typeof value === "object" && value !== null;
3446
- }
3447
3467
 
3448
3468
  // src/ui-message-stream/handle-ui-message-stream-finish.ts
3449
3469
  function handleUIMessageStreamFinish({
@@ -4107,7 +4127,7 @@ var DefaultStreamTextResult = class {
4107
4127
  let activeReasoningContent = {};
4108
4128
  const eventProcessor = new TransformStream({
4109
4129
  async transform(chunk, controller) {
4110
- var _a16, _b;
4130
+ var _a16, _b, _c;
4111
4131
  controller.enqueue(chunk);
4112
4132
  const { part } = chunk;
4113
4133
  if (part.type === "text" || part.type === "reasoning" || part.type === "source" || part.type === "tool-call" || part.type === "tool-result" || part.type === "tool-input-start" || part.type === "tool-input-delta" || part.type === "raw") {
@@ -4137,7 +4157,7 @@ var DefaultStreamTextResult = class {
4137
4157
  return;
4138
4158
  }
4139
4159
  activeText.text += part.text;
4140
- activeText.providerMetadata = part.providerMetadata;
4160
+ activeText.providerMetadata = (_a16 = part.providerMetadata) != null ? _a16 : activeText.providerMetadata;
4141
4161
  }
4142
4162
  if (part.type === "text-end") {
4143
4163
  delete activeTextContent[part.id];
@@ -4163,7 +4183,7 @@ var DefaultStreamTextResult = class {
4163
4183
  return;
4164
4184
  }
4165
4185
  activeReasoning.text += part.text;
4166
- activeReasoning.providerMetadata = (_a16 = part.providerMetadata) != null ? _a16 : activeReasoning.providerMetadata;
4186
+ activeReasoning.providerMetadata = (_b = part.providerMetadata) != null ? _b : activeReasoning.providerMetadata;
4167
4187
  }
4168
4188
  if (part.type === "reasoning-end") {
4169
4189
  const activeReasoning = activeReasoningContent[part.id];
@@ -4177,7 +4197,7 @@ var DefaultStreamTextResult = class {
4177
4197
  });
4178
4198
  return;
4179
4199
  }
4180
- activeReasoning.providerMetadata = (_b = part.providerMetadata) != null ? _b : activeReasoning.providerMetadata;
4200
+ activeReasoning.providerMetadata = (_c = part.providerMetadata) != null ? _c : activeReasoning.providerMetadata;
4181
4201
  delete activeReasoningContent[part.id];
4182
4202
  }
4183
4203
  if (part.type === "file") {
@@ -4866,10 +4886,10 @@ var DefaultStreamTextResult = class {
4866
4886
  sendFinish = true,
4867
4887
  onError = import_provider22.getErrorMessage
4868
4888
  } = {}) {
4869
- const responseMessageId = getResponseUIMessageId({
4889
+ const responseMessageId = generateMessageId != null ? getResponseUIMessageId({
4870
4890
  originalMessages,
4871
- responseMessageId: this.generateId
4872
- });
4891
+ responseMessageId: generateMessageId
4892
+ }) : void 0;
4873
4893
  const baseStream = this.fullStream.pipeThrough(
4874
4894
  new TransformStream({
4875
4895
  transform: async (part, controller) => {
@@ -4877,26 +4897,35 @@ var DefaultStreamTextResult = class {
4877
4897
  const partType = part.type;
4878
4898
  switch (partType) {
4879
4899
  case "text-start": {
4880
- controller.enqueue({ type: "text-start", id: part.id });
4900
+ controller.enqueue({
4901
+ type: "text-start",
4902
+ id: part.id,
4903
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4904
+ });
4881
4905
  break;
4882
4906
  }
4883
4907
  case "text": {
4884
4908
  controller.enqueue({
4885
4909
  type: "text-delta",
4886
4910
  id: part.id,
4887
- delta: part.text
4911
+ delta: part.text,
4912
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4888
4913
  });
4889
4914
  break;
4890
4915
  }
4891
4916
  case "text-end": {
4892
- controller.enqueue({ type: "text-end", id: part.id });
4917
+ controller.enqueue({
4918
+ type: "text-end",
4919
+ id: part.id,
4920
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4921
+ });
4893
4922
  break;
4894
4923
  }
4895
4924
  case "reasoning-start": {
4896
4925
  controller.enqueue({
4897
4926
  type: "reasoning-start",
4898
4927
  id: part.id,
4899
- providerMetadata: part.providerMetadata
4928
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4900
4929
  });
4901
4930
  break;
4902
4931
  }
@@ -4906,7 +4935,7 @@ var DefaultStreamTextResult = class {
4906
4935
  type: "reasoning-delta",
4907
4936
  id: part.id,
4908
4937
  delta: part.text,
4909
- providerMetadata: part.providerMetadata
4938
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4910
4939
  });
4911
4940
  }
4912
4941
  break;
@@ -4915,7 +4944,7 @@ var DefaultStreamTextResult = class {
4915
4944
  controller.enqueue({
4916
4945
  type: "reasoning-end",
4917
4946
  id: part.id,
4918
- providerMetadata: part.providerMetadata
4947
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4919
4948
  });
4920
4949
  break;
4921
4950
  }
@@ -4934,7 +4963,7 @@ var DefaultStreamTextResult = class {
4934
4963
  sourceId: part.id,
4935
4964
  url: part.url,
4936
4965
  title: part.title,
4937
- providerMetadata: part.providerMetadata
4966
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4938
4967
  });
4939
4968
  }
4940
4969
  if (sendSources && part.sourceType === "document") {
@@ -4944,7 +4973,7 @@ var DefaultStreamTextResult = class {
4944
4973
  mediaType: part.mediaType,
4945
4974
  title: part.title,
4946
4975
  filename: part.filename,
4947
- providerMetadata: part.providerMetadata
4976
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4948
4977
  });
4949
4978
  }
4950
4979
  break;
@@ -4972,7 +5001,8 @@ var DefaultStreamTextResult = class {
4972
5001
  toolCallId: part.toolCallId,
4973
5002
  toolName: part.toolName,
4974
5003
  input: part.input,
4975
- providerExecuted: part.providerExecuted
5004
+ providerExecuted: part.providerExecuted,
5005
+ providerMetadata: part.providerMetadata
4976
5006
  });
4977
5007
  break;
4978
5008
  }
@@ -5013,8 +5043,8 @@ var DefaultStreamTextResult = class {
5013
5043
  if (sendStart) {
5014
5044
  controller.enqueue({
5015
5045
  type: "start",
5016
- messageId: responseMessageId,
5017
- messageMetadata: messageMetadataValue
5046
+ ...messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {},
5047
+ ...responseMessageId != null ? { messageId: responseMessageId } : {}
5018
5048
  });
5019
5049
  }
5020
5050
  break;
@@ -5023,7 +5053,7 @@ var DefaultStreamTextResult = class {
5023
5053
  if (sendFinish) {
5024
5054
  controller.enqueue({
5025
5055
  type: "finish",
5026
- messageMetadata: messageMetadataValue
5056
+ ...messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {}
5027
5057
  });
5028
5058
  }
5029
5059
  break;
@@ -7430,6 +7460,28 @@ var doWrap = ({
7430
7460
  };
7431
7461
  };
7432
7462
 
7463
+ // src/middleware/wrap-provider.ts
7464
+ function wrapProvider({
7465
+ provider,
7466
+ languageModelMiddleware
7467
+ }) {
7468
+ const wrappedProvider = {
7469
+ languageModel(modelId) {
7470
+ let model = provider.languageModel(modelId);
7471
+ model = wrapLanguageModel({
7472
+ model,
7473
+ middleware: languageModelMiddleware
7474
+ });
7475
+ return model;
7476
+ },
7477
+ textEmbeddingModel: provider.textEmbeddingModel,
7478
+ imageModel: provider.imageModel,
7479
+ transcriptionModel: provider.transcriptionModel,
7480
+ speechModel: provider.speechModel
7481
+ };
7482
+ return wrappedProvider;
7483
+ }
7484
+
7433
7485
  // src/registry/custom-provider.ts
7434
7486
  var import_provider27 = require("@ai-sdk/provider");
7435
7487
  function customProvider({
@@ -7518,10 +7570,12 @@ _a15 = symbol15;
7518
7570
  // src/registry/provider-registry.ts
7519
7571
  var import_provider29 = require("@ai-sdk/provider");
7520
7572
  function createProviderRegistry(providers, {
7521
- separator = ":"
7573
+ separator = ":",
7574
+ languageModelMiddleware
7522
7575
  } = {}) {
7523
7576
  const registry = new DefaultProviderRegistry({
7524
- separator
7577
+ separator,
7578
+ languageModelMiddleware
7525
7579
  });
7526
7580
  for (const [id, provider] of Object.entries(providers)) {
7527
7581
  registry.registerProvider({ id, provider });
@@ -7530,9 +7584,13 @@ function createProviderRegistry(providers, {
7530
7584
  }
7531
7585
  var experimental_createProviderRegistry = createProviderRegistry;
7532
7586
  var DefaultProviderRegistry = class {
7533
- constructor({ separator }) {
7587
+ constructor({
7588
+ separator,
7589
+ languageModelMiddleware
7590
+ }) {
7534
7591
  this.providers = {};
7535
7592
  this.separator = separator;
7593
+ this.languageModelMiddleware = languageModelMiddleware;
7536
7594
  }
7537
7595
  registerProvider({
7538
7596
  id,
@@ -7566,13 +7624,19 @@ var DefaultProviderRegistry = class {
7566
7624
  languageModel(id) {
7567
7625
  var _a16, _b;
7568
7626
  const [providerId, modelId] = this.splitId(id, "languageModel");
7569
- const model = (_b = (_a16 = this.getProvider(providerId, "languageModel")).languageModel) == null ? void 0 : _b.call(
7627
+ let model = (_b = (_a16 = this.getProvider(providerId, "languageModel")).languageModel) == null ? void 0 : _b.call(
7570
7628
  _a16,
7571
7629
  modelId
7572
7630
  );
7573
7631
  if (model == null) {
7574
7632
  throw new import_provider29.NoSuchModelError({ modelId: id, modelType: "languageModel" });
7575
7633
  }
7634
+ if (this.languageModelMiddleware != null) {
7635
+ model = wrapLanguageModel({
7636
+ model,
7637
+ middleware: this.languageModelMiddleware
7638
+ });
7639
+ }
7576
7640
  return model;
7577
7641
  }
7578
7642
  textEmbeddingModel(id) {
@@ -8951,7 +9015,8 @@ function convertToModelMessages(messages, options) {
8951
9015
  if (part.type === "text") {
8952
9016
  content.push({
8953
9017
  type: "text",
8954
- text: part.text
9018
+ text: part.text,
9019
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
8955
9020
  });
8956
9021
  } else if (part.type === "file") {
8957
9022
  content.push({
@@ -8978,7 +9043,8 @@ function convertToModelMessages(messages, options) {
8978
9043
  toolCallId: part.toolCallId,
8979
9044
  toolName,
8980
9045
  input: part.input,
8981
- providerExecuted: part.providerExecuted
9046
+ providerExecuted: part.providerExecuted,
9047
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
8982
9048
  });
8983
9049
  if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
8984
9050
  content.push({
@@ -9309,6 +9375,7 @@ function readUIMessageStream({
9309
9375
  tool,
9310
9376
  toolModelMessageSchema,
9311
9377
  userModelMessageSchema,
9312
- wrapLanguageModel
9378
+ wrapLanguageModel,
9379
+ wrapProvider
9313
9380
  });
9314
9381
  //# sourceMappingURL=index.js.map