ai 6.0.0-beta.99 → 6.0.1

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
@@ -4,8 +4,8 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
6
  var __export = (target, all) => {
7
- for (var name15 in all)
8
- __defProp(target, name15, { get: all[name15], enumerable: true });
7
+ for (var name14 in all)
8
+ __defProp(target, name14, { get: all[name14], enumerable: true });
9
9
  };
10
10
  var __copyProps = (to, from, except, desc) => {
11
11
  if (from && typeof from === "object" || typeof from === "function") {
@@ -20,62 +20,57 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
- AISDKError: () => import_provider16.AISDKError,
24
- APICallError: () => import_provider16.APICallError,
23
+ AISDKError: () => import_provider15.AISDKError,
24
+ APICallError: () => import_provider15.APICallError,
25
25
  AbstractChat: () => AbstractChat,
26
26
  DefaultChatTransport: () => DefaultChatTransport,
27
- DownloadError: () => DownloadError,
28
- EmptyResponseBodyError: () => import_provider16.EmptyResponseBodyError,
27
+ DownloadError: () => import_provider_utils.DownloadError,
28
+ EmptyResponseBodyError: () => import_provider15.EmptyResponseBodyError,
29
29
  Experimental_Agent: () => ToolLoopAgent,
30
30
  HttpChatTransport: () => HttpChatTransport,
31
31
  InvalidArgumentError: () => InvalidArgumentError,
32
32
  InvalidDataContentError: () => InvalidDataContentError,
33
33
  InvalidMessageRoleError: () => InvalidMessageRoleError,
34
- InvalidPromptError: () => import_provider16.InvalidPromptError,
35
- InvalidResponseDataError: () => import_provider16.InvalidResponseDataError,
34
+ InvalidPromptError: () => import_provider15.InvalidPromptError,
35
+ InvalidResponseDataError: () => import_provider15.InvalidResponseDataError,
36
36
  InvalidStreamPartError: () => InvalidStreamPartError,
37
37
  InvalidToolInputError: () => InvalidToolInputError,
38
- JSONParseError: () => import_provider16.JSONParseError,
38
+ JSONParseError: () => import_provider15.JSONParseError,
39
39
  JsonToSseTransformStream: () => JsonToSseTransformStream,
40
- LoadAPIKeyError: () => import_provider16.LoadAPIKeyError,
41
- LoadSettingError: () => import_provider16.LoadSettingError,
40
+ LoadAPIKeyError: () => import_provider15.LoadAPIKeyError,
41
+ LoadSettingError: () => import_provider15.LoadSettingError,
42
42
  MessageConversionError: () => MessageConversionError,
43
- NoContentGeneratedError: () => import_provider16.NoContentGeneratedError,
43
+ NoContentGeneratedError: () => import_provider15.NoContentGeneratedError,
44
44
  NoImageGeneratedError: () => NoImageGeneratedError,
45
45
  NoObjectGeneratedError: () => NoObjectGeneratedError,
46
46
  NoOutputGeneratedError: () => NoOutputGeneratedError,
47
47
  NoSpeechGeneratedError: () => NoSpeechGeneratedError,
48
- NoSuchModelError: () => import_provider16.NoSuchModelError,
48
+ NoSuchModelError: () => import_provider15.NoSuchModelError,
49
49
  NoSuchProviderError: () => NoSuchProviderError,
50
50
  NoSuchToolError: () => NoSuchToolError,
51
51
  Output: () => output_exports,
52
52
  RetryError: () => RetryError,
53
53
  SerialJobExecutor: () => SerialJobExecutor,
54
54
  TextStreamChatTransport: () => TextStreamChatTransport,
55
- TooManyEmbeddingValuesForCallError: () => import_provider16.TooManyEmbeddingValuesForCallError,
55
+ TooManyEmbeddingValuesForCallError: () => import_provider15.TooManyEmbeddingValuesForCallError,
56
56
  ToolCallRepairError: () => ToolCallRepairError,
57
57
  ToolLoopAgent: () => ToolLoopAgent,
58
- TypeValidationError: () => import_provider16.TypeValidationError,
58
+ TypeValidationError: () => import_provider15.TypeValidationError,
59
59
  UI_MESSAGE_STREAM_HEADERS: () => UI_MESSAGE_STREAM_HEADERS,
60
- UnsupportedFunctionalityError: () => import_provider16.UnsupportedFunctionalityError,
60
+ UnsupportedFunctionalityError: () => import_provider15.UnsupportedFunctionalityError,
61
61
  UnsupportedModelVersionError: () => UnsupportedModelVersionError,
62
- asSchema: () => import_provider_utils36.asSchema,
62
+ addToolInputExamplesMiddleware: () => addToolInputExamplesMiddleware,
63
+ asSchema: () => import_provider_utils38.asSchema,
63
64
  assistantModelMessageSchema: () => assistantModelMessageSchema,
64
65
  callCompletionApi: () => callCompletionApi,
65
66
  consumeStream: () => consumeStream,
66
67
  convertFileListToFileUIParts: () => convertFileListToFileUIParts,
67
- convertToCoreMessages: () => convertToCoreMessages,
68
68
  convertToModelMessages: () => convertToModelMessages,
69
- coreAssistantMessageSchema: () => coreAssistantMessageSchema,
70
- coreMessageSchema: () => coreMessageSchema,
71
- coreSystemMessageSchema: () => coreSystemMessageSchema,
72
- coreToolMessageSchema: () => coreToolMessageSchema,
73
- coreUserMessageSchema: () => coreUserMessageSchema,
74
69
  cosineSimilarity: () => cosineSimilarity,
75
70
  createAgentUIStream: () => createAgentUIStream,
76
71
  createAgentUIStreamResponse: () => createAgentUIStreamResponse,
77
72
  createGateway: () => import_gateway3.createGateway,
78
- createIdGenerator: () => import_provider_utils36.createIdGenerator,
73
+ createIdGenerator: () => import_provider_utils38.createIdGenerator,
79
74
  createProviderRegistry: () => createProviderRegistry,
80
75
  createTextStreamResponse: () => createTextStreamResponse,
81
76
  createUIMessageStream: () => createUIMessageStream,
@@ -83,19 +78,21 @@ __export(src_exports, {
83
78
  customProvider: () => customProvider,
84
79
  defaultEmbeddingSettingsMiddleware: () => defaultEmbeddingSettingsMiddleware,
85
80
  defaultSettingsMiddleware: () => defaultSettingsMiddleware,
86
- dynamicTool: () => import_provider_utils36.dynamicTool,
81
+ dynamicTool: () => import_provider_utils38.dynamicTool,
87
82
  embed: () => embed,
88
83
  embedMany: () => embedMany,
89
84
  experimental_createProviderRegistry: () => experimental_createProviderRegistry,
90
85
  experimental_customProvider: () => experimental_customProvider,
91
- experimental_generateImage: () => generateImage,
86
+ experimental_generateImage: () => experimental_generateImage,
92
87
  experimental_generateSpeech: () => generateSpeech,
93
88
  experimental_transcribe: () => transcribe,
94
89
  extractReasoningMiddleware: () => extractReasoningMiddleware,
95
90
  gateway: () => import_gateway3.gateway,
96
- generateId: () => import_provider_utils36.generateId,
91
+ generateId: () => import_provider_utils38.generateId,
92
+ generateImage: () => generateImage,
97
93
  generateObject: () => generateObject,
98
94
  generateText: () => generateText,
95
+ getStaticToolName: () => getStaticToolName,
99
96
  getTextFromDataUrl: () => getTextFromDataUrl,
100
97
  getToolName: () => getToolName,
101
98
  getToolOrDynamicToolName: () => getToolOrDynamicToolName,
@@ -104,14 +101,15 @@ __export(src_exports, {
104
101
  isDeepEqualData: () => isDeepEqualData,
105
102
  isFileUIPart: () => isFileUIPart,
106
103
  isReasoningUIPart: () => isReasoningUIPart,
104
+ isStaticToolUIPart: () => isStaticToolUIPart,
107
105
  isTextUIPart: () => isTextUIPart,
108
106
  isToolOrDynamicToolUIPart: () => isToolOrDynamicToolUIPart,
109
107
  isToolUIPart: () => isToolUIPart,
110
- jsonSchema: () => import_provider_utils36.jsonSchema,
108
+ jsonSchema: () => import_provider_utils38.jsonSchema,
111
109
  lastAssistantMessageIsCompleteWithApprovalResponses: () => lastAssistantMessageIsCompleteWithApprovalResponses,
112
110
  lastAssistantMessageIsCompleteWithToolCalls: () => lastAssistantMessageIsCompleteWithToolCalls,
113
111
  modelMessageSchema: () => modelMessageSchema,
114
- parseJsonEventStream: () => import_provider_utils36.parseJsonEventStream,
112
+ parseJsonEventStream: () => import_provider_utils38.parseJsonEventStream,
115
113
  parsePartialJson: () => parsePartialJson,
116
114
  pipeAgentUIStreamToResponse: () => pipeAgentUIStreamToResponse,
117
115
  pipeTextStreamToResponse: () => pipeTextStreamToResponse,
@@ -127,7 +125,7 @@ __export(src_exports, {
127
125
  streamObject: () => streamObject,
128
126
  streamText: () => streamText,
129
127
  systemModelMessageSchema: () => systemModelMessageSchema,
130
- tool: () => import_provider_utils36.tool,
128
+ tool: () => import_provider_utils38.tool,
131
129
  toolModelMessageSchema: () => toolModelMessageSchema,
132
130
  uiMessageChunkSchema: () => uiMessageChunkSchema,
133
131
  userModelMessageSchema: () => userModelMessageSchema,
@@ -135,87 +133,17 @@ __export(src_exports, {
135
133
  wrapEmbeddingModel: () => wrapEmbeddingModel,
136
134
  wrapLanguageModel: () => wrapLanguageModel,
137
135
  wrapProvider: () => wrapProvider,
138
- zodSchema: () => import_provider_utils36.zodSchema
136
+ zodSchema: () => import_provider_utils38.zodSchema
139
137
  });
140
138
  module.exports = __toCommonJS(src_exports);
141
139
  var import_gateway3 = require("@ai-sdk/gateway");
142
- var import_provider_utils36 = require("@ai-sdk/provider-utils");
140
+ var import_provider_utils38 = require("@ai-sdk/provider-utils");
143
141
 
144
142
  // src/generate-text/generate-text.ts
145
- var import_provider_utils13 = require("@ai-sdk/provider-utils");
146
-
147
- // src/logger/log-warnings.ts
148
- function formatWarning({
149
- warning,
150
- provider,
151
- model
152
- }) {
153
- const prefix = `AI SDK Warning (${provider} / ${model}):`;
154
- switch (warning.type) {
155
- case "unsupported-setting": {
156
- let message = `${prefix} The "${warning.setting}" setting is not supported.`;
157
- if (warning.details) {
158
- message += ` ${warning.details}`;
159
- }
160
- return message;
161
- }
162
- case "compatibility": {
163
- let message = `${prefix} The "${warning.feature}" feature is not fully supported.`;
164
- if (warning.details) {
165
- message += ` ${warning.details}`;
166
- }
167
- return message;
168
- }
169
- case "unsupported-tool": {
170
- const toolName = "name" in warning.tool ? warning.tool.name : "unknown tool";
171
- let message = `${prefix} The tool "${toolName}" is not supported.`;
172
- if (warning.details) {
173
- message += ` ${warning.details}`;
174
- }
175
- return message;
176
- }
177
- case "other": {
178
- return `${prefix} ${warning.message}`;
179
- }
180
- default: {
181
- return `${prefix} ${JSON.stringify(warning, null, 2)}`;
182
- }
183
- }
184
- }
185
- var FIRST_WARNING_INFO_MESSAGE = "AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.";
186
- var hasLoggedBefore = false;
187
- var logWarnings = (options) => {
188
- if (options.warnings.length === 0) {
189
- return;
190
- }
191
- const logger = globalThis.AI_SDK_LOG_WARNINGS;
192
- if (logger === false) {
193
- return;
194
- }
195
- if (typeof logger === "function") {
196
- logger(options);
197
- return;
198
- }
199
- if (!hasLoggedBefore) {
200
- hasLoggedBefore = true;
201
- console.info(FIRST_WARNING_INFO_MESSAGE);
202
- }
203
- for (const warning of options.warnings) {
204
- console.warn(
205
- formatWarning({
206
- warning,
207
- provider: options.provider,
208
- model: options.model
209
- })
210
- );
211
- }
212
- };
213
-
214
- // src/model/resolve-model.ts
215
- var import_gateway = require("@ai-sdk/gateway");
143
+ var import_provider_utils15 = require("@ai-sdk/provider-utils");
216
144
 
217
145
  // src/error/index.ts
218
- var import_provider16 = require("@ai-sdk/provider");
146
+ var import_provider15 = require("@ai-sdk/provider");
219
147
 
220
148
  // src/error/invalid-argument-error.ts
221
149
  var import_provider = require("@ai-sdk/provider");
@@ -494,25 +422,26 @@ var MessageConversionError = class extends import_provider13.AISDKError {
494
422
  };
495
423
  _a11 = symbol11;
496
424
 
497
- // src/util/download/download-error.ts
425
+ // src/error/index.ts
426
+ var import_provider_utils = require("@ai-sdk/provider-utils");
427
+
428
+ // src/util/retry-error.ts
498
429
  var import_provider14 = require("@ai-sdk/provider");
499
- var name12 = "AI_DownloadError";
430
+ var name12 = "AI_RetryError";
500
431
  var marker12 = `vercel.ai.error.${name12}`;
501
432
  var symbol12 = Symbol.for(marker12);
502
433
  var _a12;
503
- var DownloadError = class extends import_provider14.AISDKError {
434
+ var RetryError = class extends import_provider14.AISDKError {
504
435
  constructor({
505
- url,
506
- statusCode,
507
- statusText,
508
- cause,
509
- message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
436
+ message,
437
+ reason,
438
+ errors
510
439
  }) {
511
- super({ name: name12, message, cause });
440
+ super({ name: name12, message });
512
441
  this[_a12] = true;
513
- this.url = url;
514
- this.statusCode = statusCode;
515
- this.statusText = statusText;
442
+ this.reason = reason;
443
+ this.errors = errors;
444
+ this.lastError = errors[errors.length - 1];
516
445
  }
517
446
  static isInstance(error) {
518
447
  return import_provider14.AISDKError.hasMarker(error, marker12);
@@ -520,35 +449,95 @@ var DownloadError = class extends import_provider14.AISDKError {
520
449
  };
521
450
  _a12 = symbol12;
522
451
 
523
- // src/util/retry-error.ts
524
- var import_provider15 = require("@ai-sdk/provider");
525
- var name13 = "AI_RetryError";
526
- var marker13 = `vercel.ai.error.${name13}`;
527
- var symbol13 = Symbol.for(marker13);
528
- var _a13;
529
- var RetryError = class extends import_provider15.AISDKError {
530
- constructor({
531
- message,
532
- reason,
533
- errors
534
- }) {
535
- super({ name: name13, message });
536
- this[_a13] = true;
537
- this.reason = reason;
538
- this.errors = errors;
539
- this.lastError = errors[errors.length - 1];
452
+ // src/logger/log-warnings.ts
453
+ function formatWarning({
454
+ warning,
455
+ provider,
456
+ model
457
+ }) {
458
+ const prefix = `AI SDK Warning (${provider} / ${model}):`;
459
+ switch (warning.type) {
460
+ case "unsupported": {
461
+ let message = `${prefix} The feature "${warning.feature}" is not supported.`;
462
+ if (warning.details) {
463
+ message += ` ${warning.details}`;
464
+ }
465
+ return message;
466
+ }
467
+ case "compatibility": {
468
+ let message = `${prefix} The feature "${warning.feature}" is used in a compatibility mode.`;
469
+ if (warning.details) {
470
+ message += ` ${warning.details}`;
471
+ }
472
+ return message;
473
+ }
474
+ case "other": {
475
+ return `${prefix} ${warning.message}`;
476
+ }
477
+ default: {
478
+ return `${prefix} ${JSON.stringify(warning, null, 2)}`;
479
+ }
540
480
  }
541
- static isInstance(error) {
542
- return import_provider15.AISDKError.hasMarker(error, marker13);
481
+ }
482
+ var FIRST_WARNING_INFO_MESSAGE = "AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.";
483
+ var hasLoggedBefore = false;
484
+ var logWarnings = (options) => {
485
+ if (options.warnings.length === 0) {
486
+ return;
487
+ }
488
+ const logger = globalThis.AI_SDK_LOG_WARNINGS;
489
+ if (logger === false) {
490
+ return;
491
+ }
492
+ if (typeof logger === "function") {
493
+ logger(options);
494
+ return;
495
+ }
496
+ if (!hasLoggedBefore) {
497
+ hasLoggedBefore = true;
498
+ console.info(FIRST_WARNING_INFO_MESSAGE);
499
+ }
500
+ for (const warning of options.warnings) {
501
+ console.warn(
502
+ formatWarning({
503
+ warning,
504
+ provider: options.provider,
505
+ model: options.model
506
+ })
507
+ );
543
508
  }
544
509
  };
545
- _a13 = symbol13;
510
+
511
+ // src/model/resolve-model.ts
512
+ var import_gateway = require("@ai-sdk/gateway");
513
+
514
+ // src/util/log-v2-compatibility-warning.ts
515
+ function logV2CompatibilityWarning({
516
+ provider,
517
+ modelId
518
+ }) {
519
+ logWarnings({
520
+ warnings: [
521
+ {
522
+ type: "compatibility",
523
+ feature: "specificationVersion",
524
+ details: `Using v2 specification compatibility mode. Some features may not be available.`
525
+ }
526
+ ],
527
+ provider,
528
+ model: modelId
529
+ });
530
+ }
546
531
 
547
532
  // src/model/as-embedding-model-v3.ts
548
533
  function asEmbeddingModelV3(model) {
549
534
  if (model.specificationVersion === "v3") {
550
535
  return model;
551
536
  }
537
+ logV2CompatibilityWarning({
538
+ provider: model.provider,
539
+ modelId: model.modelId
540
+ });
552
541
  return new Proxy(model, {
553
542
  get(target, prop) {
554
543
  if (prop === "specificationVersion")
@@ -558,11 +547,15 @@ function asEmbeddingModelV3(model) {
558
547
  });
559
548
  }
560
549
 
561
- // src/model/as-language-model-v3.ts
562
- function asLanguageModelV3(model) {
550
+ // src/model/as-image-model-v3.ts
551
+ function asImageModelV3(model) {
563
552
  if (model.specificationVersion === "v3") {
564
553
  return model;
565
554
  }
555
+ logV2CompatibilityWarning({
556
+ provider: model.provider,
557
+ modelId: model.modelId
558
+ });
566
559
  return new Proxy(model, {
567
560
  get(target, prop) {
568
561
  if (prop === "specificationVersion")
@@ -572,11 +565,94 @@ function asLanguageModelV3(model) {
572
565
  });
573
566
  }
574
567
 
568
+ // src/model/as-language-model-v3.ts
569
+ function asLanguageModelV3(model) {
570
+ if (model.specificationVersion === "v3") {
571
+ return model;
572
+ }
573
+ logV2CompatibilityWarning({
574
+ provider: model.provider,
575
+ modelId: model.modelId
576
+ });
577
+ return new Proxy(model, {
578
+ get(target, prop) {
579
+ switch (prop) {
580
+ case "specificationVersion":
581
+ return "v3";
582
+ case "doGenerate":
583
+ return async (...args) => {
584
+ const result = await target.doGenerate(...args);
585
+ return {
586
+ ...result,
587
+ finishReason: convertV2FinishReasonToV3(result.finishReason),
588
+ usage: convertV2UsageToV3(result.usage)
589
+ };
590
+ };
591
+ case "doStream":
592
+ return async (...args) => {
593
+ const result = await target.doStream(...args);
594
+ return {
595
+ ...result,
596
+ stream: convertV2StreamToV3(result.stream)
597
+ };
598
+ };
599
+ default:
600
+ return target[prop];
601
+ }
602
+ }
603
+ });
604
+ }
605
+ function convertV2StreamToV3(stream) {
606
+ return stream.pipeThrough(
607
+ new TransformStream({
608
+ transform(chunk, controller) {
609
+ switch (chunk.type) {
610
+ case "finish":
611
+ controller.enqueue({
612
+ ...chunk,
613
+ finishReason: convertV2FinishReasonToV3(chunk.finishReason),
614
+ usage: convertV2UsageToV3(chunk.usage)
615
+ });
616
+ break;
617
+ default:
618
+ controller.enqueue(chunk);
619
+ break;
620
+ }
621
+ }
622
+ })
623
+ );
624
+ }
625
+ function convertV2FinishReasonToV3(finishReason) {
626
+ return {
627
+ unified: finishReason === "unknown" ? "other" : finishReason,
628
+ raw: void 0
629
+ };
630
+ }
631
+ function convertV2UsageToV3(usage) {
632
+ return {
633
+ inputTokens: {
634
+ total: usage.inputTokens,
635
+ noCache: void 0,
636
+ cacheRead: usage.cachedInputTokens,
637
+ cacheWrite: void 0
638
+ },
639
+ outputTokens: {
640
+ total: usage.outputTokens,
641
+ text: void 0,
642
+ reasoning: usage.reasoningTokens
643
+ }
644
+ };
645
+ }
646
+
575
647
  // src/model/as-speech-model-v3.ts
576
648
  function asSpeechModelV3(model) {
577
649
  if (model.specificationVersion === "v3") {
578
650
  return model;
579
651
  }
652
+ logV2CompatibilityWarning({
653
+ provider: model.provider,
654
+ modelId: model.modelId
655
+ });
580
656
  return new Proxy(model, {
581
657
  get(target, prop) {
582
658
  if (prop === "specificationVersion")
@@ -591,6 +667,10 @@ function asTranscriptionModelV3(model) {
591
667
  if (model.specificationVersion === "v3") {
592
668
  return model;
593
669
  }
670
+ logV2CompatibilityWarning({
671
+ provider: model.provider,
672
+ modelId: model.modelId
673
+ });
594
674
  return new Proxy(model, {
595
675
  get(target, prop) {
596
676
  if (prop === "specificationVersion")
@@ -627,12 +707,10 @@ function resolveEmbeddingModel(model) {
627
707
  }
628
708
  return asEmbeddingModelV3(model);
629
709
  }
630
- return getGlobalProvider().textEmbeddingModel(
631
- model
632
- );
710
+ return getGlobalProvider().embeddingModel(model);
633
711
  }
634
712
  function resolveTranscriptionModel(model) {
635
- var _a15, _b;
713
+ var _a14, _b;
636
714
  if (typeof model !== "string") {
637
715
  if (model.specificationVersion !== "v3" && model.specificationVersion !== "v2") {
638
716
  const unsupportedModel = model;
@@ -644,10 +722,10 @@ function resolveTranscriptionModel(model) {
644
722
  }
645
723
  return asTranscriptionModelV3(model);
646
724
  }
647
- return (_b = (_a15 = getGlobalProvider()).transcriptionModel) == null ? void 0 : _b.call(_a15, model);
725
+ return (_b = (_a14 = getGlobalProvider()).transcriptionModel) == null ? void 0 : _b.call(_a14, model);
648
726
  }
649
727
  function resolveSpeechModel(model) {
650
- var _a15, _b;
728
+ var _a14, _b;
651
729
  if (typeof model !== "string") {
652
730
  if (model.specificationVersion !== "v3" && model.specificationVersion !== "v2") {
653
731
  const unsupportedModel = model;
@@ -659,18 +737,32 @@ function resolveSpeechModel(model) {
659
737
  }
660
738
  return asSpeechModelV3(model);
661
739
  }
662
- return (_b = (_a15 = getGlobalProvider()).speechModel) == null ? void 0 : _b.call(_a15, model);
740
+ return (_b = (_a14 = getGlobalProvider()).speechModel) == null ? void 0 : _b.call(_a14, model);
741
+ }
742
+ function resolveImageModel(model) {
743
+ if (typeof model !== "string") {
744
+ if (model.specificationVersion !== "v3" && model.specificationVersion !== "v2") {
745
+ const unsupportedModel = model;
746
+ throw new UnsupportedModelVersionError({
747
+ version: unsupportedModel.specificationVersion,
748
+ provider: unsupportedModel.provider,
749
+ modelId: unsupportedModel.modelId
750
+ });
751
+ }
752
+ return asImageModelV3(model);
753
+ }
754
+ return getGlobalProvider().imageModel(model);
663
755
  }
664
756
  function getGlobalProvider() {
665
- var _a15;
666
- return (_a15 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a15 : import_gateway.gateway;
757
+ var _a14;
758
+ return (_a14 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a14 : import_gateway.gateway;
667
759
  }
668
760
 
669
761
  // src/prompt/convert-to-language-model-prompt.ts
670
- var import_provider_utils4 = require("@ai-sdk/provider-utils");
762
+ var import_provider_utils6 = require("@ai-sdk/provider-utils");
671
763
 
672
764
  // src/util/detect-media-type.ts
673
- var import_provider_utils = require("@ai-sdk/provider-utils");
765
+ var import_provider_utils2 = require("@ai-sdk/provider-utils");
674
766
  var imageMediaTypeSignatures = [
675
767
  {
676
768
  mediaType: "image/gif",
@@ -826,7 +918,7 @@ var audioMediaTypeSignatures = [
826
918
  }
827
919
  ];
828
920
  var stripID3 = (data) => {
829
- const bytes = typeof data === "string" ? (0, import_provider_utils.convertBase64ToUint8Array)(data) : data;
921
+ const bytes = typeof data === "string" ? (0, import_provider_utils2.convertBase64ToUint8Array)(data) : data;
830
922
  const id3Size = (bytes[6] & 127) << 21 | (bytes[7] & 127) << 14 | (bytes[8] & 127) << 7 | bytes[9] & 127;
831
923
  return bytes.slice(id3Size + 10);
832
924
  };
@@ -841,7 +933,7 @@ function detectMediaType({
841
933
  signatures
842
934
  }) {
843
935
  const processedData = stripID3TagsIfPresent(data);
844
- const bytes = typeof processedData === "string" ? (0, import_provider_utils.convertBase64ToUint8Array)(
936
+ const bytes = typeof processedData === "string" ? (0, import_provider_utils2.convertBase64ToUint8Array)(
845
937
  processedData.substring(0, Math.min(processedData.length, 24))
846
938
  ) : processedData;
847
939
  for (const signature of signatures) {
@@ -855,25 +947,26 @@ function detectMediaType({
855
947
  }
856
948
 
857
949
  // src/util/download/download.ts
858
- var import_provider_utils2 = require("@ai-sdk/provider-utils");
950
+ var import_provider_utils3 = require("@ai-sdk/provider-utils");
951
+ var import_provider_utils4 = require("@ai-sdk/provider-utils");
859
952
 
860
953
  // src/version.ts
861
- var VERSION = true ? "6.0.0-beta.99" : "0.0.0-test";
954
+ var VERSION = true ? "6.0.1" : "0.0.0-test";
862
955
 
863
956
  // src/util/download/download.ts
864
957
  var download = async ({ url }) => {
865
- var _a15;
958
+ var _a14;
866
959
  const urlText = url.toString();
867
960
  try {
868
961
  const response = await fetch(urlText, {
869
- headers: (0, import_provider_utils2.withUserAgentSuffix)(
962
+ headers: (0, import_provider_utils4.withUserAgentSuffix)(
870
963
  {},
871
964
  `ai-sdk/${VERSION}`,
872
- (0, import_provider_utils2.getRuntimeEnvironmentUserAgent)()
965
+ (0, import_provider_utils4.getRuntimeEnvironmentUserAgent)()
873
966
  )
874
967
  });
875
968
  if (!response.ok) {
876
- throw new DownloadError({
969
+ throw new import_provider_utils3.DownloadError({
877
970
  url: urlText,
878
971
  statusCode: response.status,
879
972
  statusText: response.statusText
@@ -881,13 +974,13 @@ var download = async ({ url }) => {
881
974
  }
882
975
  return {
883
976
  data: new Uint8Array(await response.arrayBuffer()),
884
- mediaType: (_a15 = response.headers.get("content-type")) != null ? _a15 : void 0
977
+ mediaType: (_a14 = response.headers.get("content-type")) != null ? _a14 : void 0
885
978
  };
886
979
  } catch (error) {
887
- if (DownloadError.isInstance(error)) {
980
+ if (import_provider_utils3.DownloadError.isInstance(error)) {
888
981
  throw error;
889
982
  }
890
- throw new DownloadError({ url: urlText, cause: error });
983
+ throw new import_provider_utils3.DownloadError({ url: urlText, cause: error });
891
984
  }
892
985
  };
893
986
 
@@ -899,8 +992,8 @@ var createDefaultDownloadFunction = (download2 = download) => (requestedDownload
899
992
  );
900
993
 
901
994
  // src/prompt/data-content.ts
902
- var import_provider17 = require("@ai-sdk/provider");
903
- var import_provider_utils3 = require("@ai-sdk/provider-utils");
995
+ var import_provider16 = require("@ai-sdk/provider");
996
+ var import_provider_utils5 = require("@ai-sdk/provider-utils");
904
997
  var import_v4 = require("zod/v4");
905
998
 
906
999
  // src/prompt/split-data-url.ts
@@ -927,8 +1020,8 @@ var dataContentSchema = import_v4.z.union([
927
1020
  import_v4.z.custom(
928
1021
  // Buffer might not be available in some environments such as CloudFlare:
929
1022
  (value) => {
930
- var _a15, _b;
931
- return (_b = (_a15 = globalThis.Buffer) == null ? void 0 : _a15.isBuffer(value)) != null ? _b : false;
1023
+ var _a14, _b;
1024
+ return (_b = (_a14 = globalThis.Buffer) == null ? void 0 : _a14.isBuffer(value)) != null ? _b : false;
932
1025
  },
933
1026
  { message: "Must be a Buffer" }
934
1027
  )
@@ -951,7 +1044,7 @@ function convertToLanguageModelV3DataContent(content) {
951
1044
  content.toString()
952
1045
  );
953
1046
  if (dataUrlMediaType == null || base64Content == null) {
954
- throw new import_provider17.AISDKError({
1047
+ throw new import_provider16.AISDKError({
955
1048
  name: "InvalidDataContentError",
956
1049
  message: `Invalid data URL format in content ${content.toString()}`
957
1050
  });
@@ -965,9 +1058,9 @@ function convertDataContentToBase64String(content) {
965
1058
  return content;
966
1059
  }
967
1060
  if (content instanceof ArrayBuffer) {
968
- return (0, import_provider_utils3.convertUint8ArrayToBase64)(new Uint8Array(content));
1061
+ return (0, import_provider_utils5.convertUint8ArrayToBase64)(new Uint8Array(content));
969
1062
  }
970
- return (0, import_provider_utils3.convertUint8ArrayToBase64)(content);
1063
+ return (0, import_provider_utils5.convertUint8ArrayToBase64)(content);
971
1064
  }
972
1065
  function convertDataContentToUint8Array(content) {
973
1066
  if (content instanceof Uint8Array) {
@@ -975,7 +1068,7 @@ function convertDataContentToUint8Array(content) {
975
1068
  }
976
1069
  if (typeof content === "string") {
977
1070
  try {
978
- return (0, import_provider_utils3.convertBase64ToUint8Array)(content);
1071
+ return (0, import_provider_utils5.convertBase64ToUint8Array)(content);
979
1072
  } catch (error) {
980
1073
  throw new InvalidDataContentError({
981
1074
  message: "Invalid data content. Content string is not a base64-encoded media.",
@@ -990,6 +1083,11 @@ function convertDataContentToUint8Array(content) {
990
1083
  throw new InvalidDataContentError({ content });
991
1084
  }
992
1085
 
1086
+ // src/util/as-array.ts
1087
+ function asArray(value) {
1088
+ return value === void 0 ? [] : Array.isArray(value) ? value : [value];
1089
+ }
1090
+
993
1091
  // src/prompt/convert-to-language-model-prompt.ts
994
1092
  async function convertToLanguageModelPrompt({
995
1093
  prompt,
@@ -1002,7 +1100,11 @@ async function convertToLanguageModelPrompt({
1002
1100
  supportedUrls
1003
1101
  );
1004
1102
  const messages = [
1005
- ...prompt.system != null ? [{ role: "system", content: prompt.system }] : [],
1103
+ ...prompt.system != null ? typeof prompt.system === "string" ? [{ role: "system", content: prompt.system }] : asArray(prompt.system).map((message) => ({
1104
+ role: "system",
1105
+ content: message.content,
1106
+ providerOptions: message.providerOptions
1107
+ })) : [],
1006
1108
  ...prompt.messages.map(
1007
1109
  (message) => convertToLanguageModelMessage({ message, downloadedAssets })
1008
1110
  )
@@ -1142,8 +1244,8 @@ async function downloadAssets(messages, download2, supportedUrls) {
1142
1244
  ).flat().filter(
1143
1245
  (part) => part.type === "image" || part.type === "file"
1144
1246
  ).map((part) => {
1145
- var _a15;
1146
- const mediaType = (_a15 = part.mediaType) != null ? _a15 : part.type === "image" ? "image/*" : void 0;
1247
+ var _a14;
1248
+ const mediaType = (_a14 = part.mediaType) != null ? _a14 : part.type === "image" ? "image/*" : void 0;
1147
1249
  let data = part.type === "image" ? part.image : part.data;
1148
1250
  if (typeof data === "string") {
1149
1251
  try {
@@ -1156,7 +1258,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
1156
1258
  (part) => part.data instanceof URL
1157
1259
  ).map((part) => ({
1158
1260
  url: part.data,
1159
- isUrlSupportedByModel: part.mediaType != null && (0, import_provider_utils4.isUrlSupported)({
1261
+ isUrlSupportedByModel: part.mediaType != null && (0, import_provider_utils6.isUrlSupported)({
1160
1262
  url: part.data.toString(),
1161
1263
  mediaType: part.mediaType,
1162
1264
  supportedUrls
@@ -1173,7 +1275,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
1173
1275
  );
1174
1276
  }
1175
1277
  function convertPartToLanguageModelPart(part, downloadedAssets) {
1176
- var _a15;
1278
+ var _a14;
1177
1279
  if (part.type === "text") {
1178
1280
  return {
1179
1281
  type: "text",
@@ -1206,7 +1308,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1206
1308
  switch (type) {
1207
1309
  case "image": {
1208
1310
  if (data instanceof Uint8Array || typeof data === "string") {
1209
- mediaType = (_a15 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a15 : mediaType;
1311
+ mediaType = (_a14 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a14 : mediaType;
1210
1312
  }
1211
1313
  return {
1212
1314
  type: "file",
@@ -1258,19 +1360,21 @@ function mapToolResultOutput(output) {
1258
1360
  }
1259
1361
 
1260
1362
  // src/prompt/create-tool-model-output.ts
1261
- var import_provider18 = require("@ai-sdk/provider");
1262
- function createToolModelOutput({
1363
+ var import_provider17 = require("@ai-sdk/provider");
1364
+ async function createToolModelOutput({
1365
+ toolCallId,
1366
+ input,
1263
1367
  output,
1264
1368
  tool: tool2,
1265
1369
  errorMode
1266
1370
  }) {
1267
1371
  if (errorMode === "text") {
1268
- return { type: "error-text", value: (0, import_provider18.getErrorMessage)(output) };
1372
+ return { type: "error-text", value: (0, import_provider17.getErrorMessage)(output) };
1269
1373
  } else if (errorMode === "json") {
1270
1374
  return { type: "error-json", value: toJSONValue(output) };
1271
1375
  }
1272
1376
  if (tool2 == null ? void 0 : tool2.toModelOutput) {
1273
- return tool2.toModelOutput(output);
1377
+ return await tool2.toModelOutput({ toolCallId, input, output });
1274
1378
  }
1275
1379
  return typeof output === "string" ? { type: "text", value: output } : { type: "json", value: toJSONValue(output) };
1276
1380
  }
@@ -1372,7 +1476,7 @@ function prepareCallSettings({
1372
1476
  }
1373
1477
 
1374
1478
  // src/prompt/prepare-tools-and-tool-choice.ts
1375
- var import_provider_utils5 = require("@ai-sdk/provider-utils");
1479
+ var import_provider_utils7 = require("@ai-sdk/provider-utils");
1376
1480
 
1377
1481
  // src/util/is-non-empty-object.ts
1378
1482
  function isNonEmptyObject(object2) {
@@ -1392,10 +1496,10 @@ async function prepareToolsAndToolChoice({
1392
1496
  };
1393
1497
  }
1394
1498
  const filteredTools = activeTools != null ? Object.entries(tools).filter(
1395
- ([name15]) => activeTools.includes(name15)
1499
+ ([name14]) => activeTools.includes(name14)
1396
1500
  ) : Object.entries(tools);
1397
1501
  const languageModelTools = [];
1398
- for (const [name15, tool2] of filteredTools) {
1502
+ for (const [name14, tool2] of filteredTools) {
1399
1503
  const toolType = tool2.type;
1400
1504
  switch (toolType) {
1401
1505
  case void 0:
@@ -1403,16 +1507,18 @@ async function prepareToolsAndToolChoice({
1403
1507
  case "function":
1404
1508
  languageModelTools.push({
1405
1509
  type: "function",
1406
- name: name15,
1510
+ name: name14,
1407
1511
  description: tool2.description,
1408
- inputSchema: await (0, import_provider_utils5.asSchema)(tool2.inputSchema).jsonSchema,
1409
- providerOptions: tool2.providerOptions
1512
+ inputSchema: await (0, import_provider_utils7.asSchema)(tool2.inputSchema).jsonSchema,
1513
+ ...tool2.inputExamples != null ? { inputExamples: tool2.inputExamples } : {},
1514
+ providerOptions: tool2.providerOptions,
1515
+ ...tool2.strict != null ? { strict: tool2.strict } : {}
1410
1516
  });
1411
1517
  break;
1412
- case "provider-defined":
1518
+ case "provider":
1413
1519
  languageModelTools.push({
1414
- type: "provider-defined",
1415
- name: name15,
1520
+ type: "provider",
1521
+ name: name14,
1416
1522
  id: tool2.id,
1417
1523
  args: tool2.args
1418
1524
  });
@@ -1430,8 +1536,8 @@ async function prepareToolsAndToolChoice({
1430
1536
  }
1431
1537
 
1432
1538
  // src/prompt/standardize-prompt.ts
1433
- var import_provider19 = require("@ai-sdk/provider");
1434
- var import_provider_utils6 = require("@ai-sdk/provider-utils");
1539
+ var import_provider18 = require("@ai-sdk/provider");
1540
+ var import_provider_utils8 = require("@ai-sdk/provider-utils");
1435
1541
  var import_v46 = require("zod/v4");
1436
1542
 
1437
1543
  // src/prompt/message.ts
@@ -1603,7 +1709,6 @@ var systemModelMessageSchema = import_v45.z.object(
1603
1709
  providerOptions: providerMetadataSchema.optional()
1604
1710
  }
1605
1711
  );
1606
- var coreSystemMessageSchema = systemModelMessageSchema;
1607
1712
  var userModelMessageSchema = import_v45.z.object({
1608
1713
  role: import_v45.z.literal("user"),
1609
1714
  content: import_v45.z.union([
@@ -1612,7 +1717,6 @@ var userModelMessageSchema = import_v45.z.object({
1612
1717
  ]),
1613
1718
  providerOptions: providerMetadataSchema.optional()
1614
1719
  });
1615
- var coreUserMessageSchema = userModelMessageSchema;
1616
1720
  var assistantModelMessageSchema = import_v45.z.object({
1617
1721
  role: import_v45.z.literal("assistant"),
1618
1722
  content: import_v45.z.union([
@@ -1630,39 +1734,38 @@ var assistantModelMessageSchema = import_v45.z.object({
1630
1734
  ]),
1631
1735
  providerOptions: providerMetadataSchema.optional()
1632
1736
  });
1633
- var coreAssistantMessageSchema = assistantModelMessageSchema;
1634
1737
  var toolModelMessageSchema = import_v45.z.object({
1635
1738
  role: import_v45.z.literal("tool"),
1636
1739
  content: import_v45.z.array(import_v45.z.union([toolResultPartSchema, toolApprovalResponseSchema])),
1637
1740
  providerOptions: providerMetadataSchema.optional()
1638
1741
  });
1639
- var coreToolMessageSchema = toolModelMessageSchema;
1640
1742
  var modelMessageSchema = import_v45.z.union([
1641
1743
  systemModelMessageSchema,
1642
1744
  userModelMessageSchema,
1643
1745
  assistantModelMessageSchema,
1644
1746
  toolModelMessageSchema
1645
1747
  ]);
1646
- var coreMessageSchema = modelMessageSchema;
1647
1748
 
1648
1749
  // src/prompt/standardize-prompt.ts
1649
1750
  async function standardizePrompt(prompt) {
1650
1751
  if (prompt.prompt == null && prompt.messages == null) {
1651
- throw new import_provider19.InvalidPromptError({
1752
+ throw new import_provider18.InvalidPromptError({
1652
1753
  prompt,
1653
1754
  message: "prompt or messages must be defined"
1654
1755
  });
1655
1756
  }
1656
1757
  if (prompt.prompt != null && prompt.messages != null) {
1657
- throw new import_provider19.InvalidPromptError({
1758
+ throw new import_provider18.InvalidPromptError({
1658
1759
  prompt,
1659
1760
  message: "prompt and messages cannot be defined at the same time"
1660
1761
  });
1661
1762
  }
1662
- if (prompt.system != null && typeof prompt.system !== "string") {
1663
- throw new import_provider19.InvalidPromptError({
1763
+ if (prompt.system != null && typeof prompt.system !== "string" && !asArray(prompt.system).every(
1764
+ (message) => typeof message === "object" && message !== null && "role" in message && message.role === "system"
1765
+ )) {
1766
+ throw new import_provider18.InvalidPromptError({
1664
1767
  prompt,
1665
- message: "system must be a string"
1768
+ message: "system must be a string, SystemModelMessage, or array of SystemModelMessage"
1666
1769
  });
1667
1770
  }
1668
1771
  let messages;
@@ -1673,25 +1776,25 @@ async function standardizePrompt(prompt) {
1673
1776
  } else if (prompt.messages != null) {
1674
1777
  messages = prompt.messages;
1675
1778
  } else {
1676
- throw new import_provider19.InvalidPromptError({
1779
+ throw new import_provider18.InvalidPromptError({
1677
1780
  prompt,
1678
1781
  message: "prompt or messages must be defined"
1679
1782
  });
1680
1783
  }
1681
1784
  if (messages.length === 0) {
1682
- throw new import_provider19.InvalidPromptError({
1785
+ throw new import_provider18.InvalidPromptError({
1683
1786
  prompt,
1684
1787
  message: "messages must not be empty"
1685
1788
  });
1686
1789
  }
1687
- const validationResult = await (0, import_provider_utils6.safeValidateTypes)({
1790
+ const validationResult = await (0, import_provider_utils8.safeValidateTypes)({
1688
1791
  value: messages,
1689
1792
  schema: import_v46.z.array(modelMessageSchema)
1690
1793
  });
1691
1794
  if (!validationResult.success) {
1692
- throw new import_provider19.InvalidPromptError({
1795
+ throw new import_provider18.InvalidPromptError({
1693
1796
  prompt,
1694
- message: "The messages must be a ModelMessage[]. If you have passed a UIMessage[], you can use convertToModelMessages to convert them.",
1797
+ message: "The messages do not match the ModelMessage[] schema.",
1695
1798
  cause: validationResult.error
1696
1799
  });
1697
1800
  }
@@ -1703,16 +1806,30 @@ async function standardizePrompt(prompt) {
1703
1806
 
1704
1807
  // src/prompt/wrap-gateway-error.ts
1705
1808
  var import_gateway2 = require("@ai-sdk/gateway");
1706
- var import_provider20 = require("@ai-sdk/provider");
1809
+ var import_provider19 = require("@ai-sdk/provider");
1707
1810
  function wrapGatewayError(error) {
1708
- if (import_gateway2.GatewayAuthenticationError.isInstance(error) || import_gateway2.GatewayModelNotFoundError.isInstance(error)) {
1709
- return new import_provider20.AISDKError({
1811
+ if (!import_gateway2.GatewayAuthenticationError.isInstance(error))
1812
+ return error;
1813
+ const isProductionEnv = (process == null ? void 0 : process.env.NODE_ENV) === "production";
1814
+ const moreInfoURL = "https://ai-sdk.dev/unauthenticated-ai-gateway";
1815
+ if (isProductionEnv) {
1816
+ return new import_provider19.AISDKError({
1710
1817
  name: "GatewayError",
1711
- message: "Vercel AI Gateway access failed. If you want to use AI SDK providers directly, use the providers, e.g. @ai-sdk/openai, or register a different global default provider.",
1712
- cause: error
1818
+ message: `Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: ${moreInfoURL}`
1713
1819
  });
1714
1820
  }
1715
- return error;
1821
+ return Object.assign(
1822
+ new Error(`\x1B[1m\x1B[31mUnauthenticated request to AI Gateway.\x1B[0m
1823
+
1824
+ To authenticate, set the \x1B[33mAI_GATEWAY_API_KEY\x1B[0m environment variable with your API key.
1825
+
1826
+ Alternatively, you can use a provider module instead of the AI Gateway.
1827
+
1828
+ Learn more: \x1B[34m${moreInfoURL}\x1B[0m
1829
+
1830
+ `),
1831
+ { name: "GatewayAuthenticationError" }
1832
+ );
1716
1833
  }
1717
1834
 
1718
1835
  // src/telemetry/assemble-operation-name.ts
@@ -1737,7 +1854,7 @@ function getBaseTelemetryAttributes({
1737
1854
  telemetry,
1738
1855
  headers
1739
1856
  }) {
1740
- var _a15;
1857
+ var _a14;
1741
1858
  return {
1742
1859
  "ai.model.provider": model.provider,
1743
1860
  "ai.model.id": model.modelId,
@@ -1747,7 +1864,7 @@ function getBaseTelemetryAttributes({
1747
1864
  return attributes;
1748
1865
  }, {}),
1749
1866
  // add metadata as attributes:
1750
- ...Object.entries((_a15 = telemetry == null ? void 0 : telemetry.metadata) != null ? _a15 : {}).reduce(
1867
+ ...Object.entries((_a14 = telemetry == null ? void 0 : telemetry.metadata) != null ? _a14 : {}).reduce(
1751
1868
  (attributes, [key, value]) => {
1752
1869
  attributes[`ai.telemetry.metadata.${key}`] = value;
1753
1870
  return attributes;
@@ -1772,7 +1889,7 @@ var noopTracer = {
1772
1889
  startSpan() {
1773
1890
  return noopSpan;
1774
1891
  },
1775
- startActiveSpan(name15, arg1, arg2, arg3) {
1892
+ startActiveSpan(name14, arg1, arg2, arg3) {
1776
1893
  if (typeof arg1 === "function") {
1777
1894
  return arg1(noopSpan);
1778
1895
  }
@@ -1842,14 +1959,14 @@ function getTracer({
1842
1959
  // src/telemetry/record-span.ts
1843
1960
  var import_api2 = require("@opentelemetry/api");
1844
1961
  async function recordSpan({
1845
- name: name15,
1962
+ name: name14,
1846
1963
  tracer,
1847
1964
  attributes,
1848
1965
  fn,
1849
1966
  endWhenDone = true
1850
1967
  }) {
1851
1968
  return tracer.startActiveSpan(
1852
- name15,
1969
+ name14,
1853
1970
  { attributes: await attributes },
1854
1971
  async (span) => {
1855
1972
  try {
@@ -1939,10 +2056,74 @@ function stringifyForTelemetry(prompt) {
1939
2056
  }
1940
2057
 
1941
2058
  // src/types/usage.ts
2059
+ function asLanguageModelUsage(usage) {
2060
+ return {
2061
+ inputTokens: usage.inputTokens.total,
2062
+ inputTokenDetails: {
2063
+ noCacheTokens: usage.inputTokens.noCache,
2064
+ cacheReadTokens: usage.inputTokens.cacheRead,
2065
+ cacheWriteTokens: usage.inputTokens.cacheWrite
2066
+ },
2067
+ outputTokens: usage.outputTokens.total,
2068
+ outputTokenDetails: {
2069
+ textTokens: usage.outputTokens.text,
2070
+ reasoningTokens: usage.outputTokens.reasoning
2071
+ },
2072
+ totalTokens: addTokenCounts(
2073
+ usage.inputTokens.total,
2074
+ usage.outputTokens.total
2075
+ ),
2076
+ raw: usage.raw,
2077
+ reasoningTokens: usage.outputTokens.reasoning,
2078
+ cachedInputTokens: usage.inputTokens.cacheRead
2079
+ };
2080
+ }
2081
+ function createNullLanguageModelUsage() {
2082
+ return {
2083
+ inputTokens: void 0,
2084
+ inputTokenDetails: {
2085
+ noCacheTokens: void 0,
2086
+ cacheReadTokens: void 0,
2087
+ cacheWriteTokens: void 0
2088
+ },
2089
+ outputTokens: void 0,
2090
+ outputTokenDetails: {
2091
+ textTokens: void 0,
2092
+ reasoningTokens: void 0
2093
+ },
2094
+ totalTokens: void 0,
2095
+ raw: void 0
2096
+ };
2097
+ }
1942
2098
  function addLanguageModelUsage(usage1, usage2) {
2099
+ var _a14, _b, _c, _d, _e, _f, _g, _h, _i, _j;
1943
2100
  return {
1944
2101
  inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),
2102
+ inputTokenDetails: {
2103
+ noCacheTokens: addTokenCounts(
2104
+ (_a14 = usage1.inputTokenDetails) == null ? void 0 : _a14.noCacheTokens,
2105
+ (_b = usage2.inputTokenDetails) == null ? void 0 : _b.noCacheTokens
2106
+ ),
2107
+ cacheReadTokens: addTokenCounts(
2108
+ (_c = usage1.inputTokenDetails) == null ? void 0 : _c.cacheReadTokens,
2109
+ (_d = usage2.inputTokenDetails) == null ? void 0 : _d.cacheReadTokens
2110
+ ),
2111
+ cacheWriteTokens: addTokenCounts(
2112
+ (_e = usage1.inputTokenDetails) == null ? void 0 : _e.cacheWriteTokens,
2113
+ (_f = usage2.inputTokenDetails) == null ? void 0 : _f.cacheWriteTokens
2114
+ )
2115
+ },
1945
2116
  outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),
2117
+ outputTokenDetails: {
2118
+ textTokens: addTokenCounts(
2119
+ (_g = usage1.outputTokenDetails) == null ? void 0 : _g.textTokens,
2120
+ (_h = usage2.outputTokenDetails) == null ? void 0 : _h.textTokens
2121
+ ),
2122
+ reasoningTokens: addTokenCounts(
2123
+ (_i = usage1.outputTokenDetails) == null ? void 0 : _i.reasoningTokens,
2124
+ (_j = usage2.outputTokenDetails) == null ? void 0 : _j.reasoningTokens
2125
+ )
2126
+ },
1946
2127
  totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),
1947
2128
  reasoningTokens: addTokenCounts(
1948
2129
  usage1.reasoningTokens,
@@ -1965,14 +2146,42 @@ function addImageModelUsage(usage1, usage2) {
1965
2146
  };
1966
2147
  }
1967
2148
 
1968
- // src/util/as-array.ts
1969
- function asArray(value) {
1970
- return value === void 0 ? [] : Array.isArray(value) ? value : [value];
2149
+ // src/util/merge-objects.ts
2150
+ function mergeObjects(base, overrides) {
2151
+ if (base === void 0 && overrides === void 0) {
2152
+ return void 0;
2153
+ }
2154
+ if (base === void 0) {
2155
+ return overrides;
2156
+ }
2157
+ if (overrides === void 0) {
2158
+ return base;
2159
+ }
2160
+ const result = { ...base };
2161
+ for (const key in overrides) {
2162
+ if (Object.prototype.hasOwnProperty.call(overrides, key)) {
2163
+ const overridesValue = overrides[key];
2164
+ if (overridesValue === void 0)
2165
+ continue;
2166
+ const baseValue = key in base ? base[key] : void 0;
2167
+ const isSourceObject = overridesValue !== null && typeof overridesValue === "object" && !Array.isArray(overridesValue) && !(overridesValue instanceof Date) && !(overridesValue instanceof RegExp);
2168
+ const isTargetObject = baseValue !== null && baseValue !== void 0 && typeof baseValue === "object" && !Array.isArray(baseValue) && !(baseValue instanceof Date) && !(baseValue instanceof RegExp);
2169
+ if (isSourceObject && isTargetObject) {
2170
+ result[key] = mergeObjects(
2171
+ baseValue,
2172
+ overridesValue
2173
+ );
2174
+ } else {
2175
+ result[key] = overridesValue;
2176
+ }
2177
+ }
2178
+ }
2179
+ return result;
1971
2180
  }
1972
2181
 
1973
2182
  // src/util/retry-with-exponential-backoff.ts
1974
- var import_provider21 = require("@ai-sdk/provider");
1975
- var import_provider_utils7 = require("@ai-sdk/provider-utils");
2183
+ var import_provider20 = require("@ai-sdk/provider");
2184
+ var import_provider_utils9 = require("@ai-sdk/provider-utils");
1976
2185
  function getRetryDelayInMs({
1977
2186
  error,
1978
2187
  exponentialBackoffDelay
@@ -2022,13 +2231,13 @@ async function _retryWithExponentialBackoff(f, {
2022
2231
  try {
2023
2232
  return await f();
2024
2233
  } catch (error) {
2025
- if ((0, import_provider_utils7.isAbortError)(error)) {
2234
+ if ((0, import_provider_utils9.isAbortError)(error)) {
2026
2235
  throw error;
2027
2236
  }
2028
2237
  if (maxRetries === 0) {
2029
2238
  throw error;
2030
2239
  }
2031
- const errorMessage = (0, import_provider_utils7.getErrorMessage)(error);
2240
+ const errorMessage = (0, import_provider_utils9.getErrorMessage)(error);
2032
2241
  const newErrors = [...errors, error];
2033
2242
  const tryNumber = newErrors.length;
2034
2243
  if (tryNumber > maxRetries) {
@@ -2038,8 +2247,8 @@ async function _retryWithExponentialBackoff(f, {
2038
2247
  errors: newErrors
2039
2248
  });
2040
2249
  }
2041
- if (error instanceof Error && import_provider21.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
2042
- await (0, import_provider_utils7.delay)(
2250
+ if (error instanceof Error && import_provider20.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
2251
+ await (0, import_provider_utils9.delay)(
2043
2252
  getRetryDelayInMs({
2044
2253
  error,
2045
2254
  exponentialBackoffDelay: delayInMs
@@ -2163,7 +2372,7 @@ function collectToolApprovals({
2163
2372
  }
2164
2373
 
2165
2374
  // src/generate-text/execute-tool-call.ts
2166
- var import_provider_utils8 = require("@ai-sdk/provider-utils");
2375
+ var import_provider_utils10 = require("@ai-sdk/provider-utils");
2167
2376
  async function executeToolCall({
2168
2377
  toolCall,
2169
2378
  tools,
@@ -2199,7 +2408,7 @@ async function executeToolCall({
2199
2408
  fn: async (span) => {
2200
2409
  let output;
2201
2410
  try {
2202
- const stream = (0, import_provider_utils8.executeTool)({
2411
+ const stream = (0, import_provider_utils10.executeTool)({
2203
2412
  execute: tool2.execute.bind(tool2),
2204
2413
  input,
2205
2414
  options: {
@@ -2229,7 +2438,8 @@ async function executeToolCall({
2229
2438
  toolName,
2230
2439
  input,
2231
2440
  error,
2232
- dynamic: tool2.type === "dynamic"
2441
+ dynamic: tool2.type === "dynamic",
2442
+ ...toolCall.providerMetadata != null ? { providerMetadata: toolCall.providerMetadata } : {}
2233
2443
  };
2234
2444
  }
2235
2445
  try {
@@ -2251,7 +2461,8 @@ async function executeToolCall({
2251
2461
  toolName,
2252
2462
  input,
2253
2463
  output,
2254
- dynamic: tool2.type === "dynamic"
2464
+ dynamic: tool2.type === "dynamic",
2465
+ ...toolCall.providerMetadata != null ? { providerMetadata: toolCall.providerMetadata } : {}
2255
2466
  };
2256
2467
  }
2257
2468
  });
@@ -2269,7 +2480,7 @@ function extractTextContent(content) {
2269
2480
  }
2270
2481
 
2271
2482
  // src/generate-text/generated-file.ts
2272
- var import_provider_utils9 = require("@ai-sdk/provider-utils");
2483
+ var import_provider_utils11 = require("@ai-sdk/provider-utils");
2273
2484
  var DefaultGeneratedFile = class {
2274
2485
  constructor({
2275
2486
  data,
@@ -2283,14 +2494,14 @@ var DefaultGeneratedFile = class {
2283
2494
  // lazy conversion with caching to avoid unnecessary conversion overhead:
2284
2495
  get base64() {
2285
2496
  if (this.base64Data == null) {
2286
- this.base64Data = (0, import_provider_utils9.convertUint8ArrayToBase64)(this.uint8ArrayData);
2497
+ this.base64Data = (0, import_provider_utils11.convertUint8ArrayToBase64)(this.uint8ArrayData);
2287
2498
  }
2288
2499
  return this.base64Data;
2289
2500
  }
2290
2501
  // lazy conversion with caching to avoid unnecessary conversion overhead:
2291
2502
  get uint8Array() {
2292
2503
  if (this.uint8ArrayData == null) {
2293
- this.uint8ArrayData = (0, import_provider_utils9.convertBase64ToUint8Array)(this.base64Data);
2504
+ this.uint8ArrayData = (0, import_provider_utils11.convertBase64ToUint8Array)(this.base64Data);
2294
2505
  }
2295
2506
  return this.uint8ArrayData;
2296
2507
  }
@@ -2331,11 +2542,11 @@ __export(output_exports, {
2331
2542
  object: () => object,
2332
2543
  text: () => text
2333
2544
  });
2334
- var import_provider22 = require("@ai-sdk/provider");
2335
- var import_provider_utils11 = require("@ai-sdk/provider-utils");
2545
+ var import_provider21 = require("@ai-sdk/provider");
2546
+ var import_provider_utils13 = require("@ai-sdk/provider-utils");
2336
2547
 
2337
2548
  // src/util/parse-partial-json.ts
2338
- var import_provider_utils10 = require("@ai-sdk/provider-utils");
2549
+ var import_provider_utils12 = require("@ai-sdk/provider-utils");
2339
2550
 
2340
2551
  // src/util/fix-json.ts
2341
2552
  function fixJson(input) {
@@ -2660,11 +2871,11 @@ async function parsePartialJson(jsonText) {
2660
2871
  if (jsonText === void 0) {
2661
2872
  return { value: void 0, state: "undefined-input" };
2662
2873
  }
2663
- let result = await (0, import_provider_utils10.safeParseJSON)({ text: jsonText });
2874
+ let result = await (0, import_provider_utils12.safeParseJSON)({ text: jsonText });
2664
2875
  if (result.success) {
2665
2876
  return { value: result.value, state: "successful-parse" };
2666
2877
  }
2667
- result = await (0, import_provider_utils10.safeParseJSON)({ text: fixJson(jsonText) });
2878
+ result = await (0, import_provider_utils12.safeParseJSON)({ text: fixJson(jsonText) });
2668
2879
  if (result.success) {
2669
2880
  return { value: result.value, state: "repaired-parse" };
2670
2881
  }
@@ -2682,16 +2893,20 @@ var text = () => ({
2682
2893
  }
2683
2894
  });
2684
2895
  var object = ({
2685
- schema: inputSchema
2896
+ schema: inputSchema,
2897
+ name: name14,
2898
+ description
2686
2899
  }) => {
2687
- const schema = (0, import_provider_utils11.asSchema)(inputSchema);
2900
+ const schema = (0, import_provider_utils13.asSchema)(inputSchema);
2688
2901
  return {
2689
- responseFormat: (0, import_provider_utils11.resolve)(schema.jsonSchema).then((jsonSchema2) => ({
2902
+ responseFormat: (0, import_provider_utils13.resolve)(schema.jsonSchema).then((jsonSchema2) => ({
2690
2903
  type: "json",
2691
- schema: jsonSchema2
2904
+ schema: jsonSchema2,
2905
+ ...name14 != null && { name: name14 },
2906
+ ...description != null && { description }
2692
2907
  })),
2693
2908
  async parseCompleteOutput({ text: text2 }, context) {
2694
- const parseResult = await (0, import_provider_utils11.safeParseJSON)({ text: text2 });
2909
+ const parseResult = await (0, import_provider_utils13.safeParseJSON)({ text: text2 });
2695
2910
  if (!parseResult.success) {
2696
2911
  throw new NoObjectGeneratedError({
2697
2912
  message: "No object generated: could not parse the response.",
@@ -2702,7 +2917,7 @@ var object = ({
2702
2917
  finishReason: context.finishReason
2703
2918
  });
2704
2919
  }
2705
- const validationResult = await (0, import_provider_utils11.safeValidateTypes)({
2920
+ const validationResult = await (0, import_provider_utils13.safeValidateTypes)({
2706
2921
  value: parseResult.value,
2707
2922
  schema
2708
2923
  });
@@ -2737,12 +2952,14 @@ var object = ({
2737
2952
  };
2738
2953
  };
2739
2954
  var array = ({
2740
- element: inputElementSchema
2955
+ element: inputElementSchema,
2956
+ name: name14,
2957
+ description
2741
2958
  }) => {
2742
- const elementSchema = (0, import_provider_utils11.asSchema)(inputElementSchema);
2959
+ const elementSchema = (0, import_provider_utils13.asSchema)(inputElementSchema);
2743
2960
  return {
2744
2961
  // JSON schema that describes an array of elements:
2745
- responseFormat: (0, import_provider_utils11.resolve)(elementSchema.jsonSchema).then((jsonSchema2) => {
2962
+ responseFormat: (0, import_provider_utils13.resolve)(elementSchema.jsonSchema).then((jsonSchema2) => {
2746
2963
  const { $schema, ...itemSchema } = jsonSchema2;
2747
2964
  return {
2748
2965
  type: "json",
@@ -2754,11 +2971,13 @@ var array = ({
2754
2971
  },
2755
2972
  required: ["elements"],
2756
2973
  additionalProperties: false
2757
- }
2974
+ },
2975
+ ...name14 != null && { name: name14 },
2976
+ ...description != null && { description }
2758
2977
  };
2759
2978
  }),
2760
2979
  async parseCompleteOutput({ text: text2 }, context) {
2761
- const parseResult = await (0, import_provider_utils11.safeParseJSON)({ text: text2 });
2980
+ const parseResult = await (0, import_provider_utils13.safeParseJSON)({ text: text2 });
2762
2981
  if (!parseResult.success) {
2763
2982
  throw new NoObjectGeneratedError({
2764
2983
  message: "No object generated: could not parse the response.",
@@ -2773,7 +2992,7 @@ var array = ({
2773
2992
  if (outerValue == null || typeof outerValue !== "object" || !("elements" in outerValue) || !Array.isArray(outerValue.elements)) {
2774
2993
  throw new NoObjectGeneratedError({
2775
2994
  message: "No object generated: response did not match schema.",
2776
- cause: new import_provider22.TypeValidationError({
2995
+ cause: new import_provider21.TypeValidationError({
2777
2996
  value: outerValue,
2778
2997
  cause: "response must be an object with an elements array"
2779
2998
  }),
@@ -2784,7 +3003,7 @@ var array = ({
2784
3003
  });
2785
3004
  }
2786
3005
  for (const element of outerValue.elements) {
2787
- const validationResult = await (0, import_provider_utils11.safeValidateTypes)({
3006
+ const validationResult = await (0, import_provider_utils13.safeValidateTypes)({
2788
3007
  value: element,
2789
3008
  schema: elementSchema
2790
3009
  });
@@ -2817,7 +3036,7 @@ var array = ({
2817
3036
  const rawElements = result.state === "repaired-parse" && outerValue.elements.length > 0 ? outerValue.elements.slice(0, -1) : outerValue.elements;
2818
3037
  const parsedElements = [];
2819
3038
  for (const rawElement of rawElements) {
2820
- const validationResult = await (0, import_provider_utils11.safeValidateTypes)({
3039
+ const validationResult = await (0, import_provider_utils13.safeValidateTypes)({
2821
3040
  value: rawElement,
2822
3041
  schema: elementSchema
2823
3042
  });
@@ -2832,7 +3051,9 @@ var array = ({
2832
3051
  };
2833
3052
  };
2834
3053
  var choice = ({
2835
- options: choiceOptions
3054
+ options: choiceOptions,
3055
+ name: name14,
3056
+ description
2836
3057
  }) => {
2837
3058
  return {
2838
3059
  // JSON schema that describes an enumeration:
@@ -2846,10 +3067,12 @@ var choice = ({
2846
3067
  },
2847
3068
  required: ["result"],
2848
3069
  additionalProperties: false
2849
- }
3070
+ },
3071
+ ...name14 != null && { name: name14 },
3072
+ ...description != null && { description }
2850
3073
  }),
2851
3074
  async parseCompleteOutput({ text: text2 }, context) {
2852
- const parseResult = await (0, import_provider_utils11.safeParseJSON)({ text: text2 });
3075
+ const parseResult = await (0, import_provider_utils13.safeParseJSON)({ text: text2 });
2853
3076
  if (!parseResult.success) {
2854
3077
  throw new NoObjectGeneratedError({
2855
3078
  message: "No object generated: could not parse the response.",
@@ -2864,7 +3087,7 @@ var choice = ({
2864
3087
  if (outerValue == null || typeof outerValue !== "object" || !("result" in outerValue) || typeof outerValue.result !== "string" || !choiceOptions.includes(outerValue.result)) {
2865
3088
  throw new NoObjectGeneratedError({
2866
3089
  message: "No object generated: response did not match schema.",
2867
- cause: new import_provider22.TypeValidationError({
3090
+ cause: new import_provider21.TypeValidationError({
2868
3091
  value: outerValue,
2869
3092
  cause: "response must be an object that contains a choice value."
2870
3093
  }),
@@ -2902,13 +3125,18 @@ var choice = ({
2902
3125
  }
2903
3126
  };
2904
3127
  };
2905
- var json = () => {
3128
+ var json = ({
3129
+ name: name14,
3130
+ description
3131
+ } = {}) => {
2906
3132
  return {
2907
3133
  responseFormat: Promise.resolve({
2908
- type: "json"
3134
+ type: "json",
3135
+ ...name14 != null && { name: name14 },
3136
+ ...description != null && { description }
2909
3137
  }),
2910
3138
  async parseCompleteOutput({ text: text2 }, context) {
2911
- const parseResult = await (0, import_provider_utils11.safeParseJSON)({ text: text2 });
3139
+ const parseResult = await (0, import_provider_utils13.safeParseJSON)({ text: text2 });
2912
3140
  if (!parseResult.success) {
2913
3141
  throw new NoObjectGeneratedError({
2914
3142
  message: "No object generated: could not parse the response.",
@@ -2938,7 +3166,7 @@ var json = () => {
2938
3166
  };
2939
3167
 
2940
3168
  // src/generate-text/parse-tool-call.ts
2941
- var import_provider_utils12 = require("@ai-sdk/provider-utils");
3169
+ var import_provider_utils14 = require("@ai-sdk/provider-utils");
2942
3170
  async function parseToolCall({
2943
3171
  toolCall,
2944
3172
  tools,
@@ -2946,7 +3174,7 @@ async function parseToolCall({
2946
3174
  system,
2947
3175
  messages
2948
3176
  }) {
2949
- var _a15;
3177
+ var _a14;
2950
3178
  try {
2951
3179
  if (tools == null) {
2952
3180
  if (toolCall.providerExecuted && toolCall.dynamic) {
@@ -2967,7 +3195,7 @@ async function parseToolCall({
2967
3195
  tools,
2968
3196
  inputSchema: async ({ toolName }) => {
2969
3197
  const { inputSchema } = tools[toolName];
2970
- return await (0, import_provider_utils12.asSchema)(inputSchema).jsonSchema;
3198
+ return await (0, import_provider_utils14.asSchema)(inputSchema).jsonSchema;
2971
3199
  },
2972
3200
  system,
2973
3201
  messages,
@@ -2985,7 +3213,7 @@ async function parseToolCall({
2985
3213
  return await doParseToolCall({ toolCall: repairedToolCall, tools });
2986
3214
  }
2987
3215
  } catch (error) {
2988
- const parsedInput = await (0, import_provider_utils12.safeParseJSON)({ text: toolCall.input });
3216
+ const parsedInput = await (0, import_provider_utils14.safeParseJSON)({ text: toolCall.input });
2989
3217
  const input = parsedInput.success ? parsedInput.value : toolCall.input;
2990
3218
  return {
2991
3219
  type: "tool-call",
@@ -2995,12 +3223,14 @@ async function parseToolCall({
2995
3223
  dynamic: true,
2996
3224
  invalid: true,
2997
3225
  error,
2998
- title: (_a15 = tools == null ? void 0 : tools[toolCall.toolName]) == null ? void 0 : _a15.title
3226
+ title: (_a14 = tools == null ? void 0 : tools[toolCall.toolName]) == null ? void 0 : _a14.title,
3227
+ providerExecuted: toolCall.providerExecuted,
3228
+ providerMetadata: toolCall.providerMetadata
2999
3229
  };
3000
3230
  }
3001
3231
  }
3002
3232
  async function parseProviderExecutedDynamicToolCall(toolCall) {
3003
- const parseResult = toolCall.input.trim() === "" ? { success: true, value: {} } : await (0, import_provider_utils12.safeParseJSON)({ text: toolCall.input });
3233
+ const parseResult = toolCall.input.trim() === "" ? { success: true, value: {} } : await (0, import_provider_utils14.safeParseJSON)({ text: toolCall.input });
3004
3234
  if (parseResult.success === false) {
3005
3235
  throw new InvalidToolInputError({
3006
3236
  toolName: toolCall.toolName,
@@ -3033,8 +3263,8 @@ async function doParseToolCall({
3033
3263
  availableTools: Object.keys(tools)
3034
3264
  });
3035
3265
  }
3036
- const schema = (0, import_provider_utils12.asSchema)(tool2.inputSchema);
3037
- const parseResult = toolCall.input.trim() === "" ? await (0, import_provider_utils12.safeValidateTypes)({ value: {}, schema }) : await (0, import_provider_utils12.safeParseJSON)({ text: toolCall.input, schema });
3266
+ const schema = (0, import_provider_utils14.asSchema)(tool2.inputSchema);
3267
+ const parseResult = toolCall.input.trim() === "" ? await (0, import_provider_utils14.safeValidateTypes)({ value: {}, schema }) : await (0, import_provider_utils14.safeParseJSON)({ text: toolCall.input, schema });
3038
3268
  if (parseResult.success === false) {
3039
3269
  throw new InvalidToolInputError({
3040
3270
  toolName,
@@ -3067,6 +3297,7 @@ var DefaultStepResult = class {
3067
3297
  constructor({
3068
3298
  content,
3069
3299
  finishReason,
3300
+ rawFinishReason,
3070
3301
  usage,
3071
3302
  warnings,
3072
3303
  request,
@@ -3075,6 +3306,7 @@ var DefaultStepResult = class {
3075
3306
  }) {
3076
3307
  this.content = content;
3077
3308
  this.finishReason = finishReason;
3309
+ this.rawFinishReason = rawFinishReason;
3078
3310
  this.usage = usage;
3079
3311
  this.warnings = warnings;
3080
3312
  this.request = request;
@@ -3130,8 +3362,8 @@ function stepCountIs(stepCount) {
3130
3362
  }
3131
3363
  function hasToolCall(toolName) {
3132
3364
  return ({ steps }) => {
3133
- var _a15, _b, _c;
3134
- return (_c = (_b = (_a15 = steps[steps.length - 1]) == null ? void 0 : _a15.toolCalls) == null ? void 0 : _b.some(
3365
+ var _a14, _b, _c;
3366
+ return (_c = (_b = (_a14 = steps[steps.length - 1]) == null ? void 0 : _a14.toolCalls) == null ? void 0 : _b.some(
3135
3367
  (toolCall) => toolCall.toolName === toolName
3136
3368
  )) != null ? _c : false;
3137
3369
  };
@@ -3144,92 +3376,118 @@ async function isStopConditionMet({
3144
3376
  }
3145
3377
 
3146
3378
  // src/generate-text/to-response-messages.ts
3147
- function toResponseMessages({
3379
+ async function toResponseMessages({
3148
3380
  content: inputContent,
3149
3381
  tools
3150
3382
  }) {
3151
3383
  const responseMessages = [];
3152
- const content = inputContent.filter((part) => part.type !== "source").filter(
3153
- (part) => (part.type !== "tool-result" || part.providerExecuted) && (part.type !== "tool-error" || part.providerExecuted)
3154
- ).filter((part) => part.type !== "text" || part.text.length > 0).map((part) => {
3384
+ const content = [];
3385
+ for (const part of inputContent) {
3386
+ if (part.type === "source" || (part.type === "tool-result" || part.type === "tool-error") && !part.providerExecuted || part.type === "text" && part.text.length === 0) {
3387
+ continue;
3388
+ }
3155
3389
  switch (part.type) {
3156
3390
  case "text":
3157
- return {
3391
+ content.push({
3158
3392
  type: "text",
3159
3393
  text: part.text,
3160
3394
  providerOptions: part.providerMetadata
3161
- };
3395
+ });
3396
+ break;
3162
3397
  case "reasoning":
3163
- return {
3398
+ content.push({
3164
3399
  type: "reasoning",
3165
3400
  text: part.text,
3166
3401
  providerOptions: part.providerMetadata
3167
- };
3402
+ });
3403
+ break;
3168
3404
  case "file":
3169
- return {
3405
+ content.push({
3170
3406
  type: "file",
3171
3407
  data: part.file.base64,
3172
3408
  mediaType: part.file.mediaType,
3173
3409
  providerOptions: part.providerMetadata
3174
- };
3410
+ });
3411
+ break;
3175
3412
  case "tool-call":
3176
- return {
3413
+ content.push({
3177
3414
  type: "tool-call",
3178
3415
  toolCallId: part.toolCallId,
3179
3416
  toolName: part.toolName,
3180
3417
  input: part.input,
3181
3418
  providerExecuted: part.providerExecuted,
3182
3419
  providerOptions: part.providerMetadata
3183
- };
3184
- case "tool-result":
3185
- return {
3420
+ });
3421
+ break;
3422
+ case "tool-result": {
3423
+ const output = await createToolModelOutput({
3424
+ toolCallId: part.toolCallId,
3425
+ input: part.input,
3426
+ tool: tools == null ? void 0 : tools[part.toolName],
3427
+ output: part.output,
3428
+ errorMode: "none"
3429
+ });
3430
+ content.push({
3186
3431
  type: "tool-result",
3187
3432
  toolCallId: part.toolCallId,
3188
3433
  toolName: part.toolName,
3189
- output: createToolModelOutput({
3190
- tool: tools == null ? void 0 : tools[part.toolName],
3191
- output: part.output,
3192
- errorMode: "none"
3193
- }),
3194
- providerExecuted: true,
3434
+ output,
3195
3435
  providerOptions: part.providerMetadata
3196
- };
3197
- case "tool-error":
3198
- return {
3436
+ });
3437
+ break;
3438
+ }
3439
+ case "tool-error": {
3440
+ const output = await createToolModelOutput({
3441
+ toolCallId: part.toolCallId,
3442
+ input: part.input,
3443
+ tool: tools == null ? void 0 : tools[part.toolName],
3444
+ output: part.error,
3445
+ errorMode: "json"
3446
+ });
3447
+ content.push({
3199
3448
  type: "tool-result",
3200
3449
  toolCallId: part.toolCallId,
3201
3450
  toolName: part.toolName,
3202
- output: createToolModelOutput({
3203
- tool: tools == null ? void 0 : tools[part.toolName],
3204
- output: part.error,
3205
- errorMode: "json"
3206
- }),
3451
+ output,
3207
3452
  providerOptions: part.providerMetadata
3208
- };
3453
+ });
3454
+ break;
3455
+ }
3209
3456
  case "tool-approval-request":
3210
- return {
3457
+ content.push({
3211
3458
  type: "tool-approval-request",
3212
3459
  approvalId: part.approvalId,
3213
3460
  toolCallId: part.toolCall.toolCallId
3214
- };
3461
+ });
3462
+ break;
3215
3463
  }
3216
- });
3464
+ }
3217
3465
  if (content.length > 0) {
3218
3466
  responseMessages.push({
3219
3467
  role: "assistant",
3220
3468
  content
3221
3469
  });
3222
3470
  }
3223
- const toolResultContent = inputContent.filter((part) => part.type === "tool-result" || part.type === "tool-error").filter((part) => !part.providerExecuted).map((toolResult) => ({
3224
- type: "tool-result",
3225
- toolCallId: toolResult.toolCallId,
3226
- toolName: toolResult.toolName,
3227
- output: createToolModelOutput({
3228
- tool: tools == null ? void 0 : tools[toolResult.toolName],
3229
- output: toolResult.type === "tool-result" ? toolResult.output : toolResult.error,
3230
- errorMode: toolResult.type === "tool-error" ? "text" : "none"
3231
- })
3232
- }));
3471
+ const toolResultContent = [];
3472
+ for (const part of inputContent) {
3473
+ if (!(part.type === "tool-result" || part.type === "tool-error") || part.providerExecuted) {
3474
+ continue;
3475
+ }
3476
+ const output = await createToolModelOutput({
3477
+ toolCallId: part.toolCallId,
3478
+ input: part.input,
3479
+ tool: tools == null ? void 0 : tools[part.toolName],
3480
+ output: part.type === "tool-result" ? part.output : part.error,
3481
+ errorMode: part.type === "tool-error" ? "text" : "none"
3482
+ });
3483
+ toolResultContent.push({
3484
+ type: "tool-result",
3485
+ toolCallId: part.toolCallId,
3486
+ toolName: part.toolName,
3487
+ output,
3488
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
3489
+ });
3490
+ }
3233
3491
  if (toolResultContent.length > 0) {
3234
3492
  responseMessages.push({
3235
3493
  role: "tool",
@@ -3240,7 +3498,7 @@ function toResponseMessages({
3240
3498
  }
3241
3499
 
3242
3500
  // src/generate-text/generate-text.ts
3243
- var originalGenerateId = (0, import_provider_utils13.createIdGenerator)({
3501
+ var originalGenerateId = (0, import_provider_utils15.createIdGenerator)({
3244
3502
  prefix: "aitxt",
3245
3503
  size: 24
3246
3504
  });
@@ -3281,7 +3539,7 @@ async function generateText({
3281
3539
  abortSignal
3282
3540
  });
3283
3541
  const callSettings = prepareCallSettings(settings);
3284
- const headersWithUserAgent = (0, import_provider_utils13.withUserAgentSuffix)(
3542
+ const headersWithUserAgent = (0, import_provider_utils15.withUserAgentSuffix)(
3285
3543
  headers != null ? headers : {},
3286
3544
  `ai/${VERSION}`
3287
3545
  );
@@ -3319,7 +3577,7 @@ async function generateText({
3319
3577
  }),
3320
3578
  tracer,
3321
3579
  fn: async (span) => {
3322
- var _a15, _b, _c, _d, _e, _f, _g;
3580
+ var _a14, _b, _c, _d, _e, _f, _g, _h;
3323
3581
  const initialMessages = initialPrompt.messages;
3324
3582
  const responseMessages = [];
3325
3583
  const { approvedToolApprovals, deniedToolApprovals } = collectToolApprovals({ messages: initialMessages });
@@ -3335,31 +3593,36 @@ async function generateText({
3335
3593
  abortSignal,
3336
3594
  experimental_context
3337
3595
  });
3596
+ const toolContent = [];
3597
+ for (const output2 of toolOutputs) {
3598
+ const modelOutput = await createToolModelOutput({
3599
+ toolCallId: output2.toolCallId,
3600
+ input: output2.input,
3601
+ tool: tools == null ? void 0 : tools[output2.toolName],
3602
+ output: output2.type === "tool-result" ? output2.output : output2.error,
3603
+ errorMode: output2.type === "tool-error" ? "json" : "none"
3604
+ });
3605
+ toolContent.push({
3606
+ type: "tool-result",
3607
+ toolCallId: output2.toolCallId,
3608
+ toolName: output2.toolName,
3609
+ output: modelOutput
3610
+ });
3611
+ }
3612
+ for (const toolApproval of deniedToolApprovals) {
3613
+ toolContent.push({
3614
+ type: "tool-result",
3615
+ toolCallId: toolApproval.toolCall.toolCallId,
3616
+ toolName: toolApproval.toolCall.toolName,
3617
+ output: {
3618
+ type: "execution-denied",
3619
+ reason: toolApproval.approvalResponse.reason
3620
+ }
3621
+ });
3622
+ }
3338
3623
  responseMessages.push({
3339
3624
  role: "tool",
3340
- content: [
3341
- // add regular tool results for approved tool calls:
3342
- ...toolOutputs.map((output2) => ({
3343
- type: "tool-result",
3344
- toolCallId: output2.toolCallId,
3345
- toolName: output2.toolName,
3346
- output: createToolModelOutput({
3347
- tool: tools == null ? void 0 : tools[output2.toolName],
3348
- output: output2.type === "tool-result" ? output2.output : output2.error,
3349
- errorMode: output2.type === "tool-error" ? "json" : "none"
3350
- })
3351
- })),
3352
- // add execution denied tool results for denied tool approvals:
3353
- ...deniedToolApprovals.map((toolApproval) => ({
3354
- type: "tool-result",
3355
- toolCallId: toolApproval.toolCall.toolCallId,
3356
- toolName: toolApproval.toolCall.toolName,
3357
- output: {
3358
- type: "execution-denied",
3359
- reason: toolApproval.approvalResponse.reason
3360
- }
3361
- }))
3362
- ]
3625
+ content: toolContent
3363
3626
  });
3364
3627
  }
3365
3628
  const callSettings2 = prepareCallSettings(settings);
@@ -3367,16 +3630,18 @@ async function generateText({
3367
3630
  let clientToolCalls = [];
3368
3631
  let clientToolOutputs = [];
3369
3632
  const steps = [];
3633
+ const pendingDeferredToolCalls = /* @__PURE__ */ new Map();
3370
3634
  do {
3371
3635
  const stepInputMessages = [...initialMessages, ...responseMessages];
3372
3636
  const prepareStepResult = await (prepareStep == null ? void 0 : prepareStep({
3373
3637
  model,
3374
3638
  steps,
3375
3639
  stepNumber: steps.length,
3376
- messages: stepInputMessages
3640
+ messages: stepInputMessages,
3641
+ experimental_context
3377
3642
  }));
3378
3643
  const stepModel = resolveLanguageModel(
3379
- (_a15 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a15 : model
3644
+ (_a14 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a14 : model
3380
3645
  );
3381
3646
  const promptMessages = await convertToLanguageModelPrompt({
3382
3647
  prompt: {
@@ -3386,14 +3651,15 @@ async function generateText({
3386
3651
  supportedUrls: await stepModel.supportedUrls,
3387
3652
  download: download2
3388
3653
  });
3654
+ experimental_context = (_d = prepareStepResult == null ? void 0 : prepareStepResult.experimental_context) != null ? _d : experimental_context;
3389
3655
  const { toolChoice: stepToolChoice, tools: stepTools } = await prepareToolsAndToolChoice({
3390
3656
  tools,
3391
- toolChoice: (_d = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _d : toolChoice,
3392
- activeTools: (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools
3657
+ toolChoice: (_e = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _e : toolChoice,
3658
+ activeTools: (_f = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _f : activeTools
3393
3659
  });
3394
3660
  currentModelResponse = await retry(
3395
3661
  () => {
3396
- var _a16;
3662
+ var _a15;
3397
3663
  return recordSpan({
3398
3664
  name: "ai.generateText.doGenerate",
3399
3665
  attributes: selectTelemetryAttributes({
@@ -3425,36 +3691,40 @@ async function generateText({
3425
3691
  "gen_ai.request.max_tokens": settings.maxOutputTokens,
3426
3692
  "gen_ai.request.presence_penalty": settings.presencePenalty,
3427
3693
  "gen_ai.request.stop_sequences": settings.stopSequences,
3428
- "gen_ai.request.temperature": (_a16 = settings.temperature) != null ? _a16 : void 0,
3694
+ "gen_ai.request.temperature": (_a15 = settings.temperature) != null ? _a15 : void 0,
3429
3695
  "gen_ai.request.top_k": settings.topK,
3430
3696
  "gen_ai.request.top_p": settings.topP
3431
3697
  }
3432
3698
  }),
3433
3699
  tracer,
3434
3700
  fn: async (span2) => {
3435
- var _a17, _b2, _c2, _d2, _e2, _f2, _g2, _h;
3701
+ var _a16, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
3702
+ const stepProviderOptions = mergeObjects(
3703
+ providerOptions,
3704
+ prepareStepResult == null ? void 0 : prepareStepResult.providerOptions
3705
+ );
3436
3706
  const result = await stepModel.doGenerate({
3437
3707
  ...callSettings2,
3438
3708
  tools: stepTools,
3439
3709
  toolChoice: stepToolChoice,
3440
3710
  responseFormat: await (output == null ? void 0 : output.responseFormat),
3441
3711
  prompt: promptMessages,
3442
- providerOptions,
3712
+ providerOptions: stepProviderOptions,
3443
3713
  abortSignal,
3444
3714
  headers: headersWithUserAgent
3445
3715
  });
3446
3716
  const responseData = {
3447
- id: (_b2 = (_a17 = result.response) == null ? void 0 : _a17.id) != null ? _b2 : generateId2(),
3717
+ id: (_b2 = (_a16 = result.response) == null ? void 0 : _a16.id) != null ? _b2 : generateId2(),
3448
3718
  timestamp: (_d2 = (_c2 = result.response) == null ? void 0 : _c2.timestamp) != null ? _d2 : currentDate(),
3449
3719
  modelId: (_f2 = (_e2 = result.response) == null ? void 0 : _e2.modelId) != null ? _f2 : stepModel.modelId,
3450
3720
  headers: (_g2 = result.response) == null ? void 0 : _g2.headers,
3451
- body: (_h = result.response) == null ? void 0 : _h.body
3721
+ body: (_h2 = result.response) == null ? void 0 : _h2.body
3452
3722
  };
3453
3723
  span2.setAttributes(
3454
3724
  await selectTelemetryAttributes({
3455
3725
  telemetry,
3456
3726
  attributes: {
3457
- "ai.response.finishReason": result.finishReason,
3727
+ "ai.response.finishReason": result.finishReason.unified,
3458
3728
  "ai.response.text": {
3459
3729
  output: () => extractTextContent(result.content)
3460
3730
  },
@@ -3471,14 +3741,16 @@ async function generateText({
3471
3741
  result.providerMetadata
3472
3742
  ),
3473
3743
  // TODO rename telemetry attributes to inputTokens and outputTokens
3474
- "ai.usage.promptTokens": result.usage.inputTokens,
3475
- "ai.usage.completionTokens": result.usage.outputTokens,
3744
+ "ai.usage.promptTokens": result.usage.inputTokens.total,
3745
+ "ai.usage.completionTokens": result.usage.outputTokens.total,
3476
3746
  // standardized gen-ai llm span attributes:
3477
- "gen_ai.response.finish_reasons": [result.finishReason],
3747
+ "gen_ai.response.finish_reasons": [
3748
+ result.finishReason.unified
3749
+ ],
3478
3750
  "gen_ai.response.id": responseData.id,
3479
3751
  "gen_ai.response.model": responseData.modelId,
3480
- "gen_ai.usage.input_tokens": result.usage.inputTokens,
3481
- "gen_ai.usage.output_tokens": result.usage.outputTokens
3752
+ "gen_ai.usage.input_tokens": result.usage.inputTokens.total,
3753
+ "gen_ai.usage.output_tokens": result.usage.outputTokens.total
3482
3754
  }
3483
3755
  })
3484
3756
  );
@@ -3541,7 +3813,7 @@ async function generateText({
3541
3813
  toolCallId: toolCall.toolCallId,
3542
3814
  toolName: toolCall.toolName,
3543
3815
  input: toolCall.input,
3544
- error: (0, import_provider_utils13.getErrorMessage)(toolCall.error),
3816
+ error: (0, import_provider_utils15.getErrorMessage)(toolCall.error),
3545
3817
  dynamic: true
3546
3818
  });
3547
3819
  }
@@ -3563,25 +3835,47 @@ async function generateText({
3563
3835
  })
3564
3836
  );
3565
3837
  }
3838
+ for (const toolCall of stepToolCalls) {
3839
+ if (!toolCall.providerExecuted)
3840
+ continue;
3841
+ const tool2 = tools == null ? void 0 : tools[toolCall.toolName];
3842
+ if ((tool2 == null ? void 0 : tool2.type) === "provider" && tool2.supportsDeferredResults) {
3843
+ const hasResultInResponse = currentModelResponse.content.some(
3844
+ (part) => part.type === "tool-result" && part.toolCallId === toolCall.toolCallId
3845
+ );
3846
+ if (!hasResultInResponse) {
3847
+ pendingDeferredToolCalls.set(toolCall.toolCallId, {
3848
+ toolName: toolCall.toolName
3849
+ });
3850
+ }
3851
+ }
3852
+ }
3853
+ for (const part of currentModelResponse.content) {
3854
+ if (part.type === "tool-result") {
3855
+ pendingDeferredToolCalls.delete(part.toolCallId);
3856
+ }
3857
+ }
3566
3858
  const stepContent = asContent({
3567
3859
  content: currentModelResponse.content,
3568
3860
  toolCalls: stepToolCalls,
3569
3861
  toolOutputs: clientToolOutputs,
3570
- toolApprovalRequests: Object.values(toolApprovalRequests)
3862
+ toolApprovalRequests: Object.values(toolApprovalRequests),
3863
+ tools
3571
3864
  });
3572
3865
  responseMessages.push(
3573
- ...toResponseMessages({
3866
+ ...await toResponseMessages({
3574
3867
  content: stepContent,
3575
3868
  tools
3576
3869
  })
3577
3870
  );
3578
3871
  const currentStepResult = new DefaultStepResult({
3579
3872
  content: stepContent,
3580
- finishReason: currentModelResponse.finishReason,
3581
- usage: currentModelResponse.usage,
3873
+ finishReason: currentModelResponse.finishReason.unified,
3874
+ rawFinishReason: currentModelResponse.finishReason.raw,
3875
+ usage: asLanguageModelUsage(currentModelResponse.usage),
3582
3876
  warnings: currentModelResponse.warnings,
3583
3877
  providerMetadata: currentModelResponse.providerMetadata,
3584
- request: (_f = currentModelResponse.request) != null ? _f : {},
3878
+ request: (_g = currentModelResponse.request) != null ? _g : {},
3585
3879
  response: {
3586
3880
  ...currentModelResponse.response,
3587
3881
  // deep clone msgs to avoid mutating past messages in multi-step:
@@ -3589,23 +3883,24 @@ async function generateText({
3589
3883
  }
3590
3884
  });
3591
3885
  logWarnings({
3592
- warnings: (_g = currentModelResponse.warnings) != null ? _g : [],
3886
+ warnings: (_h = currentModelResponse.warnings) != null ? _h : [],
3593
3887
  provider: stepModel.provider,
3594
3888
  model: stepModel.modelId
3595
3889
  });
3596
3890
  steps.push(currentStepResult);
3597
3891
  await (onStepFinish == null ? void 0 : onStepFinish(currentStepResult));
3598
3892
  } while (
3599
- // there are tool calls:
3600
- clientToolCalls.length > 0 && // all current tool calls have outputs (incl. execution errors):
3601
- clientToolOutputs.length === clientToolCalls.length && // continue until a stop condition is met:
3893
+ // Continue if:
3894
+ // 1. There are client tool calls that have all been executed, OR
3895
+ // 2. There are pending deferred results from provider-executed tools
3896
+ (clientToolCalls.length > 0 && clientToolOutputs.length === clientToolCalls.length || pendingDeferredToolCalls.size > 0) && // continue until a stop condition is met:
3602
3897
  !await isStopConditionMet({ stopConditions, steps })
3603
3898
  );
3604
3899
  span.setAttributes(
3605
3900
  await selectTelemetryAttributes({
3606
3901
  telemetry,
3607
3902
  attributes: {
3608
- "ai.response.finishReason": currentModelResponse.finishReason,
3903
+ "ai.response.finishReason": currentModelResponse.finishReason.unified,
3609
3904
  "ai.response.text": {
3610
3905
  output: () => extractTextContent(currentModelResponse.content)
3611
3906
  },
@@ -3619,8 +3914,8 @@ async function generateText({
3619
3914
  currentModelResponse.providerMetadata
3620
3915
  ),
3621
3916
  // TODO rename telemetry attributes to inputTokens and outputTokens
3622
- "ai.usage.promptTokens": currentModelResponse.usage.inputTokens,
3623
- "ai.usage.completionTokens": currentModelResponse.usage.outputTokens
3917
+ "ai.usage.promptTokens": currentModelResponse.usage.inputTokens.total,
3918
+ "ai.usage.completionTokens": currentModelResponse.usage.outputTokens.total
3624
3919
  }
3625
3920
  })
3626
3921
  );
@@ -3639,6 +3934,7 @@ async function generateText({
3639
3934
  );
3640
3935
  await (onFinish == null ? void 0 : onFinish({
3641
3936
  finishReason: lastStep.finishReason,
3937
+ rawFinishReason: lastStep.rawFinishReason,
3642
3938
  usage: lastStep.usage,
3643
3939
  content: lastStep.content,
3644
3940
  text: lastStep.text,
@@ -3657,7 +3953,8 @@ async function generateText({
3657
3953
  warnings: lastStep.warnings,
3658
3954
  providerMetadata: lastStep.providerMetadata,
3659
3955
  steps,
3660
- totalUsage
3956
+ totalUsage,
3957
+ experimental_context
3661
3958
  }));
3662
3959
  let resolvedOutput;
3663
3960
  if (lastStep.finishReason === "stop") {
@@ -3756,6 +4053,9 @@ var DefaultGenerateTextResult = class {
3756
4053
  get finishReason() {
3757
4054
  return this.finalStep.finishReason;
3758
4055
  }
4056
+ get rawFinishReason() {
4057
+ return this.finalStep.rawFinishReason;
4058
+ }
3759
4059
  get warnings() {
3760
4060
  return this.finalStep.warnings;
3761
4061
  }
@@ -3798,45 +4098,76 @@ function asContent({
3798
4098
  content,
3799
4099
  toolCalls,
3800
4100
  toolOutputs,
3801
- toolApprovalRequests
4101
+ toolApprovalRequests,
4102
+ tools
3802
4103
  }) {
3803
- return [
3804
- ...content.map((part) => {
3805
- switch (part.type) {
3806
- case "text":
3807
- case "reasoning":
3808
- case "source":
3809
- return part;
3810
- case "file": {
3811
- return {
3812
- type: "file",
3813
- file: new DefaultGeneratedFile(part)
3814
- };
3815
- }
3816
- case "tool-call": {
3817
- return toolCalls.find(
3818
- (toolCall) => toolCall.toolCallId === part.toolCallId
3819
- );
3820
- }
3821
- case "tool-result": {
3822
- const toolCall = toolCalls.find(
3823
- (toolCall2) => toolCall2.toolCallId === part.toolCallId
3824
- );
3825
- if (toolCall == null) {
4104
+ const contentParts = [];
4105
+ for (const part of content) {
4106
+ switch (part.type) {
4107
+ case "text":
4108
+ case "reasoning":
4109
+ case "source":
4110
+ contentParts.push(part);
4111
+ break;
4112
+ case "file": {
4113
+ contentParts.push({
4114
+ type: "file",
4115
+ file: new DefaultGeneratedFile(part),
4116
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
4117
+ });
4118
+ break;
4119
+ }
4120
+ case "tool-call": {
4121
+ contentParts.push(
4122
+ toolCalls.find((toolCall) => toolCall.toolCallId === part.toolCallId)
4123
+ );
4124
+ break;
4125
+ }
4126
+ case "tool-result": {
4127
+ const toolCall = toolCalls.find(
4128
+ (toolCall2) => toolCall2.toolCallId === part.toolCallId
4129
+ );
4130
+ if (toolCall == null) {
4131
+ const tool2 = tools == null ? void 0 : tools[part.toolName];
4132
+ const supportsDeferredResults = (tool2 == null ? void 0 : tool2.type) === "provider" && tool2.supportsDeferredResults;
4133
+ if (!supportsDeferredResults) {
3826
4134
  throw new Error(`Tool call ${part.toolCallId} not found.`);
3827
4135
  }
3828
4136
  if (part.isError) {
3829
- return {
4137
+ contentParts.push({
3830
4138
  type: "tool-error",
3831
4139
  toolCallId: part.toolCallId,
3832
4140
  toolName: part.toolName,
3833
- input: toolCall.input,
4141
+ input: void 0,
3834
4142
  error: part.result,
3835
4143
  providerExecuted: true,
3836
- dynamic: toolCall.dynamic
3837
- };
4144
+ dynamic: part.dynamic
4145
+ });
4146
+ } else {
4147
+ contentParts.push({
4148
+ type: "tool-result",
4149
+ toolCallId: part.toolCallId,
4150
+ toolName: part.toolName,
4151
+ input: void 0,
4152
+ output: part.result,
4153
+ providerExecuted: true,
4154
+ dynamic: part.dynamic
4155
+ });
3838
4156
  }
3839
- return {
4157
+ break;
4158
+ }
4159
+ if (part.isError) {
4160
+ contentParts.push({
4161
+ type: "tool-error",
4162
+ toolCallId: part.toolCallId,
4163
+ toolName: part.toolName,
4164
+ input: toolCall.input,
4165
+ error: part.result,
4166
+ providerExecuted: true,
4167
+ dynamic: toolCall.dynamic
4168
+ });
4169
+ } else {
4170
+ contentParts.push({
3840
4171
  type: "tool-result",
3841
4172
  toolCallId: part.toolCallId,
3842
4173
  toolName: part.toolName,
@@ -3844,18 +4175,21 @@ function asContent({
3844
4175
  output: part.result,
3845
4176
  providerExecuted: true,
3846
4177
  dynamic: toolCall.dynamic
3847
- };
4178
+ });
3848
4179
  }
4180
+ break;
3849
4181
  }
3850
- }),
3851
- ...toolOutputs,
3852
- ...toolApprovalRequests
3853
- ];
4182
+ case "tool-approval-request": {
4183
+ break;
4184
+ }
4185
+ }
4186
+ }
4187
+ return [...contentParts, ...toolOutputs, ...toolApprovalRequests];
3854
4188
  }
3855
4189
 
3856
4190
  // src/generate-text/stream-text.ts
3857
- var import_provider23 = require("@ai-sdk/provider");
3858
- var import_provider_utils17 = require("@ai-sdk/provider-utils");
4191
+ var import_provider22 = require("@ai-sdk/provider");
4192
+ var import_provider_utils19 = require("@ai-sdk/provider-utils");
3859
4193
 
3860
4194
  // src/util/prepare-headers.ts
3861
4195
  function prepareHeaders(headers, defaultHeaders) {
@@ -3892,7 +4226,12 @@ function writeToServerResponse({
3892
4226
  headers,
3893
4227
  stream
3894
4228
  }) {
3895
- response.writeHead(status != null ? status : 200, statusText, headers);
4229
+ const statusCode = status != null ? status : 200;
4230
+ if (statusText !== void 0) {
4231
+ response.writeHead(statusCode, statusText, headers);
4232
+ } else {
4233
+ response.writeHead(statusCode, headers);
4234
+ }
3896
4235
  const reader = stream.getReader();
3897
4236
  const read = async () => {
3898
4237
  try {
@@ -3997,13 +4336,13 @@ function getResponseUIMessageId({
3997
4336
  }
3998
4337
 
3999
4338
  // src/ui/process-ui-message-stream.ts
4000
- var import_provider_utils15 = require("@ai-sdk/provider-utils");
4339
+ var import_provider_utils17 = require("@ai-sdk/provider-utils");
4001
4340
 
4002
4341
  // src/ui-message-stream/ui-message-chunks.ts
4003
4342
  var import_v47 = require("zod/v4");
4004
- var import_provider_utils14 = require("@ai-sdk/provider-utils");
4005
- var uiMessageChunkSchema = (0, import_provider_utils14.lazySchema)(
4006
- () => (0, import_provider_utils14.zodSchema)(
4343
+ var import_provider_utils16 = require("@ai-sdk/provider-utils");
4344
+ var uiMessageChunkSchema = (0, import_provider_utils16.lazySchema)(
4345
+ () => (0, import_provider_utils16.zodSchema)(
4007
4346
  import_v47.z.union([
4008
4347
  import_v47.z.strictObject({
4009
4348
  type: import_v47.z.literal("text-start"),
@@ -4148,8 +4487,7 @@ var uiMessageChunkSchema = (0, import_provider_utils14.lazySchema)(
4148
4487
  "content-filter",
4149
4488
  "tool-calls",
4150
4489
  "error",
4151
- "other",
4152
- "unknown"
4490
+ "other"
4153
4491
  ]).optional(),
4154
4492
  messageMetadata: import_v47.z.unknown().optional()
4155
4493
  }),
@@ -4167,39 +4505,6 @@ function isDataUIMessageChunk(chunk) {
4167
4505
  return chunk.type.startsWith("data-");
4168
4506
  }
4169
4507
 
4170
- // src/util/merge-objects.ts
4171
- function mergeObjects(base, overrides) {
4172
- if (base === void 0 && overrides === void 0) {
4173
- return void 0;
4174
- }
4175
- if (base === void 0) {
4176
- return overrides;
4177
- }
4178
- if (overrides === void 0) {
4179
- return base;
4180
- }
4181
- const result = { ...base };
4182
- for (const key in overrides) {
4183
- if (Object.prototype.hasOwnProperty.call(overrides, key)) {
4184
- const overridesValue = overrides[key];
4185
- if (overridesValue === void 0)
4186
- continue;
4187
- const baseValue = key in base ? base[key] : void 0;
4188
- const isSourceObject = overridesValue !== null && typeof overridesValue === "object" && !Array.isArray(overridesValue) && !(overridesValue instanceof Date) && !(overridesValue instanceof RegExp);
4189
- const isTargetObject = baseValue !== null && baseValue !== void 0 && typeof baseValue === "object" && !Array.isArray(baseValue) && !(baseValue instanceof Date) && !(baseValue instanceof RegExp);
4190
- if (isSourceObject && isTargetObject) {
4191
- result[key] = mergeObjects(
4192
- baseValue,
4193
- overridesValue
4194
- );
4195
- } else {
4196
- result[key] = overridesValue;
4197
- }
4198
- }
4199
- }
4200
- return result;
4201
- }
4202
-
4203
4508
  // src/ui/ui-messages.ts
4204
4509
  function isDataUIPart(part) {
4205
4510
  return part.type.startsWith("data-");
@@ -4213,21 +4518,23 @@ function isFileUIPart(part) {
4213
4518
  function isReasoningUIPart(part) {
4214
4519
  return part.type === "reasoning";
4215
4520
  }
4216
- function isToolUIPart(part) {
4521
+ function isStaticToolUIPart(part) {
4217
4522
  return part.type.startsWith("tool-");
4218
4523
  }
4219
4524
  function isDynamicToolUIPart(part) {
4220
4525
  return part.type === "dynamic-tool";
4221
4526
  }
4222
- function isToolOrDynamicToolUIPart(part) {
4223
- return isToolUIPart(part) || isDynamicToolUIPart(part);
4527
+ function isToolUIPart(part) {
4528
+ return isStaticToolUIPart(part) || isDynamicToolUIPart(part);
4224
4529
  }
4225
- function getToolName(part) {
4530
+ var isToolOrDynamicToolUIPart = isToolUIPart;
4531
+ function getStaticToolName(part) {
4226
4532
  return part.type.split("-").slice(1).join("-");
4227
4533
  }
4228
- function getToolOrDynamicToolName(part) {
4229
- return isDynamicToolUIPart(part) ? part.toolName : getToolName(part);
4534
+ function getToolName(part) {
4535
+ return isDynamicToolUIPart(part) ? part.toolName : getStaticToolName(part);
4230
4536
  }
4537
+ var getToolOrDynamicToolName = getToolName;
4231
4538
 
4232
4539
  // src/ui/process-ui-message-stream.ts
4233
4540
  function createStreamingUIMessageState({
@@ -4259,11 +4566,9 @@ function processUIMessageStream({
4259
4566
  new TransformStream({
4260
4567
  async transform(chunk, controller) {
4261
4568
  await runUpdateMessageJob(async ({ state, write }) => {
4262
- var _a15, _b, _c, _d;
4569
+ var _a14, _b, _c, _d;
4263
4570
  function getToolInvocation(toolCallId) {
4264
- const toolInvocations = state.message.parts.filter(
4265
- isToolOrDynamicToolUIPart
4266
- );
4571
+ const toolInvocations = state.message.parts.filter(isToolUIPart);
4267
4572
  const toolInvocation = toolInvocations.find(
4268
4573
  (invocation) => invocation.toolCallId === toolCallId
4269
4574
  );
@@ -4275,9 +4580,9 @@ function processUIMessageStream({
4275
4580
  return toolInvocation;
4276
4581
  }
4277
4582
  function updateToolPart(options) {
4278
- var _a16;
4583
+ var _a15;
4279
4584
  const part = state.message.parts.find(
4280
- (part2) => isToolUIPart(part2) && part2.toolCallId === options.toolCallId
4585
+ (part2) => isStaticToolUIPart(part2) && part2.toolCallId === options.toolCallId
4281
4586
  );
4282
4587
  const anyOptions = options;
4283
4588
  const anyPart = part;
@@ -4291,7 +4596,7 @@ function processUIMessageStream({
4291
4596
  if (options.title !== void 0) {
4292
4597
  anyPart.title = options.title;
4293
4598
  }
4294
- anyPart.providerExecuted = (_a16 = anyOptions.providerExecuted) != null ? _a16 : part.providerExecuted;
4599
+ anyPart.providerExecuted = (_a15 = anyOptions.providerExecuted) != null ? _a15 : part.providerExecuted;
4295
4600
  if (anyOptions.providerMetadata != null && part.state === "input-available") {
4296
4601
  part.callProviderMetadata = anyOptions.providerMetadata;
4297
4602
  }
@@ -4312,7 +4617,7 @@ function processUIMessageStream({
4312
4617
  }
4313
4618
  }
4314
4619
  function updateDynamicToolPart(options) {
4315
- var _a16, _b2;
4620
+ var _a15, _b2;
4316
4621
  const part = state.message.parts.find(
4317
4622
  (part2) => part2.type === "dynamic-tool" && part2.toolCallId === options.toolCallId
4318
4623
  );
@@ -4324,7 +4629,7 @@ function processUIMessageStream({
4324
4629
  anyPart.input = anyOptions.input;
4325
4630
  anyPart.output = anyOptions.output;
4326
4631
  anyPart.errorText = anyOptions.errorText;
4327
- anyPart.rawInput = (_a16 = anyOptions.rawInput) != null ? _a16 : anyPart.rawInput;
4632
+ anyPart.rawInput = (_a15 = anyOptions.rawInput) != null ? _a15 : anyPart.rawInput;
4328
4633
  anyPart.preliminary = anyOptions.preliminary;
4329
4634
  if (options.title !== void 0) {
4330
4635
  anyPart.title = options.title;
@@ -4353,7 +4658,7 @@ function processUIMessageStream({
4353
4658
  if (metadata != null) {
4354
4659
  const mergedMetadata = state.message.metadata != null ? mergeObjects(state.message.metadata, metadata) : metadata;
4355
4660
  if (messageMetadataSchema != null) {
4356
- await (0, import_provider_utils15.validateTypes)({
4661
+ await (0, import_provider_utils17.validateTypes)({
4357
4662
  value: mergedMetadata,
4358
4663
  schema: messageMetadataSchema
4359
4664
  });
@@ -4377,7 +4682,7 @@ function processUIMessageStream({
4377
4682
  case "text-delta": {
4378
4683
  const textPart = state.activeTextParts[chunk.id];
4379
4684
  textPart.text += chunk.delta;
4380
- textPart.providerMetadata = (_a15 = chunk.providerMetadata) != null ? _a15 : textPart.providerMetadata;
4685
+ textPart.providerMetadata = (_a14 = chunk.providerMetadata) != null ? _a14 : textPart.providerMetadata;
4381
4686
  write();
4382
4687
  break;
4383
4688
  }
@@ -4449,7 +4754,7 @@ function processUIMessageStream({
4449
4754
  break;
4450
4755
  }
4451
4756
  case "tool-input-start": {
4452
- const toolInvocations = state.message.parts.filter(isToolUIPart);
4757
+ const toolInvocations = state.message.parts.filter(isStaticToolUIPart);
4453
4758
  state.partialToolCalls[chunk.toolCallId] = {
4454
4759
  text: "",
4455
4760
  toolName: chunk.toolName,
@@ -4590,7 +4895,7 @@ function processUIMessageStream({
4590
4895
  } else {
4591
4896
  updateToolPart({
4592
4897
  toolCallId: chunk.toolCallId,
4593
- toolName: getToolName(toolInvocation),
4898
+ toolName: getStaticToolName(toolInvocation),
4594
4899
  state: "output-available",
4595
4900
  input: toolInvocation.input,
4596
4901
  output: chunk.output,
@@ -4617,7 +4922,7 @@ function processUIMessageStream({
4617
4922
  } else {
4618
4923
  updateToolPart({
4619
4924
  toolCallId: chunk.toolCallId,
4620
- toolName: getToolName(toolInvocation),
4925
+ toolName: getStaticToolName(toolInvocation),
4621
4926
  state: "output-error",
4622
4927
  input: toolInvocation.input,
4623
4928
  rawInput: toolInvocation.rawInput,
@@ -4672,7 +4977,7 @@ function processUIMessageStream({
4672
4977
  default: {
4673
4978
  if (isDataUIMessageChunk(chunk)) {
4674
4979
  if ((dataPartSchemas == null ? void 0 : dataPartSchemas[chunk.type]) != null) {
4675
- await (0, import_provider_utils15.validateTypes)({
4980
+ await (0, import_provider_utils17.validateTypes)({
4676
4981
  value: chunk.data,
4677
4982
  schema: dataPartSchemas[chunk.type]
4678
4983
  });
@@ -4816,11 +5121,11 @@ function createAsyncIterableStream(source) {
4816
5121
  const reader = this.getReader();
4817
5122
  let finished = false;
4818
5123
  async function cleanup(cancelStream) {
4819
- var _a15;
5124
+ var _a14;
4820
5125
  finished = true;
4821
5126
  try {
4822
5127
  if (cancelStream) {
4823
- await ((_a15 = reader.cancel) == null ? void 0 : _a15.call(reader));
5128
+ await ((_a14 = reader.cancel) == null ? void 0 : _a14.call(reader));
4824
5129
  }
4825
5130
  } finally {
4826
5131
  try {
@@ -4984,52 +5289,14 @@ function createStitchableStream() {
4984
5289
  };
4985
5290
  }
4986
5291
 
4987
- // src/util/delayed-promise.ts
4988
- var DelayedPromise = class {
4989
- constructor() {
4990
- this.status = { type: "pending" };
4991
- this._resolve = void 0;
4992
- this._reject = void 0;
4993
- }
4994
- get promise() {
4995
- if (this._promise) {
4996
- return this._promise;
4997
- }
4998
- this._promise = new Promise((resolve3, reject) => {
4999
- if (this.status.type === "resolved") {
5000
- resolve3(this.status.value);
5001
- } else if (this.status.type === "rejected") {
5002
- reject(this.status.error);
5003
- }
5004
- this._resolve = resolve3;
5005
- this._reject = reject;
5006
- });
5007
- return this._promise;
5008
- }
5009
- resolve(value) {
5010
- var _a15;
5011
- this.status = { type: "resolved", value };
5012
- if (this._promise) {
5013
- (_a15 = this._resolve) == null ? void 0 : _a15.call(this, value);
5014
- }
5015
- }
5016
- reject(error) {
5017
- var _a15;
5018
- this.status = { type: "rejected", error };
5019
- if (this._promise) {
5020
- (_a15 = this._reject) == null ? void 0 : _a15.call(this, error);
5021
- }
5022
- }
5023
- };
5024
-
5025
5292
  // src/util/now.ts
5026
5293
  function now() {
5027
- var _a15, _b;
5028
- return (_b = (_a15 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a15.now()) != null ? _b : Date.now();
5294
+ var _a14, _b;
5295
+ return (_b = (_a14 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a14.now()) != null ? _b : Date.now();
5029
5296
  }
5030
5297
 
5031
5298
  // src/generate-text/run-tools-transformation.ts
5032
- var import_provider_utils16 = require("@ai-sdk/provider-utils");
5299
+ var import_provider_utils18 = require("@ai-sdk/provider-utils");
5033
5300
  function runToolsTransformation({
5034
5301
  tools,
5035
5302
  generatorStream,
@@ -5094,8 +5361,9 @@ function runToolsTransformation({
5094
5361
  case "finish": {
5095
5362
  finishChunk = {
5096
5363
  type: "finish",
5097
- finishReason: chunk.finishReason,
5098
- usage: chunk.usage,
5364
+ finishReason: chunk.finishReason.unified,
5365
+ rawFinishReason: chunk.finishReason.raw,
5366
+ usage: asLanguageModelUsage(chunk.usage),
5099
5367
  providerMetadata: chunk.providerMetadata
5100
5368
  };
5101
5369
  break;
@@ -5116,7 +5384,7 @@ function runToolsTransformation({
5116
5384
  toolCallId: toolCall.toolCallId,
5117
5385
  toolName: toolCall.toolName,
5118
5386
  input: toolCall.input,
5119
- error: (0, import_provider_utils16.getErrorMessage)(toolCall.error),
5387
+ error: (0, import_provider_utils18.getErrorMessage)(toolCall.error),
5120
5388
  dynamic: true,
5121
5389
  title: toolCall.title
5122
5390
  });
@@ -5199,6 +5467,9 @@ function runToolsTransformation({
5199
5467
  }
5200
5468
  break;
5201
5469
  }
5470
+ case "tool-approval-request": {
5471
+ break;
5472
+ }
5202
5473
  default: {
5203
5474
  const _exhaustiveCheck = chunkType;
5204
5475
  throw new Error(`Unhandled chunk type: ${_exhaustiveCheck}`);
@@ -5238,7 +5509,7 @@ function runToolsTransformation({
5238
5509
  }
5239
5510
 
5240
5511
  // src/generate-text/stream-text.ts
5241
- var originalGenerateId2 = (0, import_provider_utils17.createIdGenerator)({
5512
+ var originalGenerateId2 = (0, import_provider_utils19.createIdGenerator)({
5242
5513
  prefix: "aitxt",
5243
5514
  size: 24
5244
5515
  });
@@ -5334,7 +5605,7 @@ function createOutputTransformStream(output) {
5334
5605
  }
5335
5606
  return new TransformStream({
5336
5607
  async transform(chunk, controller) {
5337
- var _a15;
5608
+ var _a14;
5338
5609
  if (chunk.type === "finish-step" && textChunk.length > 0) {
5339
5610
  publishTextChunk({ controller });
5340
5611
  }
@@ -5361,7 +5632,7 @@ function createOutputTransformStream(output) {
5361
5632
  }
5362
5633
  text2 += chunk.text;
5363
5634
  textChunk += chunk.text;
5364
- textProviderMetadata = (_a15 = chunk.providerMetadata) != null ? _a15 : textProviderMetadata;
5635
+ textProviderMetadata = (_a14 = chunk.providerMetadata) != null ? _a14 : textProviderMetadata;
5365
5636
  const result = await output.parsePartialOutput({ text: text2 });
5366
5637
  if (result !== void 0) {
5367
5638
  const currentJson = JSON.stringify(result.partial);
@@ -5405,9 +5676,10 @@ var DefaultStreamTextResult = class {
5405
5676
  experimental_context,
5406
5677
  download: download2
5407
5678
  }) {
5408
- this._totalUsage = new DelayedPromise();
5409
- this._finishReason = new DelayedPromise();
5410
- this._steps = new DelayedPromise();
5679
+ this._totalUsage = new import_provider_utils19.DelayedPromise();
5680
+ this._finishReason = new import_provider_utils19.DelayedPromise();
5681
+ this._rawFinishReason = new import_provider_utils19.DelayedPromise();
5682
+ this._steps = new import_provider_utils19.DelayedPromise();
5411
5683
  this.outputSpecification = output;
5412
5684
  this.includeRawChunks = includeRawChunks;
5413
5685
  this.tools = tools;
@@ -5415,16 +5687,18 @@ var DefaultStreamTextResult = class {
5415
5687
  let recordedContent = [];
5416
5688
  const recordedResponseMessages = [];
5417
5689
  let recordedFinishReason = void 0;
5690
+ let recordedRawFinishReason = void 0;
5418
5691
  let recordedTotalUsage = void 0;
5419
5692
  let recordedRequest = {};
5420
5693
  let recordedWarnings = [];
5421
5694
  const recordedSteps = [];
5695
+ const pendingDeferredToolCalls = /* @__PURE__ */ new Map();
5422
5696
  let rootSpan;
5423
5697
  let activeTextContent = {};
5424
5698
  let activeReasoningContent = {};
5425
5699
  const eventProcessor = new TransformStream({
5426
5700
  async transform(chunk, controller) {
5427
- var _a15, _b, _c, _d;
5701
+ var _a14, _b, _c, _d;
5428
5702
  controller.enqueue(chunk);
5429
5703
  const { part } = chunk;
5430
5704
  if (part.type === "text-delta" || part.type === "reasoning-delta" || part.type === "source" || part.type === "tool-call" || part.type === "tool-result" || part.type === "tool-input-start" || part.type === "tool-input-delta" || part.type === "raw") {
@@ -5454,7 +5728,7 @@ var DefaultStreamTextResult = class {
5454
5728
  return;
5455
5729
  }
5456
5730
  activeText.text += part.text;
5457
- activeText.providerMetadata = (_a15 = part.providerMetadata) != null ? _a15 : activeText.providerMetadata;
5731
+ activeText.providerMetadata = (_a14 = part.providerMetadata) != null ? _a14 : activeText.providerMetadata;
5458
5732
  }
5459
5733
  if (part.type === "text-end") {
5460
5734
  const activeText = activeTextContent[part.id];
@@ -5535,13 +5809,14 @@ var DefaultStreamTextResult = class {
5535
5809
  recordedWarnings = part.warnings;
5536
5810
  }
5537
5811
  if (part.type === "finish-step") {
5538
- const stepMessages = toResponseMessages({
5812
+ const stepMessages = await toResponseMessages({
5539
5813
  content: recordedContent,
5540
5814
  tools
5541
5815
  });
5542
5816
  const currentStepResult = new DefaultStepResult({
5543
5817
  content: recordedContent,
5544
5818
  finishReason: part.finishReason,
5819
+ rawFinishReason: part.rawFinishReason,
5545
5820
  usage: part.usage,
5546
5821
  warnings: recordedWarnings,
5547
5822
  request: recordedRequest,
@@ -5564,6 +5839,7 @@ var DefaultStreamTextResult = class {
5564
5839
  if (part.type === "finish") {
5565
5840
  recordedTotalUsage = part.totalUsage;
5566
5841
  recordedFinishReason = part.finishReason;
5842
+ recordedRawFinishReason = part.rawFinishReason;
5567
5843
  }
5568
5844
  },
5569
5845
  async flush(controller) {
@@ -5573,22 +5849,21 @@ var DefaultStreamTextResult = class {
5573
5849
  message: "No output generated. Check the stream for errors."
5574
5850
  });
5575
5851
  self._finishReason.reject(error);
5852
+ self._rawFinishReason.reject(error);
5576
5853
  self._totalUsage.reject(error);
5577
5854
  self._steps.reject(error);
5578
5855
  return;
5579
5856
  }
5580
- const finishReason = recordedFinishReason != null ? recordedFinishReason : "unknown";
5581
- const totalUsage = recordedTotalUsage != null ? recordedTotalUsage : {
5582
- inputTokens: void 0,
5583
- outputTokens: void 0,
5584
- totalTokens: void 0
5585
- };
5857
+ const finishReason = recordedFinishReason != null ? recordedFinishReason : "other";
5858
+ const totalUsage = recordedTotalUsage != null ? recordedTotalUsage : createNullLanguageModelUsage();
5586
5859
  self._finishReason.resolve(finishReason);
5860
+ self._rawFinishReason.resolve(recordedRawFinishReason);
5587
5861
  self._totalUsage.resolve(totalUsage);
5588
5862
  self._steps.resolve(recordedSteps);
5589
5863
  const finalStep = recordedSteps[recordedSteps.length - 1];
5590
5864
  await (onFinish == null ? void 0 : onFinish({
5591
- finishReason,
5865
+ finishReason: finalStep.finishReason,
5866
+ rawFinishReason: finalStep.rawFinishReason,
5592
5867
  totalUsage,
5593
5868
  usage: finalStep.usage,
5594
5869
  content: finalStep.content,
@@ -5607,7 +5882,8 @@ var DefaultStreamTextResult = class {
5607
5882
  response: finalStep.response,
5608
5883
  warnings: finalStep.warnings,
5609
5884
  providerMetadata: finalStep.providerMetadata,
5610
- steps: recordedSteps
5885
+ steps: recordedSteps,
5886
+ experimental_context
5611
5887
  }));
5612
5888
  rootSpan.setAttributes(
5613
5889
  await selectTelemetryAttributes({
@@ -5617,8 +5893,8 @@ var DefaultStreamTextResult = class {
5617
5893
  "ai.response.text": { output: () => finalStep.text },
5618
5894
  "ai.response.toolCalls": {
5619
5895
  output: () => {
5620
- var _a15;
5621
- return ((_a15 = finalStep.toolCalls) == null ? void 0 : _a15.length) ? JSON.stringify(finalStep.toolCalls) : void 0;
5896
+ var _a14;
5897
+ return ((_a14 = finalStep.toolCalls) == null ? void 0 : _a14.length) ? JSON.stringify(finalStep.toolCalls) : void 0;
5622
5898
  }
5623
5899
  },
5624
5900
  "ai.response.providerMetadata": JSON.stringify(
@@ -5665,7 +5941,7 @@ var DefaultStreamTextResult = class {
5665
5941
  }
5666
5942
  controller.enqueue(value);
5667
5943
  } catch (error) {
5668
- if ((0, import_provider_utils17.isAbortError)(error) && (abortSignal == null ? void 0 : abortSignal.aborted)) {
5944
+ if ((0, import_provider_utils19.isAbortError)(error) && (abortSignal == null ? void 0 : abortSignal.aborted)) {
5669
5945
  abort();
5670
5946
  } else {
5671
5947
  controller.error(error);
@@ -5762,31 +6038,35 @@ var DefaultStreamTextResult = class {
5762
6038
  }
5763
6039
  })
5764
6040
  );
6041
+ const content = [];
6042
+ for (const output2 of toolOutputs) {
6043
+ content.push({
6044
+ type: "tool-result",
6045
+ toolCallId: output2.toolCallId,
6046
+ toolName: output2.toolName,
6047
+ output: await createToolModelOutput({
6048
+ toolCallId: output2.toolCallId,
6049
+ input: output2.input,
6050
+ tool: tools == null ? void 0 : tools[output2.toolName],
6051
+ output: output2.type === "tool-result" ? output2.output : output2.error,
6052
+ errorMode: output2.type === "tool-error" ? "json" : "none"
6053
+ })
6054
+ });
6055
+ }
6056
+ for (const toolApproval of deniedToolApprovals) {
6057
+ content.push({
6058
+ type: "tool-result",
6059
+ toolCallId: toolApproval.toolCall.toolCallId,
6060
+ toolName: toolApproval.toolCall.toolName,
6061
+ output: {
6062
+ type: "execution-denied",
6063
+ reason: toolApproval.approvalResponse.reason
6064
+ }
6065
+ });
6066
+ }
5765
6067
  initialResponseMessages.push({
5766
6068
  role: "tool",
5767
- content: [
5768
- // add regular tool results for approved tool calls:
5769
- ...toolOutputs.map((output2) => ({
5770
- type: "tool-result",
5771
- toolCallId: output2.toolCallId,
5772
- toolName: output2.toolName,
5773
- output: createToolModelOutput({
5774
- tool: tools == null ? void 0 : tools[output2.toolName],
5775
- output: output2.type === "tool-result" ? output2.output : output2.error,
5776
- errorMode: output2.type === "tool-error" ? "json" : "none"
5777
- })
5778
- })),
5779
- // add execution denied tool results for denied tool approvals:
5780
- ...deniedToolApprovals.map((toolApproval) => ({
5781
- type: "tool-result",
5782
- toolCallId: toolApproval.toolCall.toolCallId,
5783
- toolName: toolApproval.toolCall.toolName,
5784
- output: {
5785
- type: "execution-denied",
5786
- reason: toolApproval.approvalResponse.reason
5787
- }
5788
- }))
5789
- ]
6069
+ content
5790
6070
  });
5791
6071
  } finally {
5792
6072
  toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.close();
@@ -5798,18 +6078,19 @@ var DefaultStreamTextResult = class {
5798
6078
  responseMessages,
5799
6079
  usage
5800
6080
  }) {
5801
- var _a15, _b, _c, _d, _e;
6081
+ var _a14, _b, _c, _d, _e, _f;
5802
6082
  const includeRawChunks2 = self.includeRawChunks;
5803
- stepFinish = new DelayedPromise();
6083
+ stepFinish = new import_provider_utils19.DelayedPromise();
5804
6084
  const stepInputMessages = [...initialMessages, ...responseMessages];
5805
6085
  const prepareStepResult = await (prepareStep == null ? void 0 : prepareStep({
5806
6086
  model,
5807
6087
  steps: recordedSteps,
5808
6088
  stepNumber: recordedSteps.length,
5809
- messages: stepInputMessages
6089
+ messages: stepInputMessages,
6090
+ experimental_context
5810
6091
  }));
5811
6092
  const stepModel = resolveLanguageModel(
5812
- (_a15 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a15 : model
6093
+ (_a14 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a14 : model
5813
6094
  );
5814
6095
  const promptMessages = await convertToLanguageModelPrompt({
5815
6096
  prompt: {
@@ -5824,6 +6105,11 @@ var DefaultStreamTextResult = class {
5824
6105
  toolChoice: (_d = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _d : toolChoice,
5825
6106
  activeTools: (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools
5826
6107
  });
6108
+ experimental_context = (_f = prepareStepResult == null ? void 0 : prepareStepResult.experimental_context) != null ? _f : experimental_context;
6109
+ const stepProviderOptions = mergeObjects(
6110
+ providerOptions,
6111
+ prepareStepResult == null ? void 0 : prepareStepResult.providerOptions
6112
+ );
5827
6113
  const {
5828
6114
  result: { stream: stream2, response, request },
5829
6115
  doStreamSpan,
@@ -5877,7 +6163,7 @@ var DefaultStreamTextResult = class {
5877
6163
  toolChoice: stepToolChoice,
5878
6164
  responseFormat: await (output == null ? void 0 : output.responseFormat),
5879
6165
  prompt: promptMessages,
5880
- providerOptions,
6166
+ providerOptions: stepProviderOptions,
5881
6167
  abortSignal,
5882
6168
  headers,
5883
6169
  includeRawChunks: includeRawChunks2
@@ -5902,12 +6188,9 @@ var DefaultStreamTextResult = class {
5902
6188
  const stepToolOutputs = [];
5903
6189
  let warnings;
5904
6190
  const activeToolCallToolNames = {};
5905
- let stepFinishReason = "unknown";
5906
- let stepUsage = {
5907
- inputTokens: void 0,
5908
- outputTokens: void 0,
5909
- totalTokens: void 0
5910
- };
6191
+ let stepFinishReason = "other";
6192
+ let stepRawFinishReason = void 0;
6193
+ let stepUsage = createNullLanguageModelUsage();
5911
6194
  let stepProviderMetadata;
5912
6195
  let stepFirstChunk = true;
5913
6196
  let stepResponse = {
@@ -5920,7 +6203,7 @@ var DefaultStreamTextResult = class {
5920
6203
  streamWithToolResults.pipeThrough(
5921
6204
  new TransformStream({
5922
6205
  async transform(chunk, controller) {
5923
- var _a16, _b2, _c2, _d2, _e2;
6206
+ var _a15, _b2, _c2, _d2, _e2;
5924
6207
  if (chunk.type === "stream-start") {
5925
6208
  warnings = chunk.warnings;
5926
6209
  return;
@@ -5993,7 +6276,7 @@ var DefaultStreamTextResult = class {
5993
6276
  }
5994
6277
  case "response-metadata": {
5995
6278
  stepResponse = {
5996
- id: (_a16 = chunk.id) != null ? _a16 : stepResponse.id,
6279
+ id: (_a15 = chunk.id) != null ? _a15 : stepResponse.id,
5997
6280
  timestamp: (_b2 = chunk.timestamp) != null ? _b2 : stepResponse.timestamp,
5998
6281
  modelId: (_c2 = chunk.modelId) != null ? _c2 : stepResponse.modelId
5999
6282
  };
@@ -6002,6 +6285,7 @@ var DefaultStreamTextResult = class {
6002
6285
  case "finish": {
6003
6286
  stepUsage = chunk.usage;
6004
6287
  stepFinishReason = chunk.finishReason;
6288
+ stepRawFinishReason = chunk.rawFinishReason;
6005
6289
  stepProviderMetadata = chunk.providerMetadata;
6006
6290
  const msToFinish = now2() - startTimestampMs;
6007
6291
  doStreamSpan.addEvent("ai.stream.finish");
@@ -6114,6 +6398,7 @@ var DefaultStreamTextResult = class {
6114
6398
  controller.enqueue({
6115
6399
  type: "finish-step",
6116
6400
  finishReason: stepFinishReason,
6401
+ rawFinishReason: stepRawFinishReason,
6117
6402
  usage: stepUsage,
6118
6403
  providerMetadata: stepProviderMetadata,
6119
6404
  response: {
@@ -6129,14 +6414,38 @@ var DefaultStreamTextResult = class {
6129
6414
  const clientToolOutputs = stepToolOutputs.filter(
6130
6415
  (toolOutput) => toolOutput.providerExecuted !== true
6131
6416
  );
6132
- if (clientToolCalls.length > 0 && // all current tool calls have outputs (incl. execution errors):
6133
- clientToolOutputs.length === clientToolCalls.length && // continue until a stop condition is met:
6134
- !await isStopConditionMet({
6135
- stopConditions,
6136
- steps: recordedSteps
6137
- })) {
6417
+ for (const toolCall of stepToolCalls) {
6418
+ if (toolCall.providerExecuted !== true)
6419
+ continue;
6420
+ const tool2 = tools == null ? void 0 : tools[toolCall.toolName];
6421
+ if ((tool2 == null ? void 0 : tool2.type) === "provider" && tool2.supportsDeferredResults) {
6422
+ const hasResultInStep = stepToolOutputs.some(
6423
+ (output2) => output2.type === "tool-result" && output2.toolCallId === toolCall.toolCallId
6424
+ );
6425
+ if (!hasResultInStep) {
6426
+ pendingDeferredToolCalls.set(toolCall.toolCallId, {
6427
+ toolName: toolCall.toolName
6428
+ });
6429
+ }
6430
+ }
6431
+ }
6432
+ for (const output2 of stepToolOutputs) {
6433
+ if (output2.type === "tool-result") {
6434
+ pendingDeferredToolCalls.delete(output2.toolCallId);
6435
+ }
6436
+ }
6437
+ if (
6438
+ // Continue if:
6439
+ // 1. There are client tool calls that have all been executed, OR
6440
+ // 2. There are pending deferred results from provider-executed tools
6441
+ (clientToolCalls.length > 0 && clientToolOutputs.length === clientToolCalls.length || pendingDeferredToolCalls.size > 0) && // continue until a stop condition is met:
6442
+ !await isStopConditionMet({
6443
+ stopConditions,
6444
+ steps: recordedSteps
6445
+ })
6446
+ ) {
6138
6447
  responseMessages.push(
6139
- ...toResponseMessages({
6448
+ ...await toResponseMessages({
6140
6449
  content: (
6141
6450
  // use transformed content to create the messages for the next step:
6142
6451
  recordedSteps[recordedSteps.length - 1].content
@@ -6161,6 +6470,7 @@ var DefaultStreamTextResult = class {
6161
6470
  controller.enqueue({
6162
6471
  type: "finish",
6163
6472
  finishReason: stepFinishReason,
6473
+ rawFinishReason: stepRawFinishReason,
6164
6474
  totalUsage: combinedUsage
6165
6475
  });
6166
6476
  self.closeStream();
@@ -6173,11 +6483,7 @@ var DefaultStreamTextResult = class {
6173
6483
  await streamStep({
6174
6484
  currentStep: 0,
6175
6485
  responseMessages: initialResponseMessages,
6176
- usage: {
6177
- inputTokens: void 0,
6178
- outputTokens: void 0,
6179
- totalTokens: void 0
6180
- }
6486
+ usage: createNullLanguageModelUsage()
6181
6487
  });
6182
6488
  }
6183
6489
  }).catch((error) => {
@@ -6258,6 +6564,10 @@ var DefaultStreamTextResult = class {
6258
6564
  this.consumeStream();
6259
6565
  return this._finishReason.promise;
6260
6566
  }
6567
+ get rawFinishReason() {
6568
+ this.consumeStream();
6569
+ return this._rawFinishReason.promise;
6570
+ }
6261
6571
  /**
6262
6572
  Split out a new stream from the original stream.
6263
6573
  The original stream is replaced to allow for further splitting,
@@ -6296,14 +6606,14 @@ var DefaultStreamTextResult = class {
6296
6606
  );
6297
6607
  }
6298
6608
  async consumeStream(options) {
6299
- var _a15;
6609
+ var _a14;
6300
6610
  try {
6301
6611
  await consumeStream({
6302
6612
  stream: this.fullStream,
6303
6613
  onError: options == null ? void 0 : options.onError
6304
6614
  });
6305
6615
  } catch (error) {
6306
- (_a15 = options == null ? void 0 : options.onError) == null ? void 0 : _a15.call(options, error);
6616
+ (_a14 = options == null ? void 0 : options.onError) == null ? void 0 : _a14.call(options, error);
6307
6617
  }
6308
6618
  }
6309
6619
  get experimental_partialOutputStream() {
@@ -6324,8 +6634,8 @@ var DefaultStreamTextResult = class {
6324
6634
  }
6325
6635
  get output() {
6326
6636
  return this.finalStep.then((step) => {
6327
- var _a15;
6328
- const output = (_a15 = this.outputSpecification) != null ? _a15 : text();
6637
+ var _a14;
6638
+ const output = (_a14 = this.outputSpecification) != null ? _a14 : text();
6329
6639
  return output.parseCompleteOutput(
6330
6640
  { text: step.text },
6331
6641
  {
@@ -6345,15 +6655,15 @@ var DefaultStreamTextResult = class {
6345
6655
  sendSources = false,
6346
6656
  sendStart = true,
6347
6657
  sendFinish = true,
6348
- onError = import_provider23.getErrorMessage
6658
+ onError = import_provider22.getErrorMessage
6349
6659
  } = {}) {
6350
6660
  const responseMessageId = generateMessageId != null ? getResponseUIMessageId({
6351
6661
  originalMessages,
6352
6662
  responseMessageId: generateMessageId
6353
6663
  }) : void 0;
6354
6664
  const isDynamic = (part) => {
6355
- var _a15;
6356
- const tool2 = (_a15 = this.tools) == null ? void 0 : _a15[part.toolName];
6665
+ var _a14;
6666
+ const tool2 = (_a14 = this.tools) == null ? void 0 : _a14[part.toolName];
6357
6667
  if (tool2 == null) {
6358
6668
  return part.dynamic;
6359
6669
  }
@@ -6691,10 +7001,10 @@ var ToolLoopAgent = class {
6691
7001
  return this.settings.tools;
6692
7002
  }
6693
7003
  async prepareCall(options) {
6694
- var _a15, _b, _c, _d;
7004
+ var _a14, _b, _c, _d;
6695
7005
  const baseCallArgs = {
6696
7006
  ...this.settings,
6697
- stopWhen: (_a15 = this.settings.stopWhen) != null ? _a15 : stepCountIs(20),
7007
+ stopWhen: (_a14 = this.settings.stopWhen) != null ? _a14 : stepCountIs(20),
6698
7008
  ...options
6699
7009
  };
6700
7010
  const preparedCallArgs = (_d = await ((_c = (_b = this.settings).prepareCall) == null ? void 0 : _c.call(_b, baseCallArgs))) != null ? _d : baseCallArgs;
@@ -6722,23 +7032,25 @@ var ToolLoopAgent = class {
6722
7032
  */
6723
7033
  async stream({
6724
7034
  abortSignal,
7035
+ experimental_transform,
6725
7036
  ...options
6726
7037
  }) {
6727
7038
  return streamText({
6728
7039
  ...await this.prepareCall(options),
6729
- abortSignal
7040
+ abortSignal,
7041
+ experimental_transform
6730
7042
  });
6731
7043
  }
6732
7044
  };
6733
7045
 
6734
7046
  // src/ui-message-stream/create-ui-message-stream.ts
6735
- var import_provider_utils18 = require("@ai-sdk/provider-utils");
7047
+ var import_provider_utils20 = require("@ai-sdk/provider-utils");
6736
7048
  function createUIMessageStream({
6737
7049
  execute,
6738
- onError = import_provider_utils18.getErrorMessage,
7050
+ onError = import_provider_utils20.getErrorMessage,
6739
7051
  originalMessages,
6740
7052
  onFinish,
6741
- generateId: generateId2 = import_provider_utils18.generateId
7053
+ generateId: generateId2 = import_provider_utils20.generateId
6742
7054
  }) {
6743
7055
  let controller;
6744
7056
  const ongoingStreamPromises = [];
@@ -6824,7 +7136,7 @@ function readUIMessageStream({
6824
7136
  onError,
6825
7137
  terminateOnError = false
6826
7138
  }) {
6827
- var _a15;
7139
+ var _a14;
6828
7140
  let controller;
6829
7141
  let hasErrored = false;
6830
7142
  const outputStream = new ReadableStream({
@@ -6833,7 +7145,7 @@ function readUIMessageStream({
6833
7145
  }
6834
7146
  });
6835
7147
  const state = createStreamingUIMessageState({
6836
- messageId: (_a15 = message == null ? void 0 : message.id) != null ? _a15 : "",
7148
+ messageId: (_a14 = message == null ? void 0 : message.id) != null ? _a14 : "",
6837
7149
  lastMessage: message
6838
7150
  });
6839
7151
  const handleError = (error) => {
@@ -6866,14 +7178,14 @@ function readUIMessageStream({
6866
7178
  }
6867
7179
 
6868
7180
  // src/ui/convert-to-model-messages.ts
6869
- var import_provider_utils19 = require("@ai-sdk/provider-utils");
6870
- function convertToModelMessages(messages, options) {
7181
+ var import_provider_utils21 = require("@ai-sdk/provider-utils");
7182
+ async function convertToModelMessages(messages, options) {
6871
7183
  const modelMessages = [];
6872
7184
  if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
6873
7185
  messages = messages.map((message) => ({
6874
7186
  ...message,
6875
7187
  parts: message.parts.filter(
6876
- (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
7188
+ (part) => !isToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
6877
7189
  )
6878
7190
  }));
6879
7191
  }
@@ -6900,7 +7212,7 @@ function convertToModelMessages(messages, options) {
6900
7212
  modelMessages.push({
6901
7213
  role: "user",
6902
7214
  content: message.parts.map((part) => {
6903
- var _a15;
7215
+ var _a14;
6904
7216
  if (isTextUIPart(part)) {
6905
7217
  return {
6906
7218
  type: "text",
@@ -6918,19 +7230,20 @@ function convertToModelMessages(messages, options) {
6918
7230
  };
6919
7231
  }
6920
7232
  if (isDataUIPart(part)) {
6921
- return (_a15 = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _a15.call(
7233
+ return (_a14 = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _a14.call(
6922
7234
  options,
6923
7235
  part
6924
7236
  );
6925
7237
  }
6926
- }).filter(import_provider_utils19.isNonNullable)
7238
+ }).filter(import_provider_utils21.isNonNullable)
6927
7239
  });
6928
7240
  break;
6929
7241
  }
6930
7242
  case "assistant": {
6931
7243
  if (message.parts != null) {
6932
- let processBlock2 = function() {
6933
- var _a15, _b, _c;
7244
+ let block = [];
7245
+ async function processBlock() {
7246
+ var _a14, _b, _c, _d, _e, _f;
6934
7247
  if (block.length === 0) {
6935
7248
  return;
6936
7249
  }
@@ -6955,14 +7268,14 @@ function convertToModelMessages(messages, options) {
6955
7268
  text: part.text,
6956
7269
  providerOptions: part.providerMetadata
6957
7270
  });
6958
- } else if (isToolOrDynamicToolUIPart(part)) {
6959
- const toolName = getToolOrDynamicToolName(part);
7271
+ } else if (isToolUIPart(part)) {
7272
+ const toolName = getToolName(part);
6960
7273
  if (part.state !== "input-streaming") {
6961
7274
  content.push({
6962
7275
  type: "tool-call",
6963
7276
  toolCallId: part.toolCallId,
6964
7277
  toolName,
6965
- input: part.state === "output-error" ? (_a15 = part.input) != null ? _a15 : "rawInput" in part ? part.rawInput : void 0 : part.input,
7278
+ input: part.state === "output-error" ? (_a14 = part.input) != null ? _a14 : "rawInput" in part ? part.rawInput : void 0 : part.input,
6966
7279
  providerExecuted: part.providerExecuted,
6967
7280
  ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
6968
7281
  });
@@ -6978,11 +7291,14 @@ function convertToModelMessages(messages, options) {
6978
7291
  type: "tool-result",
6979
7292
  toolCallId: part.toolCallId,
6980
7293
  toolName,
6981
- output: createToolModelOutput({
7294
+ output: await createToolModelOutput({
7295
+ toolCallId: part.toolCallId,
7296
+ input: part.input,
6982
7297
  output: part.state === "output-error" ? part.errorText : part.output,
6983
7298
  tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
6984
7299
  errorMode: part.state === "output-error" ? "json" : "none"
6985
- })
7300
+ }),
7301
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
6986
7302
  });
6987
7303
  }
6988
7304
  }
@@ -7004,69 +7320,70 @@ function convertToModelMessages(messages, options) {
7004
7320
  content
7005
7321
  });
7006
7322
  const toolParts = block.filter(
7007
- (part) => isToolOrDynamicToolUIPart(part) && part.providerExecuted !== true
7323
+ (part) => isToolUIPart(part) && part.providerExecuted !== true
7008
7324
  );
7009
7325
  if (toolParts.length > 0) {
7010
- modelMessages.push({
7011
- role: "tool",
7012
- content: toolParts.flatMap(
7013
- (toolPart) => {
7014
- var _a16, _b2, _c2;
7015
- const outputs = [];
7016
- if (((_a16 = toolPart.approval) == null ? void 0 : _a16.approved) != null) {
7017
- outputs.push({
7018
- type: "tool-approval-response",
7019
- approvalId: toolPart.approval.id,
7020
- approved: toolPart.approval.approved,
7021
- reason: toolPart.approval.reason
7326
+ {
7327
+ const content2 = [];
7328
+ for (const toolPart of toolParts) {
7329
+ if (((_d = toolPart.approval) == null ? void 0 : _d.approved) != null) {
7330
+ content2.push({
7331
+ type: "tool-approval-response",
7332
+ approvalId: toolPart.approval.id,
7333
+ approved: toolPart.approval.approved,
7334
+ reason: toolPart.approval.reason
7335
+ });
7336
+ }
7337
+ switch (toolPart.state) {
7338
+ case "output-denied": {
7339
+ content2.push({
7340
+ type: "tool-result",
7341
+ toolCallId: toolPart.toolCallId,
7342
+ toolName: getToolName(toolPart),
7343
+ output: {
7344
+ type: "error-text",
7345
+ value: (_e = toolPart.approval.reason) != null ? _e : "Tool execution denied."
7346
+ },
7347
+ ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}
7022
7348
  });
7349
+ break;
7023
7350
  }
7024
- switch (toolPart.state) {
7025
- case "output-denied": {
7026
- outputs.push({
7027
- type: "tool-result",
7028
- toolCallId: toolPart.toolCallId,
7029
- toolName: getToolOrDynamicToolName(toolPart),
7030
- output: {
7031
- type: "error-text",
7032
- value: (_b2 = toolPart.approval.reason) != null ? _b2 : "Tool execution denied."
7033
- }
7034
- });
7035
- break;
7036
- }
7037
- case "output-error":
7038
- case "output-available": {
7039
- const toolName = getToolOrDynamicToolName(toolPart);
7040
- outputs.push({
7041
- type: "tool-result",
7351
+ case "output-error":
7352
+ case "output-available": {
7353
+ const toolName = getToolName(toolPart);
7354
+ content2.push({
7355
+ type: "tool-result",
7356
+ toolCallId: toolPart.toolCallId,
7357
+ toolName,
7358
+ output: await createToolModelOutput({
7042
7359
  toolCallId: toolPart.toolCallId,
7043
- toolName,
7044
- output: createToolModelOutput({
7045
- output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
7046
- tool: (_c2 = options == null ? void 0 : options.tools) == null ? void 0 : _c2[toolName],
7047
- errorMode: toolPart.state === "output-error" ? "text" : "none"
7048
- })
7049
- });
7050
- break;
7051
- }
7360
+ input: toolPart.input,
7361
+ output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
7362
+ tool: (_f = options == null ? void 0 : options.tools) == null ? void 0 : _f[toolName],
7363
+ errorMode: toolPart.state === "output-error" ? "text" : "none"
7364
+ }),
7365
+ ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}
7366
+ });
7367
+ break;
7052
7368
  }
7053
- return outputs;
7054
7369
  }
7055
- )
7056
- });
7370
+ }
7371
+ modelMessages.push({
7372
+ role: "tool",
7373
+ content: content2
7374
+ });
7375
+ }
7057
7376
  }
7058
7377
  block = [];
7059
- };
7060
- var processBlock = processBlock2;
7061
- let block = [];
7378
+ }
7062
7379
  for (const part of message.parts) {
7063
- if (isTextUIPart(part) || isReasoningUIPart(part) || isFileUIPart(part) || isToolOrDynamicToolUIPart(part) || isDataUIPart(part)) {
7380
+ if (isTextUIPart(part) || isReasoningUIPart(part) || isFileUIPart(part) || isToolUIPart(part) || isDataUIPart(part)) {
7064
7381
  block.push(part);
7065
7382
  } else if (part.type === "step-start") {
7066
- processBlock2();
7383
+ await processBlock();
7067
7384
  }
7068
7385
  }
7069
- processBlock2();
7386
+ await processBlock();
7070
7387
  break;
7071
7388
  }
7072
7389
  break;
@@ -7082,14 +7399,13 @@ function convertToModelMessages(messages, options) {
7082
7399
  }
7083
7400
  return modelMessages;
7084
7401
  }
7085
- var convertToCoreMessages = convertToModelMessages;
7086
7402
 
7087
7403
  // src/ui/validate-ui-messages.ts
7088
- var import_provider24 = require("@ai-sdk/provider");
7089
- var import_provider_utils20 = require("@ai-sdk/provider-utils");
7404
+ var import_provider23 = require("@ai-sdk/provider");
7405
+ var import_provider_utils22 = require("@ai-sdk/provider-utils");
7090
7406
  var import_v48 = require("zod/v4");
7091
- var uiMessagesSchema = (0, import_provider_utils20.lazySchema)(
7092
- () => (0, import_provider_utils20.zodSchema)(
7407
+ var uiMessagesSchema = (0, import_provider_utils22.lazySchema)(
7408
+ () => (0, import_provider_utils22.zodSchema)(
7093
7409
  import_v48.z.array(
7094
7410
  import_v48.z.object({
7095
7411
  id: import_v48.z.string(),
@@ -7363,13 +7679,13 @@ async function safeValidateUIMessages({
7363
7679
  })
7364
7680
  };
7365
7681
  }
7366
- const validatedMessages = await (0, import_provider_utils20.validateTypes)({
7682
+ const validatedMessages = await (0, import_provider_utils22.validateTypes)({
7367
7683
  value: messages,
7368
7684
  schema: uiMessagesSchema
7369
7685
  });
7370
7686
  if (metadataSchema) {
7371
7687
  for (const message of validatedMessages) {
7372
- await (0, import_provider_utils20.validateTypes)({
7688
+ await (0, import_provider_utils22.validateTypes)({
7373
7689
  value: message.metadata,
7374
7690
  schema: metadataSchema
7375
7691
  });
@@ -7386,13 +7702,13 @@ async function safeValidateUIMessages({
7386
7702
  if (!dataSchema) {
7387
7703
  return {
7388
7704
  success: false,
7389
- error: new import_provider24.TypeValidationError({
7705
+ error: new import_provider23.TypeValidationError({
7390
7706
  value: dataPart.data,
7391
7707
  cause: `No data schema found for data part ${dataName}`
7392
7708
  })
7393
7709
  };
7394
7710
  }
7395
- await (0, import_provider_utils20.validateTypes)({
7711
+ await (0, import_provider_utils22.validateTypes)({
7396
7712
  value: dataPart.data,
7397
7713
  schema: dataSchema
7398
7714
  });
@@ -7410,20 +7726,20 @@ async function safeValidateUIMessages({
7410
7726
  if (!tool2) {
7411
7727
  return {
7412
7728
  success: false,
7413
- error: new import_provider24.TypeValidationError({
7729
+ error: new import_provider23.TypeValidationError({
7414
7730
  value: toolPart.input,
7415
7731
  cause: `No tool schema found for tool part ${toolName}`
7416
7732
  })
7417
7733
  };
7418
7734
  }
7419
7735
  if (toolPart.state === "input-available" || toolPart.state === "output-available" || toolPart.state === "output-error") {
7420
- await (0, import_provider_utils20.validateTypes)({
7736
+ await (0, import_provider_utils22.validateTypes)({
7421
7737
  value: toolPart.input,
7422
7738
  schema: tool2.inputSchema
7423
7739
  });
7424
7740
  }
7425
7741
  if (toolPart.state === "output-available" && tool2.outputSchema) {
7426
- await (0, import_provider_utils20.validateTypes)({
7742
+ await (0, import_provider_utils22.validateTypes)({
7427
7743
  value: toolPart.output,
7428
7744
  schema: tool2.outputSchema
7429
7745
  });
@@ -7463,20 +7779,24 @@ async function validateUIMessages({
7463
7779
  // src/agent/create-agent-ui-stream.ts
7464
7780
  async function createAgentUIStream({
7465
7781
  agent,
7466
- messages,
7782
+ uiMessages,
7467
7783
  options,
7784
+ abortSignal,
7785
+ experimental_transform,
7468
7786
  ...uiMessageStreamOptions
7469
7787
  }) {
7470
7788
  const validatedMessages = await validateUIMessages({
7471
- messages,
7789
+ messages: uiMessages,
7472
7790
  tools: agent.tools
7473
7791
  });
7474
- const modelMessages = convertToModelMessages(validatedMessages, {
7792
+ const modelMessages = await convertToModelMessages(validatedMessages, {
7475
7793
  tools: agent.tools
7476
7794
  });
7477
7795
  const result = await agent.stream({
7478
7796
  prompt: modelMessages,
7479
- options
7797
+ options,
7798
+ abortSignal,
7799
+ experimental_transform
7480
7800
  });
7481
7801
  return result.toUIMessageStream(uiMessageStreamOptions);
7482
7802
  }
@@ -7518,7 +7838,7 @@ async function pipeAgentUIStreamToResponse({
7518
7838
  }
7519
7839
 
7520
7840
  // src/embed/embed.ts
7521
- var import_provider_utils21 = require("@ai-sdk/provider-utils");
7841
+ var import_provider_utils23 = require("@ai-sdk/provider-utils");
7522
7842
  async function embed({
7523
7843
  model: modelArg,
7524
7844
  value,
@@ -7533,7 +7853,7 @@ async function embed({
7533
7853
  maxRetries: maxRetriesArg,
7534
7854
  abortSignal
7535
7855
  });
7536
- const headersWithUserAgent = (0, import_provider_utils21.withUserAgentSuffix)(
7856
+ const headersWithUserAgent = (0, import_provider_utils23.withUserAgentSuffix)(
7537
7857
  headers != null ? headers : {},
7538
7858
  `ai/${VERSION}`
7539
7859
  );
@@ -7556,7 +7876,7 @@ async function embed({
7556
7876
  }),
7557
7877
  tracer,
7558
7878
  fn: async (span) => {
7559
- const { embedding, usage, response, providerMetadata } = await retry(
7879
+ const { embedding, usage, warnings, response, providerMetadata } = await retry(
7560
7880
  () => (
7561
7881
  // nested spans to align with the embedMany telemetry data:
7562
7882
  recordSpan({
@@ -7575,7 +7895,7 @@ async function embed({
7575
7895
  }),
7576
7896
  tracer,
7577
7897
  fn: async (doEmbedSpan) => {
7578
- var _a15;
7898
+ var _a14;
7579
7899
  const modelResponse = await model.doEmbed({
7580
7900
  values: [value],
7581
7901
  abortSignal,
@@ -7583,7 +7903,7 @@ async function embed({
7583
7903
  providerOptions
7584
7904
  });
7585
7905
  const embedding2 = modelResponse.embeddings[0];
7586
- const usage2 = (_a15 = modelResponse.usage) != null ? _a15 : { tokens: NaN };
7906
+ const usage2 = (_a14 = modelResponse.usage) != null ? _a14 : { tokens: NaN };
7587
7907
  doEmbedSpan.setAttributes(
7588
7908
  await selectTelemetryAttributes({
7589
7909
  telemetry,
@@ -7600,6 +7920,7 @@ async function embed({
7600
7920
  return {
7601
7921
  embedding: embedding2,
7602
7922
  usage: usage2,
7923
+ warnings: modelResponse.warnings,
7603
7924
  providerMetadata: modelResponse.providerMetadata,
7604
7925
  response: modelResponse.response
7605
7926
  };
@@ -7616,10 +7937,12 @@ async function embed({
7616
7937
  }
7617
7938
  })
7618
7939
  );
7940
+ logWarnings({ warnings, provider: model.provider, model: model.modelId });
7619
7941
  return new DefaultEmbedResult({
7620
7942
  value,
7621
7943
  embedding,
7622
7944
  usage,
7945
+ warnings,
7623
7946
  providerMetadata,
7624
7947
  response
7625
7948
  });
@@ -7631,13 +7954,14 @@ var DefaultEmbedResult = class {
7631
7954
  this.value = options.value;
7632
7955
  this.embedding = options.embedding;
7633
7956
  this.usage = options.usage;
7957
+ this.warnings = options.warnings;
7634
7958
  this.providerMetadata = options.providerMetadata;
7635
7959
  this.response = options.response;
7636
7960
  }
7637
7961
  };
7638
7962
 
7639
7963
  // src/embed/embed-many.ts
7640
- var import_provider_utils22 = require("@ai-sdk/provider-utils");
7964
+ var import_provider_utils24 = require("@ai-sdk/provider-utils");
7641
7965
 
7642
7966
  // src/util/split-array.ts
7643
7967
  function splitArray(array2, chunkSize) {
@@ -7667,7 +7991,7 @@ async function embedMany({
7667
7991
  maxRetries: maxRetriesArg,
7668
7992
  abortSignal
7669
7993
  });
7670
- const headersWithUserAgent = (0, import_provider_utils22.withUserAgentSuffix)(
7994
+ const headersWithUserAgent = (0, import_provider_utils24.withUserAgentSuffix)(
7671
7995
  headers != null ? headers : {},
7672
7996
  `ai/${VERSION}`
7673
7997
  );
@@ -7693,64 +8017,63 @@ async function embedMany({
7693
8017
  }),
7694
8018
  tracer,
7695
8019
  fn: async (span) => {
7696
- var _a15;
8020
+ var _a14;
7697
8021
  const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([
7698
8022
  model.maxEmbeddingsPerCall,
7699
8023
  model.supportsParallelCalls
7700
8024
  ]);
7701
8025
  if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {
7702
- const { embeddings: embeddings2, usage, response, providerMetadata: providerMetadata2 } = await retry(
7703
- () => {
7704
- return recordSpan({
7705
- name: "ai.embedMany.doEmbed",
7706
- attributes: selectTelemetryAttributes({
7707
- telemetry,
7708
- attributes: {
7709
- ...assembleOperationName({
7710
- operationId: "ai.embedMany.doEmbed",
7711
- telemetry
7712
- }),
7713
- ...baseTelemetryAttributes,
7714
- // specific settings that only make sense on the outer level:
7715
- "ai.values": {
7716
- input: () => values.map((value) => JSON.stringify(value))
7717
- }
8026
+ const { embeddings: embeddings2, usage, warnings: warnings2, response, providerMetadata: providerMetadata2 } = await retry(() => {
8027
+ return recordSpan({
8028
+ name: "ai.embedMany.doEmbed",
8029
+ attributes: selectTelemetryAttributes({
8030
+ telemetry,
8031
+ attributes: {
8032
+ ...assembleOperationName({
8033
+ operationId: "ai.embedMany.doEmbed",
8034
+ telemetry
8035
+ }),
8036
+ ...baseTelemetryAttributes,
8037
+ // specific settings that only make sense on the outer level:
8038
+ "ai.values": {
8039
+ input: () => values.map((value) => JSON.stringify(value))
7718
8040
  }
7719
- }),
7720
- tracer,
7721
- fn: async (doEmbedSpan) => {
7722
- var _a16;
7723
- const modelResponse = await model.doEmbed({
7724
- values,
7725
- abortSignal,
7726
- headers: headersWithUserAgent,
7727
- providerOptions
7728
- });
7729
- const embeddings3 = modelResponse.embeddings;
7730
- const usage2 = (_a16 = modelResponse.usage) != null ? _a16 : { tokens: NaN };
7731
- doEmbedSpan.setAttributes(
7732
- await selectTelemetryAttributes({
7733
- telemetry,
7734
- attributes: {
7735
- "ai.embeddings": {
7736
- output: () => embeddings3.map(
7737
- (embedding) => JSON.stringify(embedding)
7738
- )
7739
- },
7740
- "ai.usage.tokens": usage2.tokens
7741
- }
7742
- })
7743
- );
7744
- return {
7745
- embeddings: embeddings3,
7746
- usage: usage2,
7747
- providerMetadata: modelResponse.providerMetadata,
7748
- response: modelResponse.response
7749
- };
7750
8041
  }
7751
- });
7752
- }
7753
- );
8042
+ }),
8043
+ tracer,
8044
+ fn: async (doEmbedSpan) => {
8045
+ var _a15;
8046
+ const modelResponse = await model.doEmbed({
8047
+ values,
8048
+ abortSignal,
8049
+ headers: headersWithUserAgent,
8050
+ providerOptions
8051
+ });
8052
+ const embeddings3 = modelResponse.embeddings;
8053
+ const usage2 = (_a15 = modelResponse.usage) != null ? _a15 : { tokens: NaN };
8054
+ doEmbedSpan.setAttributes(
8055
+ await selectTelemetryAttributes({
8056
+ telemetry,
8057
+ attributes: {
8058
+ "ai.embeddings": {
8059
+ output: () => embeddings3.map(
8060
+ (embedding) => JSON.stringify(embedding)
8061
+ )
8062
+ },
8063
+ "ai.usage.tokens": usage2.tokens
8064
+ }
8065
+ })
8066
+ );
8067
+ return {
8068
+ embeddings: embeddings3,
8069
+ usage: usage2,
8070
+ warnings: modelResponse.warnings,
8071
+ providerMetadata: modelResponse.providerMetadata,
8072
+ response: modelResponse.response
8073
+ };
8074
+ }
8075
+ });
8076
+ });
7754
8077
  span.setAttributes(
7755
8078
  await selectTelemetryAttributes({
7756
8079
  telemetry,
@@ -7762,16 +8085,23 @@ async function embedMany({
7762
8085
  }
7763
8086
  })
7764
8087
  );
8088
+ logWarnings({
8089
+ warnings: warnings2,
8090
+ provider: model.provider,
8091
+ model: model.modelId
8092
+ });
7765
8093
  return new DefaultEmbedManyResult({
7766
8094
  values,
7767
8095
  embeddings: embeddings2,
7768
8096
  usage,
8097
+ warnings: warnings2,
7769
8098
  providerMetadata: providerMetadata2,
7770
8099
  responses: [response]
7771
8100
  });
7772
8101
  }
7773
8102
  const valueChunks = splitArray(values, maxEmbeddingsPerCall);
7774
8103
  const embeddings = [];
8104
+ const warnings = [];
7775
8105
  const responses = [];
7776
8106
  let tokens = 0;
7777
8107
  let providerMetadata;
@@ -7801,7 +8131,7 @@ async function embedMany({
7801
8131
  }),
7802
8132
  tracer,
7803
8133
  fn: async (doEmbedSpan) => {
7804
- var _a16;
8134
+ var _a15;
7805
8135
  const modelResponse = await model.doEmbed({
7806
8136
  values: chunk,
7807
8137
  abortSignal,
@@ -7809,7 +8139,7 @@ async function embedMany({
7809
8139
  providerOptions
7810
8140
  });
7811
8141
  const embeddings2 = modelResponse.embeddings;
7812
- const usage = (_a16 = modelResponse.usage) != null ? _a16 : { tokens: NaN };
8142
+ const usage = (_a15 = modelResponse.usage) != null ? _a15 : { tokens: NaN };
7813
8143
  doEmbedSpan.setAttributes(
7814
8144
  await selectTelemetryAttributes({
7815
8145
  telemetry,
@@ -7826,6 +8156,7 @@ async function embedMany({
7826
8156
  return {
7827
8157
  embeddings: embeddings2,
7828
8158
  usage,
8159
+ warnings: modelResponse.warnings,
7829
8160
  providerMetadata: modelResponse.providerMetadata,
7830
8161
  response: modelResponse.response
7831
8162
  };
@@ -7836,6 +8167,7 @@ async function embedMany({
7836
8167
  );
7837
8168
  for (const result of results) {
7838
8169
  embeddings.push(...result.embeddings);
8170
+ warnings.push(...result.warnings);
7839
8171
  responses.push(result.response);
7840
8172
  tokens += result.usage.tokens;
7841
8173
  if (result.providerMetadata) {
@@ -7846,7 +8178,7 @@ async function embedMany({
7846
8178
  result.providerMetadata
7847
8179
  )) {
7848
8180
  providerMetadata[providerName] = {
7849
- ...(_a15 = providerMetadata[providerName]) != null ? _a15 : {},
8181
+ ...(_a14 = providerMetadata[providerName]) != null ? _a14 : {},
7850
8182
  ...metadata
7851
8183
  };
7852
8184
  }
@@ -7865,10 +8197,16 @@ async function embedMany({
7865
8197
  }
7866
8198
  })
7867
8199
  );
8200
+ logWarnings({
8201
+ warnings,
8202
+ provider: model.provider,
8203
+ model: model.modelId
8204
+ });
7868
8205
  return new DefaultEmbedManyResult({
7869
8206
  values,
7870
8207
  embeddings,
7871
8208
  usage: { tokens },
8209
+ warnings,
7872
8210
  providerMetadata,
7873
8211
  responses
7874
8212
  });
@@ -7880,16 +8218,17 @@ var DefaultEmbedManyResult = class {
7880
8218
  this.values = options.values;
7881
8219
  this.embeddings = options.embeddings;
7882
8220
  this.usage = options.usage;
8221
+ this.warnings = options.warnings;
7883
8222
  this.providerMetadata = options.providerMetadata;
7884
8223
  this.responses = options.responses;
7885
8224
  }
7886
8225
  };
7887
8226
 
7888
8227
  // src/generate-image/generate-image.ts
7889
- var import_provider_utils23 = require("@ai-sdk/provider-utils");
8228
+ var import_provider_utils25 = require("@ai-sdk/provider-utils");
7890
8229
  async function generateImage({
7891
- model,
7892
- prompt,
8230
+ model: modelArg,
8231
+ prompt: promptArg,
7893
8232
  n = 1,
7894
8233
  maxImagesPerCall,
7895
8234
  size,
@@ -7900,15 +8239,9 @@ async function generateImage({
7900
8239
  abortSignal,
7901
8240
  headers
7902
8241
  }) {
7903
- var _a15, _b;
7904
- if (model.specificationVersion !== "v3") {
7905
- throw new UnsupportedModelVersionError({
7906
- version: model.specificationVersion,
7907
- provider: model.provider,
7908
- modelId: model.modelId
7909
- });
7910
- }
7911
- const headersWithUserAgent = (0, import_provider_utils23.withUserAgentSuffix)(
8242
+ var _a14, _b;
8243
+ const model = resolveImageModel(modelArg);
8244
+ const headersWithUserAgent = (0, import_provider_utils25.withUserAgentSuffix)(
7912
8245
  headers != null ? headers : {},
7913
8246
  `ai/${VERSION}`
7914
8247
  );
@@ -7916,7 +8249,7 @@ async function generateImage({
7916
8249
  maxRetries: maxRetriesArg,
7917
8250
  abortSignal
7918
8251
  });
7919
- const maxImagesPerCallWithDefault = (_a15 = maxImagesPerCall != null ? maxImagesPerCall : await invokeModelMaxImagesPerCall(model)) != null ? _a15 : 1;
8252
+ const maxImagesPerCallWithDefault = (_a14 = maxImagesPerCall != null ? maxImagesPerCall : await invokeModelMaxImagesPerCall(model)) != null ? _a14 : 1;
7920
8253
  const callCount = Math.ceil(n / maxImagesPerCallWithDefault);
7921
8254
  const callImageCounts = Array.from({ length: callCount }, (_, i) => {
7922
8255
  if (i < callCount - 1) {
@@ -7927,9 +8260,12 @@ async function generateImage({
7927
8260
  });
7928
8261
  const results = await Promise.all(
7929
8262
  callImageCounts.map(
7930
- async (callImageCount) => retry(
7931
- () => model.doGenerate({
8263
+ async (callImageCount) => retry(() => {
8264
+ const { prompt, files, mask } = normalizePrompt(promptArg);
8265
+ return model.doGenerate({
7932
8266
  prompt,
8267
+ files,
8268
+ mask,
7933
8269
  n: callImageCount,
7934
8270
  abortSignal,
7935
8271
  headers: headersWithUserAgent,
@@ -7937,8 +8273,8 @@ async function generateImage({
7937
8273
  aspectRatio,
7938
8274
  seed,
7939
8275
  providerOptions: providerOptions != null ? providerOptions : {}
7940
- })
7941
- )
8276
+ });
8277
+ })
7942
8278
  )
7943
8279
  );
7944
8280
  const images = [];
@@ -7954,13 +8290,13 @@ async function generateImage({
7954
8290
  images.push(
7955
8291
  ...result.images.map(
7956
8292
  (image) => {
7957
- var _a16;
8293
+ var _a15;
7958
8294
  return new DefaultGeneratedFile({
7959
8295
  data: image,
7960
- mediaType: (_a16 = detectMediaType({
8296
+ mediaType: (_a15 = detectMediaType({
7961
8297
  data: image,
7962
8298
  signatures: imageMediaTypeSignatures
7963
- })) != null ? _a16 : "image/png"
8299
+ })) != null ? _a15 : "image/png"
7964
8300
  });
7965
8301
  }
7966
8302
  )
@@ -7971,10 +8307,26 @@ async function generateImage({
7971
8307
  }
7972
8308
  if (result.providerMetadata) {
7973
8309
  for (const [providerName, metadata] of Object.entries(result.providerMetadata)) {
7974
- (_b = providerMetadata[providerName]) != null ? _b : providerMetadata[providerName] = { images: [] };
7975
- providerMetadata[providerName].images.push(
7976
- ...result.providerMetadata[providerName].images
7977
- );
8310
+ if (providerName === "gateway") {
8311
+ const currentEntry = providerMetadata[providerName];
8312
+ if (currentEntry != null && typeof currentEntry === "object") {
8313
+ providerMetadata[providerName] = {
8314
+ ...currentEntry,
8315
+ ...metadata
8316
+ };
8317
+ } else {
8318
+ providerMetadata[providerName] = metadata;
8319
+ }
8320
+ const imagesValue = providerMetadata[providerName].images;
8321
+ if (Array.isArray(imagesValue) && imagesValue.length === 0) {
8322
+ delete providerMetadata[providerName].images;
8323
+ }
8324
+ } else {
8325
+ (_b = providerMetadata[providerName]) != null ? _b : providerMetadata[providerName] = { images: [] };
8326
+ providerMetadata[providerName].images.push(
8327
+ ...result.providerMetadata[providerName].images
8328
+ );
8329
+ }
7978
8330
  }
7979
8331
  }
7980
8332
  responses.push(result.response);
@@ -8012,9 +8364,53 @@ async function invokeModelMaxImagesPerCall(model) {
8012
8364
  modelId: model.modelId
8013
8365
  });
8014
8366
  }
8367
+ function normalizePrompt(prompt) {
8368
+ if (typeof prompt === "string") {
8369
+ return { prompt, files: void 0, mask: void 0 };
8370
+ }
8371
+ return {
8372
+ prompt: prompt.text,
8373
+ files: prompt.images.map(toImageModelV3File),
8374
+ mask: prompt.mask ? toImageModelV3File(prompt.mask) : void 0
8375
+ };
8376
+ }
8377
+ function toImageModelV3File(dataContent) {
8378
+ if (typeof dataContent === "string" && dataContent.startsWith("http")) {
8379
+ return {
8380
+ type: "url",
8381
+ url: dataContent
8382
+ };
8383
+ }
8384
+ if (typeof dataContent === "string" && dataContent.startsWith("data:")) {
8385
+ const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(dataContent);
8386
+ if (base64Content != null) {
8387
+ const uint8Data2 = (0, import_provider_utils25.convertBase64ToUint8Array)(base64Content);
8388
+ return {
8389
+ type: "file",
8390
+ data: uint8Data2,
8391
+ mediaType: dataUrlMediaType || detectMediaType({
8392
+ data: uint8Data2,
8393
+ signatures: imageMediaTypeSignatures
8394
+ }) || "image/png"
8395
+ };
8396
+ }
8397
+ }
8398
+ const uint8Data = convertDataContentToUint8Array(dataContent);
8399
+ return {
8400
+ type: "file",
8401
+ data: uint8Data,
8402
+ mediaType: detectMediaType({
8403
+ data: uint8Data,
8404
+ signatures: imageMediaTypeSignatures
8405
+ }) || "image/png"
8406
+ };
8407
+ }
8408
+
8409
+ // src/generate-image/index.ts
8410
+ var experimental_generateImage = generateImage;
8015
8411
 
8016
8412
  // src/generate-object/generate-object.ts
8017
- var import_provider_utils26 = require("@ai-sdk/provider-utils");
8413
+ var import_provider_utils28 = require("@ai-sdk/provider-utils");
8018
8414
 
8019
8415
  // src/generate-text/extract-reasoning-content.ts
8020
8416
  function extractReasoningContent(content) {
@@ -8025,8 +8421,8 @@ function extractReasoningContent(content) {
8025
8421
  }
8026
8422
 
8027
8423
  // src/generate-object/output-strategy.ts
8028
- var import_provider25 = require("@ai-sdk/provider");
8029
- var import_provider_utils24 = require("@ai-sdk/provider-utils");
8424
+ var import_provider24 = require("@ai-sdk/provider");
8425
+ var import_provider_utils26 = require("@ai-sdk/provider-utils");
8030
8426
  var noSchemaOutputStrategy = {
8031
8427
  type: "no-schema",
8032
8428
  jsonSchema: async () => void 0,
@@ -8046,7 +8442,7 @@ var noSchemaOutputStrategy = {
8046
8442
  } : { success: true, value };
8047
8443
  },
8048
8444
  createElementStream() {
8049
- throw new import_provider25.UnsupportedFunctionalityError({
8445
+ throw new import_provider24.UnsupportedFunctionalityError({
8050
8446
  functionality: "element streams in no-schema mode"
8051
8447
  });
8052
8448
  }
@@ -8065,10 +8461,10 @@ var objectOutputStrategy = (schema) => ({
8065
8461
  };
8066
8462
  },
8067
8463
  async validateFinalResult(value) {
8068
- return (0, import_provider_utils24.safeValidateTypes)({ value, schema });
8464
+ return (0, import_provider_utils26.safeValidateTypes)({ value, schema });
8069
8465
  },
8070
8466
  createElementStream() {
8071
- throw new import_provider25.UnsupportedFunctionalityError({
8467
+ throw new import_provider24.UnsupportedFunctionalityError({
8072
8468
  functionality: "element streams in object mode"
8073
8469
  });
8074
8470
  }
@@ -8097,11 +8493,11 @@ var arrayOutputStrategy = (schema) => {
8097
8493
  isFirstDelta,
8098
8494
  isFinalDelta
8099
8495
  }) {
8100
- var _a15;
8101
- if (!(0, import_provider25.isJSONObject)(value) || !(0, import_provider25.isJSONArray)(value.elements)) {
8496
+ var _a14;
8497
+ if (!(0, import_provider24.isJSONObject)(value) || !(0, import_provider24.isJSONArray)(value.elements)) {
8102
8498
  return {
8103
8499
  success: false,
8104
- error: new import_provider25.TypeValidationError({
8500
+ error: new import_provider24.TypeValidationError({
8105
8501
  value,
8106
8502
  cause: "value must be an object that contains an array of elements"
8107
8503
  })
@@ -8111,7 +8507,7 @@ var arrayOutputStrategy = (schema) => {
8111
8507
  const resultArray = [];
8112
8508
  for (let i = 0; i < inputArray.length; i++) {
8113
8509
  const element = inputArray[i];
8114
- const result = await (0, import_provider_utils24.safeValidateTypes)({ value: element, schema });
8510
+ const result = await (0, import_provider_utils26.safeValidateTypes)({ value: element, schema });
8115
8511
  if (i === inputArray.length - 1 && !isFinalDelta) {
8116
8512
  continue;
8117
8513
  }
@@ -8120,7 +8516,7 @@ var arrayOutputStrategy = (schema) => {
8120
8516
  }
8121
8517
  resultArray.push(result.value);
8122
8518
  }
8123
- const publishedElementCount = (_a15 = latestObject == null ? void 0 : latestObject.length) != null ? _a15 : 0;
8519
+ const publishedElementCount = (_a14 = latestObject == null ? void 0 : latestObject.length) != null ? _a14 : 0;
8124
8520
  let textDelta = "";
8125
8521
  if (isFirstDelta) {
8126
8522
  textDelta += "[";
@@ -8141,10 +8537,10 @@ var arrayOutputStrategy = (schema) => {
8141
8537
  };
8142
8538
  },
8143
8539
  async validateFinalResult(value) {
8144
- if (!(0, import_provider25.isJSONObject)(value) || !(0, import_provider25.isJSONArray)(value.elements)) {
8540
+ if (!(0, import_provider24.isJSONObject)(value) || !(0, import_provider24.isJSONArray)(value.elements)) {
8145
8541
  return {
8146
8542
  success: false,
8147
- error: new import_provider25.TypeValidationError({
8543
+ error: new import_provider24.TypeValidationError({
8148
8544
  value,
8149
8545
  cause: "value must be an object that contains an array of elements"
8150
8546
  })
@@ -8152,7 +8548,7 @@ var arrayOutputStrategy = (schema) => {
8152
8548
  }
8153
8549
  const inputArray = value.elements;
8154
8550
  for (const element of inputArray) {
8155
- const result = await (0, import_provider_utils24.safeValidateTypes)({ value: element, schema });
8551
+ const result = await (0, import_provider_utils26.safeValidateTypes)({ value: element, schema });
8156
8552
  if (!result.success) {
8157
8553
  return result;
8158
8554
  }
@@ -8207,10 +8603,10 @@ var enumOutputStrategy = (enumValues) => {
8207
8603
  additionalProperties: false
8208
8604
  }),
8209
8605
  async validateFinalResult(value) {
8210
- if (!(0, import_provider25.isJSONObject)(value) || typeof value.result !== "string") {
8606
+ if (!(0, import_provider24.isJSONObject)(value) || typeof value.result !== "string") {
8211
8607
  return {
8212
8608
  success: false,
8213
- error: new import_provider25.TypeValidationError({
8609
+ error: new import_provider24.TypeValidationError({
8214
8610
  value,
8215
8611
  cause: 'value must be an object that contains a string in the "result" property.'
8216
8612
  })
@@ -8219,17 +8615,17 @@ var enumOutputStrategy = (enumValues) => {
8219
8615
  const result = value.result;
8220
8616
  return enumValues.includes(result) ? { success: true, value: result } : {
8221
8617
  success: false,
8222
- error: new import_provider25.TypeValidationError({
8618
+ error: new import_provider24.TypeValidationError({
8223
8619
  value,
8224
8620
  cause: "value must be a string in the enum"
8225
8621
  })
8226
8622
  };
8227
8623
  },
8228
8624
  async validatePartialResult({ value, textDelta }) {
8229
- if (!(0, import_provider25.isJSONObject)(value) || typeof value.result !== "string") {
8625
+ if (!(0, import_provider24.isJSONObject)(value) || typeof value.result !== "string") {
8230
8626
  return {
8231
8627
  success: false,
8232
- error: new import_provider25.TypeValidationError({
8628
+ error: new import_provider24.TypeValidationError({
8233
8629
  value,
8234
8630
  cause: 'value must be an object that contains a string in the "result" property.'
8235
8631
  })
@@ -8242,7 +8638,7 @@ var enumOutputStrategy = (enumValues) => {
8242
8638
  if (value.result.length === 0 || possibleEnumValues.length === 0) {
8243
8639
  return {
8244
8640
  success: false,
8245
- error: new import_provider25.TypeValidationError({
8641
+ error: new import_provider24.TypeValidationError({
8246
8642
  value,
8247
8643
  cause: "value must be a string in the enum"
8248
8644
  })
@@ -8257,7 +8653,7 @@ var enumOutputStrategy = (enumValues) => {
8257
8653
  };
8258
8654
  },
8259
8655
  createElementStream() {
8260
- throw new import_provider25.UnsupportedFunctionalityError({
8656
+ throw new import_provider24.UnsupportedFunctionalityError({
8261
8657
  functionality: "element streams in enum mode"
8262
8658
  });
8263
8659
  }
@@ -8270,9 +8666,9 @@ function getOutputStrategy({
8270
8666
  }) {
8271
8667
  switch (output) {
8272
8668
  case "object":
8273
- return objectOutputStrategy((0, import_provider_utils24.asSchema)(schema));
8669
+ return objectOutputStrategy((0, import_provider_utils26.asSchema)(schema));
8274
8670
  case "array":
8275
- return arrayOutputStrategy((0, import_provider_utils24.asSchema)(schema));
8671
+ return arrayOutputStrategy((0, import_provider_utils26.asSchema)(schema));
8276
8672
  case "enum":
8277
8673
  return enumOutputStrategy(enumValues);
8278
8674
  case "no-schema":
@@ -8285,10 +8681,10 @@ function getOutputStrategy({
8285
8681
  }
8286
8682
 
8287
8683
  // src/generate-object/parse-and-validate-object-result.ts
8288
- var import_provider26 = require("@ai-sdk/provider");
8289
- var import_provider_utils25 = require("@ai-sdk/provider-utils");
8684
+ var import_provider25 = require("@ai-sdk/provider");
8685
+ var import_provider_utils27 = require("@ai-sdk/provider-utils");
8290
8686
  async function parseAndValidateObjectResult(result, outputStrategy, context) {
8291
- const parseResult = await (0, import_provider_utils25.safeParseJSON)({ text: result });
8687
+ const parseResult = await (0, import_provider_utils27.safeParseJSON)({ text: result });
8292
8688
  if (!parseResult.success) {
8293
8689
  throw new NoObjectGeneratedError({
8294
8690
  message: "No object generated: could not parse the response.",
@@ -8323,7 +8719,7 @@ async function parseAndValidateObjectResultWithRepair(result, outputStrategy, re
8323
8719
  try {
8324
8720
  return await parseAndValidateObjectResult(result, outputStrategy, context);
8325
8721
  } catch (error) {
8326
- if (repairText != null && NoObjectGeneratedError.isInstance(error) && (import_provider26.JSONParseError.isInstance(error.cause) || import_provider26.TypeValidationError.isInstance(error.cause))) {
8722
+ if (repairText != null && NoObjectGeneratedError.isInstance(error) && (import_provider25.JSONParseError.isInstance(error.cause) || import_provider25.TypeValidationError.isInstance(error.cause))) {
8327
8723
  const repairedText = await repairText({
8328
8724
  text: result,
8329
8725
  error: error.cause
@@ -8460,7 +8856,7 @@ function validateObjectGenerationInput({
8460
8856
  }
8461
8857
 
8462
8858
  // src/generate-object/generate-object.ts
8463
- var originalGenerateId3 = (0, import_provider_utils26.createIdGenerator)({ prefix: "aiobj", size: 24 });
8859
+ var originalGenerateId3 = (0, import_provider_utils28.createIdGenerator)({ prefix: "aiobj", size: 24 });
8464
8860
  async function generateObject(options) {
8465
8861
  const {
8466
8862
  model: modelArg,
@@ -8505,7 +8901,7 @@ async function generateObject(options) {
8505
8901
  enumValues
8506
8902
  });
8507
8903
  const callSettings = prepareCallSettings(settings);
8508
- const headersWithUserAgent = (0, import_provider_utils26.withUserAgentSuffix)(
8904
+ const headersWithUserAgent = (0, import_provider_utils28.withUserAgentSuffix)(
8509
8905
  headers != null ? headers : {},
8510
8906
  `ai/${VERSION}`
8511
8907
  );
@@ -8540,7 +8936,7 @@ async function generateObject(options) {
8540
8936
  }),
8541
8937
  tracer,
8542
8938
  fn: async (span) => {
8543
- var _a15;
8939
+ var _a14;
8544
8940
  let result;
8545
8941
  let finishReason;
8546
8942
  let usage;
@@ -8586,7 +8982,7 @@ async function generateObject(options) {
8586
8982
  }),
8587
8983
  tracer,
8588
8984
  fn: async (span2) => {
8589
- var _a16, _b, _c, _d, _e, _f, _g, _h;
8985
+ var _a15, _b, _c, _d, _e, _f, _g, _h;
8590
8986
  const result2 = await model.doGenerate({
8591
8987
  responseFormat: {
8592
8988
  type: "json",
@@ -8601,7 +8997,7 @@ async function generateObject(options) {
8601
8997
  headers: headersWithUserAgent
8602
8998
  });
8603
8999
  const responseData = {
8604
- id: (_b = (_a16 = result2.response) == null ? void 0 : _a16.id) != null ? _b : generateId2(),
9000
+ id: (_b = (_a15 = result2.response) == null ? void 0 : _a15.id) != null ? _b : generateId2(),
8605
9001
  timestamp: (_d = (_c = result2.response) == null ? void 0 : _c.timestamp) != null ? _d : currentDate(),
8606
9002
  modelId: (_f = (_e = result2.response) == null ? void 0 : _e.modelId) != null ? _f : model.modelId,
8607
9003
  headers: (_g = result2.response) == null ? void 0 : _g.headers,
@@ -8613,15 +9009,15 @@ async function generateObject(options) {
8613
9009
  throw new NoObjectGeneratedError({
8614
9010
  message: "No object generated: the model did not return a response.",
8615
9011
  response: responseData,
8616
- usage: result2.usage,
8617
- finishReason: result2.finishReason
9012
+ usage: asLanguageModelUsage(result2.usage),
9013
+ finishReason: result2.finishReason.unified
8618
9014
  });
8619
9015
  }
8620
9016
  span2.setAttributes(
8621
9017
  await selectTelemetryAttributes({
8622
9018
  telemetry,
8623
9019
  attributes: {
8624
- "ai.response.finishReason": result2.finishReason,
9020
+ "ai.response.finishReason": result2.finishReason.unified,
8625
9021
  "ai.response.object": { output: () => text2 },
8626
9022
  "ai.response.id": responseData.id,
8627
9023
  "ai.response.model": responseData.modelId,
@@ -8630,14 +9026,16 @@ async function generateObject(options) {
8630
9026
  result2.providerMetadata
8631
9027
  ),
8632
9028
  // TODO rename telemetry attributes to inputTokens and outputTokens
8633
- "ai.usage.promptTokens": result2.usage.inputTokens,
8634
- "ai.usage.completionTokens": result2.usage.outputTokens,
9029
+ "ai.usage.promptTokens": result2.usage.inputTokens.total,
9030
+ "ai.usage.completionTokens": result2.usage.outputTokens.total,
8635
9031
  // standardized gen-ai llm span attributes:
8636
- "gen_ai.response.finish_reasons": [result2.finishReason],
9032
+ "gen_ai.response.finish_reasons": [
9033
+ result2.finishReason.unified
9034
+ ],
8637
9035
  "gen_ai.response.id": responseData.id,
8638
9036
  "gen_ai.response.model": responseData.modelId,
8639
- "gen_ai.usage.input_tokens": result2.usage.inputTokens,
8640
- "gen_ai.usage.output_tokens": result2.usage.outputTokens
9037
+ "gen_ai.usage.input_tokens": result2.usage.inputTokens.total,
9038
+ "gen_ai.usage.output_tokens": result2.usage.outputTokens.total
8641
9039
  }
8642
9040
  })
8643
9041
  );
@@ -8651,11 +9049,11 @@ async function generateObject(options) {
8651
9049
  })
8652
9050
  );
8653
9051
  result = generateResult.objectText;
8654
- finishReason = generateResult.finishReason;
8655
- usage = generateResult.usage;
9052
+ finishReason = generateResult.finishReason.unified;
9053
+ usage = asLanguageModelUsage(generateResult.usage);
8656
9054
  warnings = generateResult.warnings;
8657
9055
  resultProviderMetadata = generateResult.providerMetadata;
8658
- request = (_a15 = generateResult.request) != null ? _a15 : {};
9056
+ request = (_a14 = generateResult.request) != null ? _a14 : {};
8659
9057
  response = generateResult.responseData;
8660
9058
  reasoning = generateResult.reasoning;
8661
9059
  logWarnings({
@@ -8718,9 +9116,9 @@ var DefaultGenerateObjectResult = class {
8718
9116
  this.reasoning = options.reasoning;
8719
9117
  }
8720
9118
  toJsonResponse(init) {
8721
- var _a15;
9119
+ var _a14;
8722
9120
  return new Response(JSON.stringify(this.object), {
8723
- status: (_a15 = init == null ? void 0 : init.status) != null ? _a15 : 200,
9121
+ status: (_a14 = init == null ? void 0 : init.status) != null ? _a14 : 200,
8724
9122
  headers: prepareHeaders(init == null ? void 0 : init.headers, {
8725
9123
  "content-type": "application/json; charset=utf-8"
8726
9124
  })
@@ -8729,7 +9127,7 @@ var DefaultGenerateObjectResult = class {
8729
9127
  };
8730
9128
 
8731
9129
  // src/generate-object/stream-object.ts
8732
- var import_provider_utils28 = require("@ai-sdk/provider-utils");
9130
+ var import_provider_utils30 = require("@ai-sdk/provider-utils");
8733
9131
 
8734
9132
  // src/util/cosine-similarity.ts
8735
9133
  function cosineSimilarity(vector1, vector2) {
@@ -8839,15 +9237,15 @@ var SerialJobExecutor = class {
8839
9237
  };
8840
9238
 
8841
9239
  // src/util/simulate-readable-stream.ts
8842
- var import_provider_utils27 = require("@ai-sdk/provider-utils");
9240
+ var import_provider_utils29 = require("@ai-sdk/provider-utils");
8843
9241
  function simulateReadableStream({
8844
9242
  chunks,
8845
9243
  initialDelayInMs = 0,
8846
9244
  chunkDelayInMs = 0,
8847
9245
  _internal
8848
9246
  }) {
8849
- var _a15;
8850
- const delay2 = (_a15 = _internal == null ? void 0 : _internal.delay) != null ? _a15 : import_provider_utils27.delay;
9247
+ var _a14;
9248
+ const delay2 = (_a14 = _internal == null ? void 0 : _internal.delay) != null ? _a14 : import_provider_utils29.delay;
8851
9249
  let index = 0;
8852
9250
  return new ReadableStream({
8853
9251
  async pull(controller) {
@@ -8862,7 +9260,7 @@ function simulateReadableStream({
8862
9260
  }
8863
9261
 
8864
9262
  // src/generate-object/stream-object.ts
8865
- var originalGenerateId4 = (0, import_provider_utils28.createIdGenerator)({ prefix: "aiobj", size: 24 });
9263
+ var originalGenerateId4 = (0, import_provider_utils30.createIdGenerator)({ prefix: "aiobj", size: 24 });
8866
9264
  function streamObject(options) {
8867
9265
  const {
8868
9266
  model,
@@ -8952,13 +9350,13 @@ var DefaultStreamObjectResult = class {
8952
9350
  currentDate,
8953
9351
  now: now2
8954
9352
  }) {
8955
- this._object = new DelayedPromise();
8956
- this._usage = new DelayedPromise();
8957
- this._providerMetadata = new DelayedPromise();
8958
- this._warnings = new DelayedPromise();
8959
- this._request = new DelayedPromise();
8960
- this._response = new DelayedPromise();
8961
- this._finishReason = new DelayedPromise();
9353
+ this._object = new import_provider_utils30.DelayedPromise();
9354
+ this._usage = new import_provider_utils30.DelayedPromise();
9355
+ this._providerMetadata = new import_provider_utils30.DelayedPromise();
9356
+ this._warnings = new import_provider_utils30.DelayedPromise();
9357
+ this._request = new import_provider_utils30.DelayedPromise();
9358
+ this._response = new import_provider_utils30.DelayedPromise();
9359
+ this._finishReason = new import_provider_utils30.DelayedPromise();
8962
9360
  const model = resolveLanguageModel(modelArg);
8963
9361
  const { maxRetries, retry } = prepareRetries({
8964
9362
  maxRetries: maxRetriesArg,
@@ -9086,11 +9484,7 @@ var DefaultStreamObjectResult = class {
9086
9484
  );
9087
9485
  self._request.resolve(request != null ? request : {});
9088
9486
  let warnings;
9089
- let usage = {
9090
- inputTokens: void 0,
9091
- outputTokens: void 0,
9092
- totalTokens: void 0
9093
- };
9487
+ let usage = createNullLanguageModelUsage();
9094
9488
  let finishReason;
9095
9489
  let providerMetadata;
9096
9490
  let object2;
@@ -9109,7 +9503,7 @@ var DefaultStreamObjectResult = class {
9109
9503
  const transformedStream = stream.pipeThrough(new TransformStream(transformer)).pipeThrough(
9110
9504
  new TransformStream({
9111
9505
  async transform(chunk, controller) {
9112
- var _a15, _b, _c;
9506
+ var _a14, _b, _c;
9113
9507
  if (typeof chunk === "object" && chunk.type === "stream-start") {
9114
9508
  warnings = chunk.warnings;
9115
9509
  return;
@@ -9159,7 +9553,7 @@ var DefaultStreamObjectResult = class {
9159
9553
  switch (chunk.type) {
9160
9554
  case "response-metadata": {
9161
9555
  fullResponse = {
9162
- id: (_a15 = chunk.id) != null ? _a15 : fullResponse.id,
9556
+ id: (_a14 = chunk.id) != null ? _a14 : fullResponse.id,
9163
9557
  timestamp: (_b = chunk.timestamp) != null ? _b : fullResponse.timestamp,
9164
9558
  modelId: (_c = chunk.modelId) != null ? _c : fullResponse.modelId
9165
9559
  };
@@ -9169,11 +9563,12 @@ var DefaultStreamObjectResult = class {
9169
9563
  if (textDelta !== "") {
9170
9564
  controller.enqueue({ type: "text-delta", textDelta });
9171
9565
  }
9172
- finishReason = chunk.finishReason;
9173
- usage = chunk.usage;
9566
+ finishReason = chunk.finishReason.unified;
9567
+ usage = asLanguageModelUsage(chunk.usage);
9174
9568
  providerMetadata = chunk.providerMetadata;
9175
9569
  controller.enqueue({
9176
9570
  ...chunk,
9571
+ finishReason: chunk.finishReason.unified,
9177
9572
  usage,
9178
9573
  response: fullResponse
9179
9574
  });
@@ -9189,7 +9584,7 @@ var DefaultStreamObjectResult = class {
9189
9584
  ...fullResponse,
9190
9585
  headers: response == null ? void 0 : response.headers
9191
9586
  });
9192
- self._finishReason.resolve(finishReason != null ? finishReason : "unknown");
9587
+ self._finishReason.resolve(finishReason != null ? finishReason : "other");
9193
9588
  try {
9194
9589
  object2 = await parseAndValidateObjectResultWithRepair(
9195
9590
  accumulatedText,
@@ -9389,7 +9784,7 @@ var DefaultStreamObjectResult = class {
9389
9784
  };
9390
9785
 
9391
9786
  // src/generate-speech/generate-speech.ts
9392
- var import_provider_utils29 = require("@ai-sdk/provider-utils");
9787
+ var import_provider_utils31 = require("@ai-sdk/provider-utils");
9393
9788
 
9394
9789
  // src/generate-speech/generated-audio-file.ts
9395
9790
  var DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {
@@ -9430,12 +9825,12 @@ async function generateSpeech({
9430
9825
  abortSignal,
9431
9826
  headers
9432
9827
  }) {
9433
- var _a15;
9828
+ var _a14;
9434
9829
  const resolvedModel = resolveSpeechModel(model);
9435
9830
  if (!resolvedModel) {
9436
9831
  throw new Error("Model could not be resolved");
9437
9832
  }
9438
- const headersWithUserAgent = (0, import_provider_utils29.withUserAgentSuffix)(
9833
+ const headersWithUserAgent = (0, import_provider_utils31.withUserAgentSuffix)(
9439
9834
  headers != null ? headers : {},
9440
9835
  `ai/${VERSION}`
9441
9836
  );
@@ -9467,10 +9862,10 @@ async function generateSpeech({
9467
9862
  return new DefaultSpeechResult({
9468
9863
  audio: new DefaultGeneratedAudioFile({
9469
9864
  data: result.audio,
9470
- mediaType: (_a15 = detectMediaType({
9865
+ mediaType: (_a14 = detectMediaType({
9471
9866
  data: result.audio,
9472
9867
  signatures: audioMediaTypeSignatures
9473
- })) != null ? _a15 : "audio/mp3"
9868
+ })) != null ? _a14 : "audio/mp3"
9474
9869
  }),
9475
9870
  warnings: result.warnings,
9476
9871
  responses: [result.response],
@@ -9479,11 +9874,11 @@ async function generateSpeech({
9479
9874
  }
9480
9875
  var DefaultSpeechResult = class {
9481
9876
  constructor(options) {
9482
- var _a15;
9877
+ var _a14;
9483
9878
  this.audio = options.audio;
9484
9879
  this.warnings = options.warnings;
9485
9880
  this.responses = options.responses;
9486
- this.providerMetadata = (_a15 = options.providerMetadata) != null ? _a15 : {};
9881
+ this.providerMetadata = (_a14 = options.providerMetadata) != null ? _a14 : {};
9487
9882
  }
9488
9883
  };
9489
9884
 
@@ -9521,7 +9916,7 @@ function pruneMessages({
9521
9916
  const keptToolCallIds = /* @__PURE__ */ new Set();
9522
9917
  const keptApprovalIds = /* @__PURE__ */ new Set();
9523
9918
  if (keepLastMessagesCount != null) {
9524
- for (const message of messages.slice(0, -keepLastMessagesCount)) {
9919
+ for (const message of messages.slice(-keepLastMessagesCount)) {
9525
9920
  if ((message.role === "assistant" || message.role === "tool") && typeof message.content !== "string") {
9526
9921
  for (const part of message.content) {
9527
9922
  if (part.type === "tool-call" || part.type === "tool-result") {
@@ -9567,8 +9962,8 @@ function pruneMessages({
9567
9962
  }
9568
9963
 
9569
9964
  // src/generate-text/smooth-stream.ts
9570
- var import_provider_utils30 = require("@ai-sdk/provider-utils");
9571
- var import_provider27 = require("@ai-sdk/provider");
9965
+ var import_provider_utils32 = require("@ai-sdk/provider-utils");
9966
+ var import_provider26 = require("@ai-sdk/provider");
9572
9967
  var CHUNKING_REGEXPS = {
9573
9968
  word: /\S+\s+/m,
9574
9969
  line: /\n+/m
@@ -9576,7 +9971,7 @@ var CHUNKING_REGEXPS = {
9576
9971
  function smoothStream({
9577
9972
  delayInMs = 10,
9578
9973
  chunking = "word",
9579
- _internal: { delay: delay2 = import_provider_utils30.delay } = {}
9974
+ _internal: { delay: delay2 = import_provider_utils32.delay } = {}
9580
9975
  } = {}) {
9581
9976
  let detectChunk;
9582
9977
  if (typeof chunking === "function") {
@@ -9598,7 +9993,7 @@ function smoothStream({
9598
9993
  } else {
9599
9994
  const chunkingRegex = typeof chunking === "string" ? CHUNKING_REGEXPS[chunking] : chunking;
9600
9995
  if (chunkingRegex == null) {
9601
- throw new import_provider27.InvalidArgumentError({
9996
+ throw new import_provider26.InvalidArgumentError({
9602
9997
  argument: "chunking",
9603
9998
  message: `Chunking must be "word" or "line" or a RegExp. Received: ${chunking}`
9604
9999
  });
@@ -9648,10 +10043,7 @@ function defaultEmbeddingSettingsMiddleware({
9648
10043
  return {
9649
10044
  specificationVersion: "v3",
9650
10045
  transformParams: async ({ params }) => {
9651
- return mergeObjects(
9652
- settings,
9653
- params
9654
- );
10046
+ return mergeObjects(settings, params);
9655
10047
  }
9656
10048
  };
9657
10049
  }
@@ -9906,6 +10298,47 @@ function simulateStreamingMiddleware() {
9906
10298
  };
9907
10299
  }
9908
10300
 
10301
+ // src/middleware/add-tool-input-examples-middleware.ts
10302
+ function defaultFormatExample(example) {
10303
+ return JSON.stringify(example.input);
10304
+ }
10305
+ function addToolInputExamplesMiddleware({
10306
+ prefix = "Input Examples:",
10307
+ format = defaultFormatExample,
10308
+ remove = true
10309
+ } = {}) {
10310
+ return {
10311
+ specificationVersion: "v3",
10312
+ transformParams: async ({ params }) => {
10313
+ var _a14;
10314
+ if (!((_a14 = params.tools) == null ? void 0 : _a14.length)) {
10315
+ return params;
10316
+ }
10317
+ const transformedTools = params.tools.map((tool2) => {
10318
+ var _a15;
10319
+ if (tool2.type !== "function" || !((_a15 = tool2.inputExamples) == null ? void 0 : _a15.length)) {
10320
+ return tool2;
10321
+ }
10322
+ const formattedExamples = tool2.inputExamples.map((example, index) => format(example, index)).join("\n");
10323
+ const examplesSection = `${prefix}
10324
+ ${formattedExamples}`;
10325
+ const toolDescription = tool2.description ? `${tool2.description}
10326
+
10327
+ ${examplesSection}` : examplesSection;
10328
+ return {
10329
+ ...tool2,
10330
+ description: toolDescription,
10331
+ inputExamples: remove ? void 0 : tool2.inputExamples
10332
+ };
10333
+ });
10334
+ return {
10335
+ ...params,
10336
+ tools: transformedTools
10337
+ };
10338
+ }
10339
+ };
10340
+ }
10341
+
9909
10342
  // src/middleware/wrap-language-model.ts
9910
10343
  var wrapLanguageModel = ({
9911
10344
  model,
@@ -9930,7 +10363,7 @@ var doWrap = ({
9930
10363
  modelId,
9931
10364
  providerId
9932
10365
  }) => {
9933
- var _a15, _b, _c;
10366
+ var _a14, _b, _c;
9934
10367
  async function doTransform({
9935
10368
  params,
9936
10369
  type
@@ -9939,7 +10372,7 @@ var doWrap = ({
9939
10372
  }
9940
10373
  return {
9941
10374
  specificationVersion: "v3",
9942
- provider: (_a15 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a15 : model.provider,
10375
+ provider: (_a14 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a14 : model.provider,
9943
10376
  modelId: (_b = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b : model.modelId,
9944
10377
  supportedUrls: (_c = overrideSupportedUrls == null ? void 0 : overrideSupportedUrls({ model })) != null ? _c : model.supportedUrls,
9945
10378
  async doGenerate(params) {
@@ -9986,7 +10419,7 @@ var doWrap2 = ({
9986
10419
  modelId,
9987
10420
  providerId
9988
10421
  }) => {
9989
- var _a15, _b, _c, _d;
10422
+ var _a14, _b, _c, _d;
9990
10423
  async function doTransform({
9991
10424
  params
9992
10425
  }) {
@@ -9994,7 +10427,7 @@ var doWrap2 = ({
9994
10427
  }
9995
10428
  return {
9996
10429
  specificationVersion: "v3",
9997
- provider: (_a15 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a15 : model.provider,
10430
+ provider: (_a14 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a14 : model.provider,
9998
10431
  modelId: (_b = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b : model.modelId,
9999
10432
  maxEmbeddingsPerCall: (_c = overrideMaxEmbeddingsPerCall == null ? void 0 : overrideMaxEmbeddingsPerCall({ model })) != null ? _c : model.maxEmbeddingsPerCall,
10000
10433
  supportsParallelCalls: (_d = overrideSupportsParallelCalls == null ? void 0 : overrideSupportsParallelCalls({ model })) != null ? _d : model.supportsParallelCalls,
@@ -10010,32 +10443,19 @@ var doWrap2 = ({
10010
10443
  };
10011
10444
  };
10012
10445
 
10013
- // src/model/as-image-model-v3.ts
10014
- function asImageModelV3(model) {
10015
- if (model.specificationVersion === "v3") {
10016
- return model;
10017
- }
10018
- return new Proxy(model, {
10019
- get(target, prop) {
10020
- if (prop === "specificationVersion")
10021
- return "v3";
10022
- return target[prop];
10023
- }
10024
- });
10025
- }
10026
-
10027
10446
  // src/model/as-provider-v3.ts
10028
10447
  function asProviderV3(provider) {
10029
10448
  if ("specificationVersion" in provider && provider.specificationVersion === "v3") {
10030
10449
  return provider;
10031
10450
  }
10451
+ const v2Provider = provider;
10032
10452
  return {
10033
10453
  specificationVersion: "v3",
10034
- languageModel: (modelId) => asLanguageModelV3(provider.languageModel(modelId)),
10035
- textEmbeddingModel: (modelId) => asEmbeddingModelV3(provider.textEmbeddingModel(modelId)),
10036
- imageModel: (modelId) => asImageModelV3(provider.imageModel(modelId)),
10037
- transcriptionModel: provider.transcriptionModel ? (modelId) => asTranscriptionModelV3(provider.transcriptionModel(modelId)) : void 0,
10038
- speechModel: provider.speechModel ? (modelId) => asSpeechModelV3(provider.speechModel(modelId)) : void 0,
10454
+ languageModel: (modelId) => asLanguageModelV3(v2Provider.languageModel(modelId)),
10455
+ embeddingModel: (modelId) => asEmbeddingModelV3(v2Provider.textEmbeddingModel(modelId)),
10456
+ imageModel: (modelId) => asImageModelV3(v2Provider.imageModel(modelId)),
10457
+ transcriptionModel: v2Provider.transcriptionModel ? (modelId) => asTranscriptionModelV3(v2Provider.transcriptionModel(modelId)) : void 0,
10458
+ speechModel: v2Provider.speechModel ? (modelId) => asSpeechModelV3(v2Provider.speechModel(modelId)) : void 0,
10039
10459
  rerankingModel: void 0
10040
10460
  // v2 providers don't have reranking models
10041
10461
  };
@@ -10053,7 +10473,7 @@ function wrapProvider({
10053
10473
  model: providerV3.languageModel(modelId),
10054
10474
  middleware: languageModelMiddleware
10055
10475
  }),
10056
- textEmbeddingModel: providerV3.textEmbeddingModel,
10476
+ embeddingModel: providerV3.embeddingModel,
10057
10477
  imageModel: providerV3.imageModel,
10058
10478
  transcriptionModel: providerV3.transcriptionModel,
10059
10479
  speechModel: providerV3.speechModel,
@@ -10062,10 +10482,10 @@ function wrapProvider({
10062
10482
  }
10063
10483
 
10064
10484
  // src/registry/custom-provider.ts
10065
- var import_provider28 = require("@ai-sdk/provider");
10485
+ var import_provider27 = require("@ai-sdk/provider");
10066
10486
  function customProvider({
10067
10487
  languageModels,
10068
- textEmbeddingModels,
10488
+ embeddingModels,
10069
10489
  imageModels,
10070
10490
  transcriptionModels,
10071
10491
  speechModels,
@@ -10082,16 +10502,16 @@ function customProvider({
10082
10502
  if (fallbackProvider) {
10083
10503
  return fallbackProvider.languageModel(modelId);
10084
10504
  }
10085
- throw new import_provider28.NoSuchModelError({ modelId, modelType: "languageModel" });
10505
+ throw new import_provider27.NoSuchModelError({ modelId, modelType: "languageModel" });
10086
10506
  },
10087
- textEmbeddingModel(modelId) {
10088
- if (textEmbeddingModels != null && modelId in textEmbeddingModels) {
10089
- return textEmbeddingModels[modelId];
10507
+ embeddingModel(modelId) {
10508
+ if (embeddingModels != null && modelId in embeddingModels) {
10509
+ return embeddingModels[modelId];
10090
10510
  }
10091
10511
  if (fallbackProvider) {
10092
- return fallbackProvider.textEmbeddingModel(modelId);
10512
+ return fallbackProvider.embeddingModel(modelId);
10093
10513
  }
10094
- throw new import_provider28.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
10514
+ throw new import_provider27.NoSuchModelError({ modelId, modelType: "embeddingModel" });
10095
10515
  },
10096
10516
  imageModel(modelId) {
10097
10517
  if (imageModels != null && modelId in imageModels) {
@@ -10100,7 +10520,7 @@ function customProvider({
10100
10520
  if (fallbackProvider == null ? void 0 : fallbackProvider.imageModel) {
10101
10521
  return fallbackProvider.imageModel(modelId);
10102
10522
  }
10103
- throw new import_provider28.NoSuchModelError({ modelId, modelType: "imageModel" });
10523
+ throw new import_provider27.NoSuchModelError({ modelId, modelType: "imageModel" });
10104
10524
  },
10105
10525
  transcriptionModel(modelId) {
10106
10526
  if (transcriptionModels != null && modelId in transcriptionModels) {
@@ -10109,7 +10529,7 @@ function customProvider({
10109
10529
  if (fallbackProvider == null ? void 0 : fallbackProvider.transcriptionModel) {
10110
10530
  return fallbackProvider.transcriptionModel(modelId);
10111
10531
  }
10112
- throw new import_provider28.NoSuchModelError({ modelId, modelType: "transcriptionModel" });
10532
+ throw new import_provider27.NoSuchModelError({ modelId, modelType: "transcriptionModel" });
10113
10533
  },
10114
10534
  speechModel(modelId) {
10115
10535
  if (speechModels != null && modelId in speechModels) {
@@ -10118,7 +10538,7 @@ function customProvider({
10118
10538
  if (fallbackProvider == null ? void 0 : fallbackProvider.speechModel) {
10119
10539
  return fallbackProvider.speechModel(modelId);
10120
10540
  }
10121
- throw new import_provider28.NoSuchModelError({ modelId, modelType: "speechModel" });
10541
+ throw new import_provider27.NoSuchModelError({ modelId, modelType: "speechModel" });
10122
10542
  },
10123
10543
  rerankingModel(modelId) {
10124
10544
  if (rerankingModels != null && modelId in rerankingModels) {
@@ -10127,19 +10547,19 @@ function customProvider({
10127
10547
  if (fallbackProvider == null ? void 0 : fallbackProvider.rerankingModel) {
10128
10548
  return fallbackProvider.rerankingModel(modelId);
10129
10549
  }
10130
- throw new import_provider28.NoSuchModelError({ modelId, modelType: "rerankingModel" });
10550
+ throw new import_provider27.NoSuchModelError({ modelId, modelType: "rerankingModel" });
10131
10551
  }
10132
10552
  };
10133
10553
  }
10134
10554
  var experimental_customProvider = customProvider;
10135
10555
 
10136
10556
  // src/registry/no-such-provider-error.ts
10137
- var import_provider29 = require("@ai-sdk/provider");
10138
- var name14 = "AI_NoSuchProviderError";
10139
- var marker14 = `vercel.ai.error.${name14}`;
10140
- var symbol14 = Symbol.for(marker14);
10141
- var _a14;
10142
- var NoSuchProviderError = class extends import_provider29.NoSuchModelError {
10557
+ var import_provider28 = require("@ai-sdk/provider");
10558
+ var name13 = "AI_NoSuchProviderError";
10559
+ var marker13 = `vercel.ai.error.${name13}`;
10560
+ var symbol13 = Symbol.for(marker13);
10561
+ var _a13;
10562
+ var NoSuchProviderError = class extends import_provider28.NoSuchModelError {
10143
10563
  constructor({
10144
10564
  modelId,
10145
10565
  modelType,
@@ -10147,19 +10567,19 @@ var NoSuchProviderError = class extends import_provider29.NoSuchModelError {
10147
10567
  availableProviders,
10148
10568
  message = `No such provider: ${providerId} (available providers: ${availableProviders.join()})`
10149
10569
  }) {
10150
- super({ errorName: name14, modelId, modelType, message });
10151
- this[_a14] = true;
10570
+ super({ errorName: name13, modelId, modelType, message });
10571
+ this[_a13] = true;
10152
10572
  this.providerId = providerId;
10153
10573
  this.availableProviders = availableProviders;
10154
10574
  }
10155
10575
  static isInstance(error) {
10156
- return import_provider29.AISDKError.hasMarker(error, marker14);
10576
+ return import_provider28.AISDKError.hasMarker(error, marker13);
10157
10577
  }
10158
10578
  };
10159
- _a14 = symbol14;
10579
+ _a13 = symbol13;
10160
10580
 
10161
10581
  // src/registry/provider-registry.ts
10162
- var import_provider30 = require("@ai-sdk/provider");
10582
+ var import_provider29 = require("@ai-sdk/provider");
10163
10583
  function createProviderRegistry(providers, {
10164
10584
  separator = ":",
10165
10585
  languageModelMiddleware
@@ -10204,7 +10624,7 @@ var DefaultProviderRegistry = class {
10204
10624
  splitId(id, modelType) {
10205
10625
  const index = id.indexOf(this.separator);
10206
10626
  if (index === -1) {
10207
- throw new import_provider30.NoSuchModelError({
10627
+ throw new import_provider29.NoSuchModelError({
10208
10628
  modelId: id,
10209
10629
  modelType,
10210
10630
  message: `Invalid ${modelType} id for registry: ${id} (must be in the format "providerId${this.separator}modelId")`
@@ -10213,14 +10633,14 @@ var DefaultProviderRegistry = class {
10213
10633
  return [id.slice(0, index), id.slice(index + this.separator.length)];
10214
10634
  }
10215
10635
  languageModel(id) {
10216
- var _a15, _b;
10636
+ var _a14, _b;
10217
10637
  const [providerId, modelId] = this.splitId(id, "languageModel");
10218
- let model = (_b = (_a15 = this.getProvider(providerId, "languageModel")).languageModel) == null ? void 0 : _b.call(
10219
- _a15,
10638
+ let model = (_b = (_a14 = this.getProvider(providerId, "languageModel")).languageModel) == null ? void 0 : _b.call(
10639
+ _a14,
10220
10640
  modelId
10221
10641
  );
10222
10642
  if (model == null) {
10223
- throw new import_provider30.NoSuchModelError({ modelId: id, modelType: "languageModel" });
10643
+ throw new import_provider29.NoSuchModelError({ modelId: id, modelType: "languageModel" });
10224
10644
  }
10225
10645
  if (this.languageModelMiddleware != null) {
10226
10646
  model = wrapLanguageModel({
@@ -10230,36 +10650,36 @@ var DefaultProviderRegistry = class {
10230
10650
  }
10231
10651
  return model;
10232
10652
  }
10233
- textEmbeddingModel(id) {
10234
- var _a15;
10235
- const [providerId, modelId] = this.splitId(id, "textEmbeddingModel");
10236
- const provider = this.getProvider(providerId, "textEmbeddingModel");
10237
- const model = (_a15 = provider.textEmbeddingModel) == null ? void 0 : _a15.call(provider, modelId);
10653
+ embeddingModel(id) {
10654
+ var _a14;
10655
+ const [providerId, modelId] = this.splitId(id, "embeddingModel");
10656
+ const provider = this.getProvider(providerId, "embeddingModel");
10657
+ const model = (_a14 = provider.embeddingModel) == null ? void 0 : _a14.call(provider, modelId);
10238
10658
  if (model == null) {
10239
- throw new import_provider30.NoSuchModelError({
10659
+ throw new import_provider29.NoSuchModelError({
10240
10660
  modelId: id,
10241
- modelType: "textEmbeddingModel"
10661
+ modelType: "embeddingModel"
10242
10662
  });
10243
10663
  }
10244
10664
  return model;
10245
10665
  }
10246
10666
  imageModel(id) {
10247
- var _a15;
10667
+ var _a14;
10248
10668
  const [providerId, modelId] = this.splitId(id, "imageModel");
10249
10669
  const provider = this.getProvider(providerId, "imageModel");
10250
- const model = (_a15 = provider.imageModel) == null ? void 0 : _a15.call(provider, modelId);
10670
+ const model = (_a14 = provider.imageModel) == null ? void 0 : _a14.call(provider, modelId);
10251
10671
  if (model == null) {
10252
- throw new import_provider30.NoSuchModelError({ modelId: id, modelType: "imageModel" });
10672
+ throw new import_provider29.NoSuchModelError({ modelId: id, modelType: "imageModel" });
10253
10673
  }
10254
10674
  return model;
10255
10675
  }
10256
10676
  transcriptionModel(id) {
10257
- var _a15;
10677
+ var _a14;
10258
10678
  const [providerId, modelId] = this.splitId(id, "transcriptionModel");
10259
10679
  const provider = this.getProvider(providerId, "transcriptionModel");
10260
- const model = (_a15 = provider.transcriptionModel) == null ? void 0 : _a15.call(provider, modelId);
10680
+ const model = (_a14 = provider.transcriptionModel) == null ? void 0 : _a14.call(provider, modelId);
10261
10681
  if (model == null) {
10262
- throw new import_provider30.NoSuchModelError({
10682
+ throw new import_provider29.NoSuchModelError({
10263
10683
  modelId: id,
10264
10684
  modelType: "transcriptionModel"
10265
10685
  });
@@ -10267,22 +10687,22 @@ var DefaultProviderRegistry = class {
10267
10687
  return model;
10268
10688
  }
10269
10689
  speechModel(id) {
10270
- var _a15;
10690
+ var _a14;
10271
10691
  const [providerId, modelId] = this.splitId(id, "speechModel");
10272
10692
  const provider = this.getProvider(providerId, "speechModel");
10273
- const model = (_a15 = provider.speechModel) == null ? void 0 : _a15.call(provider, modelId);
10693
+ const model = (_a14 = provider.speechModel) == null ? void 0 : _a14.call(provider, modelId);
10274
10694
  if (model == null) {
10275
- throw new import_provider30.NoSuchModelError({ modelId: id, modelType: "speechModel" });
10695
+ throw new import_provider29.NoSuchModelError({ modelId: id, modelType: "speechModel" });
10276
10696
  }
10277
10697
  return model;
10278
10698
  }
10279
10699
  rerankingModel(id) {
10280
- var _a15;
10700
+ var _a14;
10281
10701
  const [providerId, modelId] = this.splitId(id, "rerankingModel");
10282
10702
  const provider = this.getProvider(providerId, "rerankingModel");
10283
- const model = (_a15 = provider.rerankingModel) == null ? void 0 : _a15.call(provider, modelId);
10703
+ const model = (_a14 = provider.rerankingModel) == null ? void 0 : _a14.call(provider, modelId);
10284
10704
  if (model == null) {
10285
- throw new import_provider30.NoSuchModelError({ modelId: id, modelType: "rerankingModel" });
10705
+ throw new import_provider29.NoSuchModelError({ modelId: id, modelType: "rerankingModel" });
10286
10706
  }
10287
10707
  return model;
10288
10708
  }
@@ -10337,7 +10757,7 @@ async function rerank({
10337
10757
  }),
10338
10758
  tracer,
10339
10759
  fn: async () => {
10340
- var _a15, _b;
10760
+ var _a14, _b;
10341
10761
  const { ranking, response, providerMetadata, warnings } = await retry(
10342
10762
  () => recordSpan({
10343
10763
  name: "ai.rerank.doRerank",
@@ -10401,7 +10821,7 @@ async function rerank({
10401
10821
  providerMetadata,
10402
10822
  response: {
10403
10823
  id: response == null ? void 0 : response.id,
10404
- timestamp: (_a15 = response == null ? void 0 : response.timestamp) != null ? _a15 : /* @__PURE__ */ new Date(),
10824
+ timestamp: (_a14 = response == null ? void 0 : response.timestamp) != null ? _a14 : /* @__PURE__ */ new Date(),
10405
10825
  modelId: (_b = response == null ? void 0 : response.modelId) != null ? _b : model.modelId,
10406
10826
  headers: response == null ? void 0 : response.headers,
10407
10827
  body: response == null ? void 0 : response.body
@@ -10423,11 +10843,11 @@ var DefaultRerankResult = class {
10423
10843
  };
10424
10844
 
10425
10845
  // src/transcribe/transcribe.ts
10426
- var import_provider_utils31 = require("@ai-sdk/provider-utils");
10846
+ var import_provider_utils33 = require("@ai-sdk/provider-utils");
10427
10847
 
10428
10848
  // src/error/no-transcript-generated-error.ts
10429
- var import_provider31 = require("@ai-sdk/provider");
10430
- var NoTranscriptGeneratedError = class extends import_provider31.AISDKError {
10849
+ var import_provider30 = require("@ai-sdk/provider");
10850
+ var NoTranscriptGeneratedError = class extends import_provider30.AISDKError {
10431
10851
  constructor(options) {
10432
10852
  super({
10433
10853
  name: "AI_NoTranscriptGeneratedError",
@@ -10454,23 +10874,23 @@ async function transcribe({
10454
10874
  maxRetries: maxRetriesArg,
10455
10875
  abortSignal
10456
10876
  });
10457
- const headersWithUserAgent = (0, import_provider_utils31.withUserAgentSuffix)(
10877
+ const headersWithUserAgent = (0, import_provider_utils33.withUserAgentSuffix)(
10458
10878
  headers != null ? headers : {},
10459
10879
  `ai/${VERSION}`
10460
10880
  );
10461
10881
  const audioData = audio instanceof URL ? (await download({ url: audio })).data : convertDataContentToUint8Array(audio);
10462
10882
  const result = await retry(
10463
10883
  () => {
10464
- var _a15;
10884
+ var _a14;
10465
10885
  return resolvedModel.doGenerate({
10466
10886
  audio: audioData,
10467
10887
  abortSignal,
10468
10888
  headers: headersWithUserAgent,
10469
10889
  providerOptions,
10470
- mediaType: (_a15 = detectMediaType({
10890
+ mediaType: (_a14 = detectMediaType({
10471
10891
  data: audioData,
10472
10892
  signatures: audioMediaTypeSignatures
10473
- })) != null ? _a15 : "audio/wav"
10893
+ })) != null ? _a14 : "audio/wav"
10474
10894
  });
10475
10895
  }
10476
10896
  );
@@ -10494,19 +10914,19 @@ async function transcribe({
10494
10914
  }
10495
10915
  var DefaultTranscriptionResult = class {
10496
10916
  constructor(options) {
10497
- var _a15;
10917
+ var _a14;
10498
10918
  this.text = options.text;
10499
10919
  this.segments = options.segments;
10500
10920
  this.language = options.language;
10501
10921
  this.durationInSeconds = options.durationInSeconds;
10502
10922
  this.warnings = options.warnings;
10503
10923
  this.responses = options.responses;
10504
- this.providerMetadata = (_a15 = options.providerMetadata) != null ? _a15 : {};
10924
+ this.providerMetadata = (_a14 = options.providerMetadata) != null ? _a14 : {};
10505
10925
  }
10506
10926
  };
10507
10927
 
10508
10928
  // src/ui/call-completion-api.ts
10509
- var import_provider_utils32 = require("@ai-sdk/provider-utils");
10929
+ var import_provider_utils34 = require("@ai-sdk/provider-utils");
10510
10930
 
10511
10931
  // src/ui/process-text-stream.ts
10512
10932
  async function processTextStream({
@@ -10540,7 +10960,7 @@ async function callCompletionApi({
10540
10960
  onError,
10541
10961
  fetch: fetch2 = getOriginalFetch()
10542
10962
  }) {
10543
- var _a15;
10963
+ var _a14;
10544
10964
  try {
10545
10965
  setLoading(true);
10546
10966
  setError(void 0);
@@ -10554,13 +10974,13 @@ async function callCompletionApi({
10554
10974
  ...body
10555
10975
  }),
10556
10976
  credentials,
10557
- headers: (0, import_provider_utils32.withUserAgentSuffix)(
10977
+ headers: (0, import_provider_utils34.withUserAgentSuffix)(
10558
10978
  {
10559
10979
  "Content-Type": "application/json",
10560
10980
  ...headers
10561
10981
  },
10562
10982
  `ai-sdk/${VERSION}`,
10563
- (0, import_provider_utils32.getRuntimeEnvironmentUserAgent)()
10983
+ (0, import_provider_utils34.getRuntimeEnvironmentUserAgent)()
10564
10984
  ),
10565
10985
  signal: abortController.signal
10566
10986
  }).catch((err) => {
@@ -10568,7 +10988,7 @@ async function callCompletionApi({
10568
10988
  });
10569
10989
  if (!response.ok) {
10570
10990
  throw new Error(
10571
- (_a15 = await response.text()) != null ? _a15 : "Failed to fetch the chat response."
10991
+ (_a14 = await response.text()) != null ? _a14 : "Failed to fetch the chat response."
10572
10992
  );
10573
10993
  }
10574
10994
  if (!response.body) {
@@ -10588,7 +11008,7 @@ async function callCompletionApi({
10588
11008
  }
10589
11009
  case "data": {
10590
11010
  await consumeStream({
10591
- stream: (0, import_provider_utils32.parseJsonEventStream)({
11011
+ stream: (0, import_provider_utils34.parseJsonEventStream)({
10592
11012
  stream: response.body,
10593
11013
  schema: uiMessageChunkSchema
10594
11014
  }).pipeThrough(
@@ -10640,7 +11060,7 @@ async function callCompletionApi({
10640
11060
  }
10641
11061
 
10642
11062
  // src/ui/chat.ts
10643
- var import_provider_utils35 = require("@ai-sdk/provider-utils");
11063
+ var import_provider_utils37 = require("@ai-sdk/provider-utils");
10644
11064
 
10645
11065
  // src/ui/convert-file-list-to-file-ui-parts.ts
10646
11066
  async function convertFileListToFileUIParts(files) {
@@ -10652,12 +11072,12 @@ async function convertFileListToFileUIParts(files) {
10652
11072
  }
10653
11073
  return Promise.all(
10654
11074
  Array.from(files).map(async (file) => {
10655
- const { name: name15, type } = file;
11075
+ const { name: name14, type } = file;
10656
11076
  const dataUrl = await new Promise((resolve3, reject) => {
10657
11077
  const reader = new FileReader();
10658
11078
  reader.onload = (readerEvent) => {
10659
- var _a15;
10660
- resolve3((_a15 = readerEvent.target) == null ? void 0 : _a15.result);
11079
+ var _a14;
11080
+ resolve3((_a14 = readerEvent.target) == null ? void 0 : _a14.result);
10661
11081
  };
10662
11082
  reader.onerror = (error) => reject(error);
10663
11083
  reader.readAsDataURL(file);
@@ -10665,7 +11085,7 @@ async function convertFileListToFileUIParts(files) {
10665
11085
  return {
10666
11086
  type: "file",
10667
11087
  mediaType: type,
10668
- filename: name15,
11088
+ filename: name14,
10669
11089
  url: dataUrl
10670
11090
  };
10671
11091
  })
@@ -10673,10 +11093,10 @@ async function convertFileListToFileUIParts(files) {
10673
11093
  }
10674
11094
 
10675
11095
  // src/ui/default-chat-transport.ts
10676
- var import_provider_utils34 = require("@ai-sdk/provider-utils");
11096
+ var import_provider_utils36 = require("@ai-sdk/provider-utils");
10677
11097
 
10678
11098
  // src/ui/http-chat-transport.ts
10679
- var import_provider_utils33 = require("@ai-sdk/provider-utils");
11099
+ var import_provider_utils35 = require("@ai-sdk/provider-utils");
10680
11100
  var HttpChatTransport = class {
10681
11101
  constructor({
10682
11102
  api = "/api/chat",
@@ -10699,15 +11119,15 @@ var HttpChatTransport = class {
10699
11119
  abortSignal,
10700
11120
  ...options
10701
11121
  }) {
10702
- var _a15, _b, _c, _d, _e;
10703
- const resolvedBody = await (0, import_provider_utils33.resolve)(this.body);
10704
- const resolvedHeaders = await (0, import_provider_utils33.resolve)(this.headers);
10705
- const resolvedCredentials = await (0, import_provider_utils33.resolve)(this.credentials);
11122
+ var _a14, _b, _c, _d, _e;
11123
+ const resolvedBody = await (0, import_provider_utils35.resolve)(this.body);
11124
+ const resolvedHeaders = await (0, import_provider_utils35.resolve)(this.headers);
11125
+ const resolvedCredentials = await (0, import_provider_utils35.resolve)(this.credentials);
10706
11126
  const baseHeaders = {
10707
- ...(0, import_provider_utils33.normalizeHeaders)(resolvedHeaders),
10708
- ...(0, import_provider_utils33.normalizeHeaders)(options.headers)
11127
+ ...(0, import_provider_utils35.normalizeHeaders)(resolvedHeaders),
11128
+ ...(0, import_provider_utils35.normalizeHeaders)(options.headers)
10709
11129
  };
10710
- const preparedRequest = await ((_a15 = this.prepareSendMessagesRequest) == null ? void 0 : _a15.call(this, {
11130
+ const preparedRequest = await ((_a14 = this.prepareSendMessagesRequest) == null ? void 0 : _a14.call(this, {
10711
11131
  api: this.api,
10712
11132
  id: options.chatId,
10713
11133
  messages: options.messages,
@@ -10719,7 +11139,7 @@ var HttpChatTransport = class {
10719
11139
  messageId: options.messageId
10720
11140
  }));
10721
11141
  const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : this.api;
10722
- const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils33.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
11142
+ const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils35.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
10723
11143
  const body = (preparedRequest == null ? void 0 : preparedRequest.body) !== void 0 ? preparedRequest.body : {
10724
11144
  ...resolvedBody,
10725
11145
  ...options.body,
@@ -10732,13 +11152,13 @@ var HttpChatTransport = class {
10732
11152
  const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;
10733
11153
  const response = await fetch2(api, {
10734
11154
  method: "POST",
10735
- headers: (0, import_provider_utils33.withUserAgentSuffix)(
11155
+ headers: (0, import_provider_utils35.withUserAgentSuffix)(
10736
11156
  {
10737
11157
  "Content-Type": "application/json",
10738
11158
  ...headers
10739
11159
  },
10740
11160
  `ai-sdk/${VERSION}`,
10741
- (0, import_provider_utils33.getRuntimeEnvironmentUserAgent)()
11161
+ (0, import_provider_utils35.getRuntimeEnvironmentUserAgent)()
10742
11162
  ),
10743
11163
  body: JSON.stringify(body),
10744
11164
  credentials,
@@ -10755,15 +11175,15 @@ var HttpChatTransport = class {
10755
11175
  return this.processResponseStream(response.body);
10756
11176
  }
10757
11177
  async reconnectToStream(options) {
10758
- var _a15, _b, _c, _d, _e;
10759
- const resolvedBody = await (0, import_provider_utils33.resolve)(this.body);
10760
- const resolvedHeaders = await (0, import_provider_utils33.resolve)(this.headers);
10761
- const resolvedCredentials = await (0, import_provider_utils33.resolve)(this.credentials);
11178
+ var _a14, _b, _c, _d, _e;
11179
+ const resolvedBody = await (0, import_provider_utils35.resolve)(this.body);
11180
+ const resolvedHeaders = await (0, import_provider_utils35.resolve)(this.headers);
11181
+ const resolvedCredentials = await (0, import_provider_utils35.resolve)(this.credentials);
10762
11182
  const baseHeaders = {
10763
- ...(0, import_provider_utils33.normalizeHeaders)(resolvedHeaders),
10764
- ...(0, import_provider_utils33.normalizeHeaders)(options.headers)
11183
+ ...(0, import_provider_utils35.normalizeHeaders)(resolvedHeaders),
11184
+ ...(0, import_provider_utils35.normalizeHeaders)(options.headers)
10765
11185
  };
10766
- const preparedRequest = await ((_a15 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a15.call(this, {
11186
+ const preparedRequest = await ((_a14 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a14.call(this, {
10767
11187
  api: this.api,
10768
11188
  id: options.chatId,
10769
11189
  body: { ...resolvedBody, ...options.body },
@@ -10772,15 +11192,15 @@ var HttpChatTransport = class {
10772
11192
  requestMetadata: options.metadata
10773
11193
  }));
10774
11194
  const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : `${this.api}/${options.chatId}/stream`;
10775
- const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils33.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
11195
+ const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils35.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
10776
11196
  const credentials = (_c = preparedRequest == null ? void 0 : preparedRequest.credentials) != null ? _c : resolvedCredentials;
10777
11197
  const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;
10778
11198
  const response = await fetch2(api, {
10779
11199
  method: "GET",
10780
- headers: (0, import_provider_utils33.withUserAgentSuffix)(
11200
+ headers: (0, import_provider_utils35.withUserAgentSuffix)(
10781
11201
  headers,
10782
11202
  `ai-sdk/${VERSION}`,
10783
- (0, import_provider_utils33.getRuntimeEnvironmentUserAgent)()
11203
+ (0, import_provider_utils35.getRuntimeEnvironmentUserAgent)()
10784
11204
  ),
10785
11205
  credentials
10786
11206
  });
@@ -10805,7 +11225,7 @@ var DefaultChatTransport = class extends HttpChatTransport {
10805
11225
  super(options);
10806
11226
  }
10807
11227
  processResponseStream(stream) {
10808
- return (0, import_provider_utils34.parseJsonEventStream)({
11228
+ return (0, import_provider_utils36.parseJsonEventStream)({
10809
11229
  stream,
10810
11230
  schema: uiMessageChunkSchema
10811
11231
  }).pipeThrough(
@@ -10824,7 +11244,7 @@ var DefaultChatTransport = class extends HttpChatTransport {
10824
11244
  // src/ui/chat.ts
10825
11245
  var AbstractChat = class {
10826
11246
  constructor({
10827
- generateId: generateId2 = import_provider_utils35.generateId,
11247
+ generateId: generateId2 = import_provider_utils37.generateId,
10828
11248
  id = generateId2(),
10829
11249
  transport = new DefaultChatTransport(),
10830
11250
  messageMetadataSchema,
@@ -10845,11 +11265,11 @@ var AbstractChat = class {
10845
11265
  * If a messageId is provided, the message will be replaced.
10846
11266
  */
10847
11267
  this.sendMessage = async (message, options) => {
10848
- var _a15, _b, _c, _d;
11268
+ var _a14, _b, _c, _d;
10849
11269
  if (message == null) {
10850
11270
  await this.makeRequest({
10851
11271
  trigger: "submit-message",
10852
- messageId: (_a15 = this.lastMessage) == null ? void 0 : _a15.id,
11272
+ messageId: (_a14 = this.lastMessage) == null ? void 0 : _a14.id,
10853
11273
  ...options
10854
11274
  });
10855
11275
  return;
@@ -10942,10 +11362,10 @@ var AbstractChat = class {
10942
11362
  approved,
10943
11363
  reason
10944
11364
  }) => this.jobExecutor.run(async () => {
10945
- var _a15, _b;
11365
+ var _a14, _b;
10946
11366
  const messages = this.state.messages;
10947
11367
  const lastMessage = messages[messages.length - 1];
10948
- const updatePart = (part) => isToolOrDynamicToolUIPart(part) && part.state === "approval-requested" && part.approval.id === id ? {
11368
+ const updatePart = (part) => isToolUIPart(part) && part.state === "approval-requested" && part.approval.id === id ? {
10949
11369
  ...part,
10950
11370
  state: "approval-responded",
10951
11371
  approval: { id, approved, reason }
@@ -10957,7 +11377,7 @@ var AbstractChat = class {
10957
11377
  if (this.activeResponse) {
10958
11378
  this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);
10959
11379
  }
10960
- if (this.status !== "streaming" && this.status !== "submitted" && ((_a15 = this.sendAutomaticallyWhen) == null ? void 0 : _a15.call(this, { messages: this.state.messages }))) {
11380
+ if (this.status !== "streaming" && this.status !== "submitted" && ((_a14 = this.sendAutomaticallyWhen) == null ? void 0 : _a14.call(this, { messages: this.state.messages }))) {
10961
11381
  this.makeRequest({
10962
11382
  trigger: "submit-message",
10963
11383
  messageId: (_b = this.lastMessage) == null ? void 0 : _b.id
@@ -10971,10 +11391,10 @@ var AbstractChat = class {
10971
11391
  output,
10972
11392
  errorText
10973
11393
  }) => this.jobExecutor.run(async () => {
10974
- var _a15, _b;
11394
+ var _a14, _b;
10975
11395
  const messages = this.state.messages;
10976
11396
  const lastMessage = messages[messages.length - 1];
10977
- const updatePart = (part) => isToolOrDynamicToolUIPart(part) && part.toolCallId === toolCallId ? { ...part, state, output, errorText } : part;
11397
+ const updatePart = (part) => isToolUIPart(part) && part.toolCallId === toolCallId ? { ...part, state, output, errorText } : part;
10978
11398
  this.state.replaceMessage(messages.length - 1, {
10979
11399
  ...lastMessage,
10980
11400
  parts: lastMessage.parts.map(updatePart)
@@ -10982,7 +11402,7 @@ var AbstractChat = class {
10982
11402
  if (this.activeResponse) {
10983
11403
  this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);
10984
11404
  }
10985
- if (this.status !== "streaming" && this.status !== "submitted" && ((_a15 = this.sendAutomaticallyWhen) == null ? void 0 : _a15.call(this, { messages: this.state.messages }))) {
11405
+ if (this.status !== "streaming" && this.status !== "submitted" && ((_a14 = this.sendAutomaticallyWhen) == null ? void 0 : _a14.call(this, { messages: this.state.messages }))) {
10986
11406
  this.makeRequest({
10987
11407
  trigger: "submit-message",
10988
11408
  messageId: (_b = this.lastMessage) == null ? void 0 : _b.id
@@ -10995,10 +11415,10 @@ var AbstractChat = class {
10995
11415
  * Abort the current request immediately, keep the generated tokens if any.
10996
11416
  */
10997
11417
  this.stop = async () => {
10998
- var _a15;
11418
+ var _a14;
10999
11419
  if (this.status !== "streaming" && this.status !== "submitted")
11000
11420
  return;
11001
- if ((_a15 = this.activeResponse) == null ? void 0 : _a15.abortController) {
11421
+ if ((_a14 = this.activeResponse) == null ? void 0 : _a14.abortController) {
11002
11422
  this.activeResponse.abortController.abort();
11003
11423
  }
11004
11424
  };
@@ -11053,7 +11473,7 @@ var AbstractChat = class {
11053
11473
  body,
11054
11474
  messageId
11055
11475
  }) {
11056
- var _a15, _b, _c, _d;
11476
+ var _a14, _b, _c, _d;
11057
11477
  this.setStatus({ status: "submitted", error: void 0 });
11058
11478
  const lastMessage = this.lastMessage;
11059
11479
  let isAbort = false;
@@ -11102,9 +11522,9 @@ var AbstractChat = class {
11102
11522
  () => job({
11103
11523
  state: activeResponse.state,
11104
11524
  write: () => {
11105
- var _a16;
11525
+ var _a15;
11106
11526
  this.setStatus({ status: "streaming" });
11107
- const replaceLastMessage = activeResponse.state.message.id === ((_a16 = this.lastMessage) == null ? void 0 : _a16.id);
11527
+ const replaceLastMessage = activeResponse.state.message.id === ((_a15 = this.lastMessage) == null ? void 0 : _a15.id);
11108
11528
  if (replaceLastMessage) {
11109
11529
  this.state.replaceMessage(
11110
11530
  this.state.messages.length - 1,
@@ -11156,7 +11576,7 @@ var AbstractChat = class {
11156
11576
  isAbort,
11157
11577
  isDisconnect,
11158
11578
  isError,
11159
- finishReason: (_a15 = this.activeResponse) == null ? void 0 : _a15.state.finishReason
11579
+ finishReason: (_a14 = this.activeResponse) == null ? void 0 : _a14.state.finishReason
11160
11580
  });
11161
11581
  } catch (err) {
11162
11582
  console.error(err);
@@ -11189,7 +11609,7 @@ function lastAssistantMessageIsCompleteWithApprovalResponses({
11189
11609
  const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {
11190
11610
  return part.type === "step-start" ? index : lastIndex;
11191
11611
  }, -1);
11192
- const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolOrDynamicToolUIPart).filter((part) => !part.providerExecuted);
11612
+ const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolUIPart).filter((part) => !part.providerExecuted);
11193
11613
  return (
11194
11614
  // has at least one tool approval response
11195
11615
  lastStepToolInvocations.filter((part) => part.state === "approval-responded").length > 0 && // all tool approvals must have a response
@@ -11213,7 +11633,7 @@ function lastAssistantMessageIsCompleteWithToolCalls({
11213
11633
  const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {
11214
11634
  return part.type === "step-start" ? index : lastIndex;
11215
11635
  }, -1);
11216
- const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolOrDynamicToolUIPart).filter((part) => !part.providerExecuted);
11636
+ const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolUIPart).filter((part) => !part.providerExecuted);
11217
11637
  return lastStepToolInvocations.length > 0 && lastStepToolInvocations.every(
11218
11638
  (part) => part.state === "output-available" || part.state === "output-error"
11219
11639
  );
@@ -11294,18 +11714,13 @@ var TextStreamChatTransport = class extends HttpChatTransport {
11294
11714
  UI_MESSAGE_STREAM_HEADERS,
11295
11715
  UnsupportedFunctionalityError,
11296
11716
  UnsupportedModelVersionError,
11717
+ addToolInputExamplesMiddleware,
11297
11718
  asSchema,
11298
11719
  assistantModelMessageSchema,
11299
11720
  callCompletionApi,
11300
11721
  consumeStream,
11301
11722
  convertFileListToFileUIParts,
11302
- convertToCoreMessages,
11303
11723
  convertToModelMessages,
11304
- coreAssistantMessageSchema,
11305
- coreMessageSchema,
11306
- coreSystemMessageSchema,
11307
- coreToolMessageSchema,
11308
- coreUserMessageSchema,
11309
11724
  cosineSimilarity,
11310
11725
  createAgentUIStream,
11311
11726
  createAgentUIStreamResponse,
@@ -11329,8 +11744,10 @@ var TextStreamChatTransport = class extends HttpChatTransport {
11329
11744
  extractReasoningMiddleware,
11330
11745
  gateway,
11331
11746
  generateId,
11747
+ generateImage,
11332
11748
  generateObject,
11333
11749
  generateText,
11750
+ getStaticToolName,
11334
11751
  getTextFromDataUrl,
11335
11752
  getToolName,
11336
11753
  getToolOrDynamicToolName,
@@ -11339,6 +11756,7 @@ var TextStreamChatTransport = class extends HttpChatTransport {
11339
11756
  isDeepEqualData,
11340
11757
  isFileUIPart,
11341
11758
  isReasoningUIPart,
11759
+ isStaticToolUIPart,
11342
11760
  isTextUIPart,
11343
11761
  isToolOrDynamicToolUIPart,
11344
11762
  isToolUIPart,