@zenning/ai 5.3.2 → 6.0.13

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.
@@ -120,44 +120,19 @@ function detectMediaType({
120
120
  return void 0;
121
121
  }
122
122
 
123
- // src/util/download/download-error.ts
124
- import { AISDKError } from "@zenning/provider";
125
- var name = "AI_DownloadError";
126
- var marker = `vercel.ai.error.${name}`;
127
- var symbol = Symbol.for(marker);
128
- var _a;
129
- var DownloadError = class extends AISDKError {
130
- constructor({
131
- url,
132
- statusCode,
133
- statusText,
134
- cause,
135
- message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
136
- }) {
137
- super({ name, message, cause });
138
- this[_a] = true;
139
- this.url = url;
140
- this.statusCode = statusCode;
141
- this.statusText = statusText;
142
- }
143
- static isInstance(error) {
144
- return AISDKError.hasMarker(error, marker);
145
- }
146
- };
147
- _a = symbol;
148
-
149
123
  // src/util/download/download.ts
124
+ import { DownloadError } from "@zenning/provider-utils";
150
125
  import {
151
126
  withUserAgentSuffix,
152
127
  getRuntimeEnvironmentUserAgent
153
128
  } from "@zenning/provider-utils";
154
129
 
155
130
  // src/version.ts
156
- var VERSION = true ? "5.3.2" : "0.0.0-test";
131
+ var VERSION = true ? "6.0.13" : "0.0.0-test";
157
132
 
158
133
  // src/util/download/download.ts
159
134
  var download = async ({ url }) => {
160
- var _a5;
135
+ var _a4;
161
136
  const urlText = url.toString();
162
137
  try {
163
138
  const response = await fetch(urlText, {
@@ -176,7 +151,7 @@ var download = async ({ url }) => {
176
151
  }
177
152
  return {
178
153
  data: new Uint8Array(await response.arrayBuffer()),
179
- mediaType: (_a5 = response.headers.get("content-type")) != null ? _a5 : void 0
154
+ mediaType: (_a4 = response.headers.get("content-type")) != null ? _a4 : void 0
180
155
  };
181
156
  } catch (error) {
182
157
  if (DownloadError.isInstance(error)) {
@@ -194,7 +169,7 @@ var createDefaultDownloadFunction = (download2 = download) => (requestedDownload
194
169
  );
195
170
 
196
171
  // src/prompt/data-content.ts
197
- import { AISDKError as AISDKError2 } from "@zenning/provider";
172
+ import { AISDKError } from "@zenning/provider";
198
173
  import {
199
174
  convertBase64ToUint8Array as convertBase64ToUint8Array2,
200
175
  convertUint8ArrayToBase64
@@ -225,8 +200,8 @@ var dataContentSchema = z.union([
225
200
  z.custom(
226
201
  // Buffer might not be available in some environments such as CloudFlare:
227
202
  (value) => {
228
- var _a5, _b;
229
- return (_b = (_a5 = globalThis.Buffer) == null ? void 0 : _a5.isBuffer(value)) != null ? _b : false;
203
+ var _a4, _b;
204
+ return (_b = (_a4 = globalThis.Buffer) == null ? void 0 : _a4.isBuffer(value)) != null ? _b : false;
230
205
  },
231
206
  { message: "Must be a Buffer" }
232
207
  )
@@ -249,7 +224,7 @@ function convertToLanguageModelV3DataContent(content) {
249
224
  content.toString()
250
225
  );
251
226
  if (dataUrlMediaType == null || base64Content == null) {
252
- throw new AISDKError2({
227
+ throw new AISDKError({
253
228
  name: "InvalidDataContentError",
254
229
  message: `Invalid data URL format in content ${content.toString()}`
255
230
  });
@@ -260,25 +235,30 @@ function convertToLanguageModelV3DataContent(content) {
260
235
  }
261
236
 
262
237
  // src/prompt/invalid-message-role-error.ts
263
- import { AISDKError as AISDKError3 } from "@zenning/provider";
264
- var name2 = "AI_InvalidMessageRoleError";
265
- var marker2 = `vercel.ai.error.${name2}`;
266
- var symbol2 = Symbol.for(marker2);
267
- var _a2;
268
- var InvalidMessageRoleError = class extends AISDKError3 {
238
+ import { AISDKError as AISDKError2 } from "@zenning/provider";
239
+ var name = "AI_InvalidMessageRoleError";
240
+ var marker = `vercel.ai.error.${name}`;
241
+ var symbol = Symbol.for(marker);
242
+ var _a;
243
+ var InvalidMessageRoleError = class extends AISDKError2 {
269
244
  constructor({
270
245
  role,
271
246
  message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
272
247
  }) {
273
- super({ name: name2, message });
274
- this[_a2] = true;
248
+ super({ name, message });
249
+ this[_a] = true;
275
250
  this.role = role;
276
251
  }
277
252
  static isInstance(error) {
278
- return AISDKError3.hasMarker(error, marker2);
253
+ return AISDKError2.hasMarker(error, marker);
279
254
  }
280
255
  };
281
- _a2 = symbol2;
256
+ _a = symbol;
257
+
258
+ // src/util/as-array.ts
259
+ function asArray(value) {
260
+ return value === void 0 ? [] : Array.isArray(value) ? value : [value];
261
+ }
282
262
 
283
263
  // src/prompt/convert-to-language-model-prompt.ts
284
264
  async function convertToLanguageModelPrompt({
@@ -291,12 +271,30 @@ async function convertToLanguageModelPrompt({
291
271
  download2,
292
272
  supportedUrls
293
273
  );
294
- return [
295
- ...prompt.system != null ? [{ role: "system", content: prompt.system }] : [],
274
+ const messages = [
275
+ ...prompt.system != null ? typeof prompt.system === "string" ? [{ role: "system", content: prompt.system }] : asArray(prompt.system).map((message) => ({
276
+ role: "system",
277
+ content: message.content,
278
+ providerOptions: message.providerOptions
279
+ })) : [],
296
280
  ...prompt.messages.map(
297
281
  (message) => convertToLanguageModelMessage({ message, downloadedAssets })
298
282
  )
299
283
  ];
284
+ const combinedMessages = [];
285
+ for (const message of messages) {
286
+ if (message.role !== "tool") {
287
+ combinedMessages.push(message);
288
+ continue;
289
+ }
290
+ const lastCombinedMessage = combinedMessages.at(-1);
291
+ if ((lastCombinedMessage == null ? void 0 : lastCombinedMessage.role) === "tool") {
292
+ lastCombinedMessage.content.push(...message.content);
293
+ } else {
294
+ combinedMessages.push(message);
295
+ }
296
+ }
297
+ return combinedMessages;
300
298
  }
301
299
  function convertToLanguageModelMessage({
302
300
  message,
@@ -338,6 +336,8 @@ function convertToLanguageModelMessage({
338
336
  content: message.content.filter(
339
337
  // remove empty text parts (no text, and no provider options):
340
338
  (part) => part.type !== "text" || part.text !== "" || part.providerOptions != null
339
+ ).filter(
340
+ (part) => part.type !== "tool-approval-request"
341
341
  ).map((part) => {
342
342
  const providerOptions = part.providerOptions;
343
343
  switch (part.type) {
@@ -382,7 +382,7 @@ function convertToLanguageModelMessage({
382
382
  type: "tool-result",
383
383
  toolCallId: part.toolCallId,
384
384
  toolName: part.toolName,
385
- output: part.output,
385
+ output: mapToolResultOutput(part.output),
386
386
  providerOptions
387
387
  };
388
388
  }
@@ -394,13 +394,30 @@ function convertToLanguageModelMessage({
394
394
  case "tool": {
395
395
  return {
396
396
  role: "tool",
397
- content: message.content.map((part) => ({
398
- type: "tool-result",
399
- toolCallId: part.toolCallId,
400
- toolName: part.toolName,
401
- output: part.output,
402
- providerOptions: part.providerOptions
403
- })),
397
+ content: message.content.filter(
398
+ // Only include tool-approval-response for provider-executed tools
399
+ (part) => part.type !== "tool-approval-response" || part.providerExecuted
400
+ ).map((part) => {
401
+ switch (part.type) {
402
+ case "tool-result": {
403
+ return {
404
+ type: "tool-result",
405
+ toolCallId: part.toolCallId,
406
+ toolName: part.toolName,
407
+ output: mapToolResultOutput(part.output),
408
+ providerOptions: part.providerOptions
409
+ };
410
+ }
411
+ case "tool-approval-response": {
412
+ return {
413
+ type: "tool-approval-response",
414
+ approvalId: part.approvalId,
415
+ approved: part.approved,
416
+ reason: part.reason
417
+ };
418
+ }
419
+ }
420
+ }),
404
421
  providerOptions: message.providerOptions
405
422
  };
406
423
  }
@@ -416,8 +433,8 @@ async function downloadAssets(messages, download2, supportedUrls) {
416
433
  ).flat().filter(
417
434
  (part) => part.type === "image" || part.type === "file"
418
435
  ).map((part) => {
419
- var _a5;
420
- const mediaType = (_a5 = part.mediaType) != null ? _a5 : part.type === "image" ? "image/*" : void 0;
436
+ var _a4;
437
+ const mediaType = (_a4 = part.mediaType) != null ? _a4 : part.type === "image" ? "image/*" : void 0;
421
438
  let data = part.type === "image" ? part.image : part.data;
422
439
  if (typeof data === "string") {
423
440
  try {
@@ -447,7 +464,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
447
464
  );
448
465
  }
449
466
  function convertPartToLanguageModelPart(part, downloadedAssets) {
450
- var _a5;
467
+ var _a4;
451
468
  if (part.type === "text") {
452
469
  return {
453
470
  type: "text",
@@ -480,7 +497,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
480
497
  switch (type) {
481
498
  case "image": {
482
499
  if (data instanceof Uint8Array || typeof data === "string") {
483
- mediaType = (_a5 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a5 : mediaType;
500
+ mediaType = (_a4 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a4 : mediaType;
484
501
  }
485
502
  return {
486
503
  type: "file",
@@ -505,6 +522,31 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
505
522
  }
506
523
  }
507
524
  }
525
+ function mapToolResultOutput(output) {
526
+ if (output.type !== "content") {
527
+ return output;
528
+ }
529
+ return {
530
+ type: "content",
531
+ value: output.value.map((item) => {
532
+ if (item.type !== "media") {
533
+ return item;
534
+ }
535
+ if (item.mediaType.startsWith("image/")) {
536
+ return {
537
+ type: "image-data",
538
+ data: item.data,
539
+ mediaType: item.mediaType
540
+ };
541
+ }
542
+ return {
543
+ type: "file-data",
544
+ data: item.data,
545
+ mediaType: item.mediaType
546
+ };
547
+ })
548
+ };
549
+ }
508
550
 
509
551
  // src/prompt/prepare-tools-and-tool-choice.ts
510
552
  import { asSchema } from "@zenning/provider-utils";
@@ -515,7 +557,7 @@ function isNonEmptyObject(object) {
515
557
  }
516
558
 
517
559
  // src/prompt/prepare-tools-and-tool-choice.ts
518
- function prepareToolsAndToolChoice({
560
+ async function prepareToolsAndToolChoice({
519
561
  tools,
520
562
  toolChoice,
521
563
  activeTools
@@ -527,42 +569,50 @@ function prepareToolsAndToolChoice({
527
569
  };
528
570
  }
529
571
  const filteredTools = activeTools != null ? Object.entries(tools).filter(
530
- ([name5]) => activeTools.includes(name5)
572
+ ([name4]) => activeTools.includes(name4)
531
573
  ) : Object.entries(tools);
532
- return {
533
- tools: filteredTools.map(([name5, tool]) => {
534
- const toolType = tool.type;
535
- switch (toolType) {
536
- case void 0:
537
- case "dynamic":
538
- case "function":
539
- return {
540
- type: "function",
541
- name: name5,
542
- description: tool.description,
543
- inputSchema: asSchema(tool.inputSchema).jsonSchema,
544
- providerOptions: tool.providerOptions
545
- };
546
- case "provider-defined":
547
- return {
548
- type: "provider-defined",
549
- name: name5,
550
- id: tool.id,
551
- args: tool.args
552
- };
553
- default: {
554
- const exhaustiveCheck = toolType;
555
- throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
556
- }
574
+ const languageModelTools = [];
575
+ for (const [name4, tool] of filteredTools) {
576
+ const toolType = tool.type;
577
+ switch (toolType) {
578
+ case void 0:
579
+ case "dynamic":
580
+ case "function":
581
+ languageModelTools.push({
582
+ type: "function",
583
+ name: name4,
584
+ description: tool.description,
585
+ inputSchema: await asSchema(tool.inputSchema).jsonSchema,
586
+ ...tool.inputExamples != null ? { inputExamples: tool.inputExamples } : {},
587
+ providerOptions: tool.providerOptions,
588
+ ...tool.strict != null ? { strict: tool.strict } : {}
589
+ });
590
+ break;
591
+ case "provider":
592
+ languageModelTools.push({
593
+ type: "provider",
594
+ name: name4,
595
+ id: tool.id,
596
+ args: tool.args
597
+ });
598
+ break;
599
+ default: {
600
+ const exhaustiveCheck = toolType;
601
+ throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
557
602
  }
558
- }),
603
+ }
604
+ }
605
+ return {
606
+ tools: languageModelTools,
559
607
  toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
560
608
  };
561
609
  }
562
610
 
563
611
  // src/prompt/standardize-prompt.ts
564
612
  import { InvalidPromptError } from "@zenning/provider";
565
- import { safeValidateTypes } from "@zenning/provider-utils";
613
+ import {
614
+ safeValidateTypes
615
+ } from "@zenning/provider-utils";
566
616
  import { z as z6 } from "zod/v4";
567
617
 
568
618
  // src/prompt/message.ts
@@ -579,7 +629,7 @@ var jsonValueSchema = z2.lazy(
579
629
  z2.string(),
580
630
  z2.number(),
581
631
  z2.boolean(),
582
- z2.record(z2.string(), jsonValueSchema),
632
+ z2.record(z2.string(), jsonValueSchema.optional()),
583
633
  z2.array(jsonValueSchema)
584
634
  ])
585
635
  );
@@ -587,7 +637,7 @@ var jsonValueSchema = z2.lazy(
587
637
  // src/types/provider-metadata.ts
588
638
  var providerMetadataSchema = z3.record(
589
639
  z3.string(),
590
- z3.record(z3.string(), jsonValueSchema)
640
+ z3.record(z3.string(), jsonValueSchema.optional())
591
641
  );
592
642
 
593
643
  // src/prompt/content-part.ts
@@ -615,6 +665,11 @@ var reasoningPartSchema = z4.object({
615
665
  text: z4.string(),
616
666
  providerOptions: providerMetadataSchema.optional()
617
667
  });
668
+ var compactionPartSchema = z4.object({
669
+ type: z4.literal("compaction"),
670
+ encrypted_content: z4.string(),
671
+ providerOptions: providerMetadataSchema.optional()
672
+ });
618
673
  var toolCallPartSchema = z4.object({
619
674
  type: z4.literal("tool-call"),
620
675
  toolCallId: z4.string(),
@@ -623,40 +678,90 @@ var toolCallPartSchema = z4.object({
623
678
  providerOptions: providerMetadataSchema.optional(),
624
679
  providerExecuted: z4.boolean().optional()
625
680
  });
626
- var outputSchema = z4.discriminatedUnion("type", [
627
- z4.object({
628
- type: z4.literal("text"),
629
- value: z4.string()
630
- }),
631
- z4.object({
632
- type: z4.literal("json"),
633
- value: jsonValueSchema
634
- }),
635
- z4.object({
636
- type: z4.literal("error-text"),
637
- value: z4.string()
638
- }),
639
- z4.object({
640
- type: z4.literal("error-json"),
641
- value: jsonValueSchema
642
- }),
643
- z4.object({
644
- type: z4.literal("content"),
645
- value: z4.array(
646
- z4.union([
647
- z4.object({
648
- type: z4.literal("text"),
649
- text: z4.string()
650
- }),
651
- z4.object({
652
- type: z4.literal("media"),
653
- data: z4.string(),
654
- mediaType: z4.string()
655
- })
656
- ])
657
- )
658
- })
659
- ]);
681
+ var outputSchema = z4.discriminatedUnion(
682
+ "type",
683
+ [
684
+ z4.object({
685
+ type: z4.literal("text"),
686
+ value: z4.string(),
687
+ providerOptions: providerMetadataSchema.optional()
688
+ }),
689
+ z4.object({
690
+ type: z4.literal("json"),
691
+ value: jsonValueSchema,
692
+ providerOptions: providerMetadataSchema.optional()
693
+ }),
694
+ z4.object({
695
+ type: z4.literal("execution-denied"),
696
+ reason: z4.string().optional(),
697
+ providerOptions: providerMetadataSchema.optional()
698
+ }),
699
+ z4.object({
700
+ type: z4.literal("error-text"),
701
+ value: z4.string(),
702
+ providerOptions: providerMetadataSchema.optional()
703
+ }),
704
+ z4.object({
705
+ type: z4.literal("error-json"),
706
+ value: jsonValueSchema,
707
+ providerOptions: providerMetadataSchema.optional()
708
+ }),
709
+ z4.object({
710
+ type: z4.literal("content"),
711
+ value: z4.array(
712
+ z4.union([
713
+ z4.object({
714
+ type: z4.literal("text"),
715
+ text: z4.string(),
716
+ providerOptions: providerMetadataSchema.optional()
717
+ }),
718
+ z4.object({
719
+ type: z4.literal("media"),
720
+ data: z4.string(),
721
+ mediaType: z4.string()
722
+ }),
723
+ z4.object({
724
+ type: z4.literal("file-data"),
725
+ data: z4.string(),
726
+ mediaType: z4.string(),
727
+ filename: z4.string().optional(),
728
+ providerOptions: providerMetadataSchema.optional()
729
+ }),
730
+ z4.object({
731
+ type: z4.literal("file-url"),
732
+ url: z4.string(),
733
+ providerOptions: providerMetadataSchema.optional()
734
+ }),
735
+ z4.object({
736
+ type: z4.literal("file-id"),
737
+ fileId: z4.union([z4.string(), z4.record(z4.string(), z4.string())]),
738
+ providerOptions: providerMetadataSchema.optional()
739
+ }),
740
+ z4.object({
741
+ type: z4.literal("image-data"),
742
+ data: z4.string(),
743
+ mediaType: z4.string(),
744
+ providerOptions: providerMetadataSchema.optional()
745
+ }),
746
+ z4.object({
747
+ type: z4.literal("image-url"),
748
+ url: z4.string(),
749
+ providerOptions: providerMetadataSchema.optional()
750
+ }),
751
+ z4.object({
752
+ type: z4.literal("image-file-id"),
753
+ fileId: z4.union([z4.string(), z4.record(z4.string(), z4.string())]),
754
+ providerOptions: providerMetadataSchema.optional()
755
+ }),
756
+ z4.object({
757
+ type: z4.literal("custom"),
758
+ providerOptions: providerMetadataSchema.optional()
759
+ })
760
+ ])
761
+ )
762
+ })
763
+ ]
764
+ );
660
765
  var toolResultPartSchema = z4.object({
661
766
  type: z4.literal("tool-result"),
662
767
  toolCallId: z4.string(),
@@ -664,6 +769,17 @@ var toolResultPartSchema = z4.object({
664
769
  output: outputSchema,
665
770
  providerOptions: providerMetadataSchema.optional()
666
771
  });
772
+ var toolApprovalRequestSchema = z4.object({
773
+ type: z4.literal("tool-approval-request"),
774
+ approvalId: z4.string(),
775
+ toolCallId: z4.string()
776
+ });
777
+ var toolApprovalResponseSchema = z4.object({
778
+ type: z4.literal("tool-approval-response"),
779
+ approvalId: z4.string(),
780
+ approved: z4.boolean(),
781
+ reason: z4.string().optional()
782
+ });
667
783
 
668
784
  // src/prompt/message.ts
669
785
  var systemModelMessageSchema = z5.object(
@@ -691,7 +807,9 @@ var assistantModelMessageSchema = z5.object({
691
807
  filePartSchema,
692
808
  reasoningPartSchema,
693
809
  toolCallPartSchema,
694
- toolResultPartSchema
810
+ toolResultPartSchema,
811
+ toolApprovalRequestSchema,
812
+ compactionPartSchema
695
813
  ])
696
814
  )
697
815
  ]),
@@ -699,7 +817,7 @@ var assistantModelMessageSchema = z5.object({
699
817
  });
700
818
  var toolModelMessageSchema = z5.object({
701
819
  role: z5.literal("tool"),
702
- content: z5.array(toolResultPartSchema),
820
+ content: z5.array(z5.union([toolResultPartSchema, toolApprovalResponseSchema])),
703
821
  providerOptions: providerMetadataSchema.optional()
704
822
  });
705
823
  var modelMessageSchema = z5.union([
@@ -723,10 +841,12 @@ async function standardizePrompt(prompt) {
723
841
  message: "prompt and messages cannot be defined at the same time"
724
842
  });
725
843
  }
726
- if (prompt.system != null && typeof prompt.system !== "string") {
844
+ if (prompt.system != null && typeof prompt.system !== "string" && !asArray(prompt.system).every(
845
+ (message) => typeof message === "object" && message !== null && "role" in message && message.role === "system"
846
+ )) {
727
847
  throw new InvalidPromptError({
728
848
  prompt,
729
- message: "system must be a string"
849
+ message: "system must be a string, SystemModelMessage, or array of SystemModelMessage"
730
850
  });
731
851
  }
732
852
  let messages;
@@ -755,7 +875,7 @@ async function standardizePrompt(prompt) {
755
875
  if (!validationResult.success) {
756
876
  throw new InvalidPromptError({
757
877
  prompt,
758
- message: "The messages must be a ModelMessage[]. If you have passed a UIMessage[], you can use convertToModelMessages to convert them.",
878
+ message: "The messages do not match the ModelMessage[] schema.",
759
879
  cause: validationResult.error
760
880
  });
761
881
  }
@@ -766,30 +886,30 @@ async function standardizePrompt(prompt) {
766
886
  }
767
887
 
768
888
  // src/error/invalid-argument-error.ts
769
- import { AISDKError as AISDKError4 } from "@zenning/provider";
770
- var name3 = "AI_InvalidArgumentError";
771
- var marker3 = `vercel.ai.error.${name3}`;
772
- var symbol3 = Symbol.for(marker3);
773
- var _a3;
774
- var InvalidArgumentError = class extends AISDKError4 {
889
+ import { AISDKError as AISDKError3 } from "@zenning/provider";
890
+ var name2 = "AI_InvalidArgumentError";
891
+ var marker2 = `vercel.ai.error.${name2}`;
892
+ var symbol2 = Symbol.for(marker2);
893
+ var _a2;
894
+ var InvalidArgumentError = class extends AISDKError3 {
775
895
  constructor({
776
896
  parameter,
777
897
  value,
778
898
  message
779
899
  }) {
780
900
  super({
781
- name: name3,
901
+ name: name2,
782
902
  message: `Invalid argument for parameter ${parameter}: ${message}`
783
903
  });
784
- this[_a3] = true;
904
+ this[_a2] = true;
785
905
  this.parameter = parameter;
786
906
  this.value = value;
787
907
  }
788
908
  static isInstance(error) {
789
- return AISDKError4.hasMarker(error, marker3);
909
+ return AISDKError3.hasMarker(error, marker2);
790
910
  }
791
911
  };
792
- _a3 = symbol3;
912
+ _a2 = symbol2;
793
913
 
794
914
  // src/prompt/prepare-call-settings.ts
795
915
  function prepareCallSettings({
@@ -889,28 +1009,28 @@ import { APICallError } from "@zenning/provider";
889
1009
  import { delay, getErrorMessage, isAbortError } from "@zenning/provider-utils";
890
1010
 
891
1011
  // src/util/retry-error.ts
892
- import { AISDKError as AISDKError5 } from "@zenning/provider";
893
- var name4 = "AI_RetryError";
894
- var marker4 = `vercel.ai.error.${name4}`;
895
- var symbol4 = Symbol.for(marker4);
896
- var _a4;
897
- var RetryError = class extends AISDKError5 {
1012
+ import { AISDKError as AISDKError4 } from "@zenning/provider";
1013
+ var name3 = "AI_RetryError";
1014
+ var marker3 = `vercel.ai.error.${name3}`;
1015
+ var symbol3 = Symbol.for(marker3);
1016
+ var _a3;
1017
+ var RetryError = class extends AISDKError4 {
898
1018
  constructor({
899
1019
  message,
900
1020
  reason,
901
1021
  errors
902
1022
  }) {
903
- super({ name: name4, message });
904
- this[_a4] = true;
1023
+ super({ name: name3, message });
1024
+ this[_a3] = true;
905
1025
  this.reason = reason;
906
1026
  this.errors = errors;
907
1027
  this.lastError = errors[errors.length - 1];
908
1028
  }
909
1029
  static isInstance(error) {
910
- return AISDKError5.hasMarker(error, marker4);
1030
+ return AISDKError4.hasMarker(error, marker3);
911
1031
  }
912
1032
  };
913
- _a4 = symbol4;
1033
+ _a3 = symbol3;
914
1034
 
915
1035
  // src/util/retry-with-exponential-backoff.ts
916
1036
  function getRetryDelayInMs({
@@ -1038,7 +1158,35 @@ function prepareRetries({
1038
1158
  })
1039
1159
  };
1040
1160
  }
1161
+
1162
+ // src/types/usage.ts
1163
+ function asLanguageModelUsage(usage) {
1164
+ return {
1165
+ inputTokens: usage.inputTokens.total,
1166
+ inputTokenDetails: {
1167
+ noCacheTokens: usage.inputTokens.noCache,
1168
+ cacheReadTokens: usage.inputTokens.cacheRead,
1169
+ cacheWriteTokens: usage.inputTokens.cacheWrite
1170
+ },
1171
+ outputTokens: usage.outputTokens.total,
1172
+ outputTokenDetails: {
1173
+ textTokens: usage.outputTokens.text,
1174
+ reasoningTokens: usage.outputTokens.reasoning
1175
+ },
1176
+ totalTokens: addTokenCounts(
1177
+ usage.inputTokens.total,
1178
+ usage.outputTokens.total
1179
+ ),
1180
+ raw: usage.raw,
1181
+ reasoningTokens: usage.outputTokens.reasoning,
1182
+ cachedInputTokens: usage.inputTokens.cacheRead
1183
+ };
1184
+ }
1185
+ function addTokenCounts(tokenCount1, tokenCount2) {
1186
+ return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
1187
+ }
1041
1188
  export {
1189
+ asLanguageModelUsage,
1042
1190
  convertAsyncIteratorToReadableStream,
1043
1191
  convertToLanguageModelPrompt,
1044
1192
  prepareCallSettings,