@ai-sdk/provider 3.0.2 → 3.0.3

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.
Files changed (132) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/index.d.mts +1 -1
  3. package/dist/index.d.ts +1 -1
  4. package/package.json +3 -1
  5. package/src/embedding-model/index.ts +2 -0
  6. package/src/embedding-model/v2/embedding-model-v2-embedding.ts +5 -0
  7. package/src/embedding-model/v2/embedding-model-v2.ts +113 -0
  8. package/src/embedding-model/v2/index.ts +2 -0
  9. package/src/embedding-model/v3/embedding-model-v3-call-options.ts +26 -0
  10. package/src/embedding-model/v3/embedding-model-v3-embedding.ts +5 -0
  11. package/src/embedding-model/v3/embedding-model-v3-result.ts +48 -0
  12. package/src/embedding-model/v3/embedding-model-v3.ts +54 -0
  13. package/src/embedding-model/v3/index.ts +4 -0
  14. package/src/embedding-model-middleware/index.ts +1 -0
  15. package/src/embedding-model-middleware/v3/embedding-model-v3-middleware.ts +69 -0
  16. package/src/embedding-model-middleware/v3/index.ts +1 -0
  17. package/src/errors/ai-sdk-error.ts +62 -0
  18. package/src/errors/api-call-error.ts +59 -0
  19. package/src/errors/empty-response-body-error.ts +17 -0
  20. package/src/errors/get-error-message.ts +15 -0
  21. package/src/errors/index.ts +15 -0
  22. package/src/errors/invalid-argument-error.ts +32 -0
  23. package/src/errors/invalid-prompt-error.ts +33 -0
  24. package/src/errors/invalid-response-data-error.ts +31 -0
  25. package/src/errors/json-parse-error.ts +29 -0
  26. package/src/errors/load-api-key-error.ts +17 -0
  27. package/src/errors/load-setting-error.ts +17 -0
  28. package/src/errors/no-content-generated-error.ts +22 -0
  29. package/src/errors/no-such-model-error.ts +45 -0
  30. package/src/errors/too-many-embedding-values-for-call-error.ts +40 -0
  31. package/src/errors/type-validation-error.ts +51 -0
  32. package/src/errors/unsupported-functionality-error.ts +26 -0
  33. package/src/image-model/index.ts +2 -0
  34. package/src/image-model/v2/image-model-v2-call-options.ts +60 -0
  35. package/src/image-model/v2/image-model-v2-call-warning.ts +16 -0
  36. package/src/image-model/v2/image-model-v2.ts +104 -0
  37. package/src/image-model/v2/index.ts +6 -0
  38. package/src/image-model/v3/image-model-v3-call-options.ts +74 -0
  39. package/src/image-model/v3/image-model-v3-file.ts +44 -0
  40. package/src/image-model/v3/image-model-v3-usage.ts +19 -0
  41. package/src/image-model/v3/image-model-v3.ts +110 -0
  42. package/src/image-model/v3/index.ts +7 -0
  43. package/src/image-model-middleware/index.ts +1 -0
  44. package/src/image-model-middleware/v3/image-model-v3-middleware.ts +61 -0
  45. package/src/image-model-middleware/v3/index.ts +1 -0
  46. package/src/index.ts +15 -0
  47. package/src/json-value/index.ts +2 -0
  48. package/src/json-value/is-json.ts +40 -0
  49. package/src/json-value/json-value.ts +17 -0
  50. package/src/language-model/index.ts +2 -0
  51. package/src/language-model/v2/index.ts +18 -0
  52. package/src/language-model/v2/language-model-v2-call-options.ts +125 -0
  53. package/src/language-model/v2/language-model-v2-call-warning.ts +23 -0
  54. package/src/language-model/v2/language-model-v2-content.ts +14 -0
  55. package/src/language-model/v2/language-model-v2-data-content.ts +4 -0
  56. package/src/language-model/v2/language-model-v2-file.ts +25 -0
  57. package/src/language-model/v2/language-model-v2-finish-reason.ts +20 -0
  58. package/src/language-model/v2/language-model-v2-function-tool.ts +37 -0
  59. package/src/language-model/v2/language-model-v2-prompt.ts +218 -0
  60. package/src/language-model/v2/language-model-v2-provider-defined-tool.ts +24 -0
  61. package/src/language-model/v2/language-model-v2-reasoning.ts +14 -0
  62. package/src/language-model/v2/language-model-v2-response-metadata.ts +16 -0
  63. package/src/language-model/v2/language-model-v2-source.ts +67 -0
  64. package/src/language-model/v2/language-model-v2-stream-part.ts +102 -0
  65. package/src/language-model/v2/language-model-v2-text.ts +15 -0
  66. package/src/language-model/v2/language-model-v2-tool-call.ts +35 -0
  67. package/src/language-model/v2/language-model-v2-tool-choice.ts +5 -0
  68. package/src/language-model/v2/language-model-v2-tool-result.ts +40 -0
  69. package/src/language-model/v2/language-model-v2-usage.ts +34 -0
  70. package/src/language-model/v2/language-model-v2.ts +137 -0
  71. package/src/language-model/v3/index.ts +21 -0
  72. package/src/language-model/v3/language-model-v3-call-options.ts +125 -0
  73. package/src/language-model/v3/language-model-v3-content.ts +16 -0
  74. package/src/language-model/v3/language-model-v3-data-content.ts +4 -0
  75. package/src/language-model/v3/language-model-v3-file.ts +32 -0
  76. package/src/language-model/v3/language-model-v3-finish-reason.ts +33 -0
  77. package/src/language-model/v3/language-model-v3-function-tool.ts +53 -0
  78. package/src/language-model/v3/language-model-v3-generate-result.ts +63 -0
  79. package/src/language-model/v3/language-model-v3-prompt.ts +422 -0
  80. package/src/language-model/v3/language-model-v3-provider-tool.ts +28 -0
  81. package/src/language-model/v3/language-model-v3-reasoning.ts +14 -0
  82. package/src/language-model/v3/language-model-v3-response-metadata.ts +16 -0
  83. package/src/language-model/v3/language-model-v3-source.ts +67 -0
  84. package/src/language-model/v3/language-model-v3-stream-part.ts +106 -0
  85. package/src/language-model/v3/language-model-v3-stream-result.ts +32 -0
  86. package/src/language-model/v3/language-model-v3-text.ts +15 -0
  87. package/src/language-model/v3/language-model-v3-tool-approval-request.ts +27 -0
  88. package/src/language-model/v3/language-model-v3-tool-call.ts +41 -0
  89. package/src/language-model/v3/language-model-v3-tool-choice.ts +5 -0
  90. package/src/language-model/v3/language-model-v3-tool-result.ts +51 -0
  91. package/src/language-model/v3/language-model-v3-usage.ts +59 -0
  92. package/src/language-model/v3/language-model-v3.ts +61 -0
  93. package/src/language-model-middleware/index.ts +2 -0
  94. package/src/language-model-middleware/v2/index.ts +1 -0
  95. package/src/language-model-middleware/v2/language-model-v2-middleware.ts +82 -0
  96. package/src/language-model-middleware/v3/index.ts +1 -0
  97. package/src/language-model-middleware/v3/language-model-v3-middleware.ts +84 -0
  98. package/src/provider/index.ts +2 -0
  99. package/src/provider/v2/index.ts +1 -0
  100. package/src/provider/v2/provider-v2.ts +64 -0
  101. package/src/provider/v3/index.ts +1 -0
  102. package/src/provider/v3/provider-v3.ts +93 -0
  103. package/src/reranking-model/index.ts +1 -0
  104. package/src/reranking-model/v3/index.ts +2 -0
  105. package/src/reranking-model/v3/reranking-model-v3-call-options.ts +40 -0
  106. package/src/reranking-model/v3/reranking-model-v3.ts +90 -0
  107. package/src/shared/index.ts +2 -0
  108. package/src/shared/v2/index.ts +3 -0
  109. package/src/shared/v2/shared-v2-headers.ts +1 -0
  110. package/src/shared/v2/shared-v2-provider-metadata.ts +27 -0
  111. package/src/shared/v2/shared-v2-provider-options.ts +24 -0
  112. package/src/shared/v3/index.ts +4 -0
  113. package/src/shared/v3/shared-v3-headers.ts +1 -0
  114. package/src/shared/v3/shared-v3-provider-metadata.ts +24 -0
  115. package/src/shared/v3/shared-v3-provider-options.ts +24 -0
  116. package/src/shared/v3/shared-v3-warning.ts +50 -0
  117. package/src/speech-model/index.ts +2 -0
  118. package/src/speech-model/v2/index.ts +3 -0
  119. package/src/speech-model/v2/speech-model-v2-call-options.ts +62 -0
  120. package/src/speech-model/v2/speech-model-v2-call-warning.ts +16 -0
  121. package/src/speech-model/v2/speech-model-v2.ts +89 -0
  122. package/src/speech-model/v3/index.ts +2 -0
  123. package/src/speech-model/v3/speech-model-v3-call-options.ts +62 -0
  124. package/src/speech-model/v3/speech-model-v3.ts +89 -0
  125. package/src/transcription-model/index.ts +2 -0
  126. package/src/transcription-model/v2/index.ts +3 -0
  127. package/src/transcription-model/v2/transcription-model-v2-call-options.ts +48 -0
  128. package/src/transcription-model/v2/transcription-model-v2-call-warning.ts +16 -0
  129. package/src/transcription-model/v2/transcription-model-v2.ts +117 -0
  130. package/src/transcription-model/v3/index.ts +2 -0
  131. package/src/transcription-model/v3/transcription-model-v3-call-options.ts +45 -0
  132. package/src/transcription-model/v3/transcription-model-v3.ts +117 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ai-sdk/provider
2
2
 
3
+ ## 3.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 1b11dcb: chore(ai): include sources in npm package
8
+
3
9
  ## 3.0.2
4
10
 
5
11
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -267,7 +267,7 @@ type EmbeddingModelV2Embedding = Array<number>;
267
267
 
268
268
  /**
269
269
  Specification for an embedding model that implements the embedding model
270
- interface version 1.
270
+ interface version 2.
271
271
 
272
272
  VALUE is the type of the values that the model can embed.
273
273
  This will allow us to go beyond text embeddings in the future,
package/dist/index.d.ts CHANGED
@@ -267,7 +267,7 @@ type EmbeddingModelV2Embedding = Array<number>;
267
267
 
268
268
  /**
269
269
  Specification for an embedding model that implements the embedding model
270
- interface version 1.
270
+ interface version 2.
271
271
 
272
272
  VALUE is the type of the values that the model can embed.
273
273
  This will allow us to go beyond text embeddings in the future,
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "@ai-sdk/provider",
3
- "version": "3.0.2",
3
+ "version": "3.0.3",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
8
8
  "types": "./dist/index.d.ts",
9
+ "source": "./src/index.ts",
9
10
  "files": [
10
11
  "dist/**/*",
12
+ "src",
11
13
  "CHANGELOG.md",
12
14
  "README.md"
13
15
  ],
@@ -0,0 +1,2 @@
1
+ export * from './v3/index';
2
+ export * from './v2/index';
@@ -0,0 +1,5 @@
1
+ /**
2
+ An embedding is a vector, i.e. an array of numbers.
3
+ It is e.g. used to represent a text as a vector of word embeddings.
4
+ */
5
+ export type EmbeddingModelV2Embedding = Array<number>;
@@ -0,0 +1,113 @@
1
+ import {
2
+ SharedV2Headers,
3
+ SharedV2ProviderOptions,
4
+ SharedV2ProviderMetadata,
5
+ } from '../../shared';
6
+ import { EmbeddingModelV2Embedding } from './embedding-model-v2-embedding';
7
+
8
+ /**
9
+ Specification for an embedding model that implements the embedding model
10
+ interface version 2.
11
+
12
+ VALUE is the type of the values that the model can embed.
13
+ This will allow us to go beyond text embeddings in the future,
14
+ e.g. to support image embeddings
15
+ */
16
+ export type EmbeddingModelV2<VALUE> = {
17
+ /**
18
+ The embedding model must specify which embedding model interface
19
+ version it implements. This will allow us to evolve the embedding
20
+ model interface and retain backwards compatibility. The different
21
+ implementation versions can be handled as a discriminated union
22
+ on our side.
23
+ */
24
+ readonly specificationVersion: 'v2';
25
+
26
+ /**
27
+ Name of the provider for logging purposes.
28
+ */
29
+ readonly provider: string;
30
+
31
+ /**
32
+ Provider-specific model ID for logging purposes.
33
+ */
34
+ readonly modelId: string;
35
+
36
+ /**
37
+ Limit of how many embeddings can be generated in a single API call.
38
+
39
+ Use Infinity for models that do not have a limit.
40
+ */
41
+ readonly maxEmbeddingsPerCall:
42
+ | PromiseLike<number | undefined>
43
+ | number
44
+ | undefined;
45
+
46
+ /**
47
+ True if the model can handle multiple embedding calls in parallel.
48
+ */
49
+ readonly supportsParallelCalls: PromiseLike<boolean> | boolean;
50
+
51
+ /**
52
+ Generates a list of embeddings for the given input text.
53
+
54
+ Naming: "do" prefix to prevent accidental direct usage of the method
55
+ by the user.
56
+ */
57
+ doEmbed(options: {
58
+ /**
59
+ List of values to embed.
60
+ */
61
+ values: Array<VALUE>;
62
+
63
+ /**
64
+ Abort signal for cancelling the operation.
65
+ */
66
+ abortSignal?: AbortSignal;
67
+
68
+ /**
69
+ Additional provider-specific options. They are passed through
70
+ to the provider from the AI SDK and enable provider-specific
71
+ functionality that can be fully encapsulated in the provider.
72
+ */
73
+ providerOptions?: SharedV2ProviderOptions;
74
+
75
+ /**
76
+ Additional HTTP headers to be sent with the request.
77
+ Only applicable for HTTP-based providers.
78
+ */
79
+ headers?: Record<string, string | undefined>;
80
+ }): PromiseLike<{
81
+ /**
82
+ Generated embeddings. They are in the same order as the input values.
83
+ */
84
+ embeddings: Array<EmbeddingModelV2Embedding>;
85
+
86
+ /**
87
+ Token usage. We only have input tokens for embeddings.
88
+ */
89
+ usage?: { tokens: number };
90
+
91
+ /**
92
+ Additional provider-specific metadata. They are passed through
93
+ from the provider to the AI SDK and enable provider-specific
94
+ results that can be fully encapsulated in the provider.
95
+ */
96
+ providerMetadata?: SharedV2ProviderMetadata;
97
+
98
+ /**
99
+ Optional response information for debugging purposes.
100
+ */
101
+ response?: {
102
+ /**
103
+ Response headers.
104
+ */
105
+ headers?: SharedV2Headers;
106
+
107
+ /**
108
+ The response body.
109
+ */
110
+ body?: unknown;
111
+ };
112
+ }>;
113
+ };
@@ -0,0 +1,2 @@
1
+ export * from './embedding-model-v2';
2
+ export * from './embedding-model-v2-embedding';
@@ -0,0 +1,26 @@
1
+ import { SharedV3Headers, SharedV3ProviderOptions } from '../../shared';
2
+
3
+ export type EmbeddingModelV3CallOptions = {
4
+ /**
5
+ List of text values to generate embeddings for.
6
+ */
7
+ values: Array<string>;
8
+
9
+ /**
10
+ Abort signal for cancelling the operation.
11
+ */
12
+ abortSignal?: AbortSignal;
13
+
14
+ /**
15
+ Additional provider-specific options. They are passed through
16
+ to the provider from the AI SDK and enable provider-specific
17
+ functionality that can be fully encapsulated in the provider.
18
+ */
19
+ providerOptions?: SharedV3ProviderOptions;
20
+
21
+ /**
22
+ Additional HTTP headers to be sent with the request.
23
+ Only applicable for HTTP-based providers.
24
+ */
25
+ headers?: SharedV3Headers;
26
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ An embedding is a vector, i.e. an array of numbers.
3
+ It is e.g. used to represent a text as a vector of word embeddings.
4
+ */
5
+ export type EmbeddingModelV3Embedding = Array<number>;
@@ -0,0 +1,48 @@
1
+ import {
2
+ SharedV3Headers,
3
+ SharedV3ProviderMetadata,
4
+ SharedV3Warning,
5
+ } from '../../shared';
6
+ import { EmbeddingModelV3Embedding } from './embedding-model-v3-embedding';
7
+
8
+ /**
9
+ * The result of a embedding model doEmbed call.
10
+ */
11
+ export type EmbeddingModelV3Result = {
12
+ /**
13
+ * Generated embeddings. They are in the same order as the input values.
14
+ */
15
+ embeddings: Array<EmbeddingModelV3Embedding>;
16
+
17
+ /**
18
+ * Token usage. We only have input tokens for embeddings.
19
+ */
20
+ usage?: { tokens: number };
21
+
22
+ /**
23
+ * Additional provider-specific metadata. They are passed through
24
+ * from the provider to the AI SDK and enable provider-specific
25
+ * results that can be fully encapsulated in the provider.
26
+ */
27
+ providerMetadata?: SharedV3ProviderMetadata;
28
+
29
+ /**
30
+ * Optional response information for debugging purposes.
31
+ */
32
+ response?: {
33
+ /**
34
+ * Response headers.
35
+ */
36
+ headers?: SharedV3Headers;
37
+
38
+ /**
39
+ The response body.
40
+ */
41
+ body?: unknown;
42
+ };
43
+
44
+ /**
45
+ * Warnings for the call, e.g. unsupported settings.
46
+ */
47
+ warnings: Array<SharedV3Warning>;
48
+ };
@@ -0,0 +1,54 @@
1
+ import { EmbeddingModelV3CallOptions } from './embedding-model-v3-call-options';
2
+ import { EmbeddingModelV3Result } from './embedding-model-v3-result';
3
+
4
+ /**
5
+ Specification for an embedding model that implements the embedding model
6
+ interface version 3.
7
+
8
+ It is specific to text embeddings.
9
+ */
10
+ export type EmbeddingModelV3 = {
11
+ /**
12
+ The embedding model must specify which embedding model interface
13
+ version it implements. This will allow us to evolve the embedding
14
+ model interface and retain backwards compatibility. The different
15
+ implementation versions can be handled as a discriminated union
16
+ on our side.
17
+ */
18
+ readonly specificationVersion: 'v3';
19
+
20
+ /**
21
+ Name of the provider for logging purposes.
22
+ */
23
+ readonly provider: string;
24
+
25
+ /**
26
+ Provider-specific model ID for logging purposes.
27
+ */
28
+ readonly modelId: string;
29
+
30
+ /**
31
+ Limit of how many embeddings can be generated in a single API call.
32
+
33
+ Use Infinity for models that do not have a limit.
34
+ */
35
+ readonly maxEmbeddingsPerCall:
36
+ | PromiseLike<number | undefined>
37
+ | number
38
+ | undefined;
39
+
40
+ /**
41
+ True if the model can handle multiple embedding calls in parallel.
42
+ */
43
+ readonly supportsParallelCalls: PromiseLike<boolean> | boolean;
44
+
45
+ /**
46
+ Generates a list of embeddings for the given input text.
47
+
48
+ Naming: "do" prefix to prevent accidental direct usage of the method
49
+ by the user.
50
+ */
51
+ doEmbed(
52
+ options: EmbeddingModelV3CallOptions,
53
+ ): PromiseLike<EmbeddingModelV3Result>;
54
+ };
@@ -0,0 +1,4 @@
1
+ export * from './embedding-model-v3';
2
+ export * from './embedding-model-v3-call-options';
3
+ export * from './embedding-model-v3-embedding';
4
+ export * from './embedding-model-v3-result';
@@ -0,0 +1 @@
1
+ export * from './v3/index';
@@ -0,0 +1,69 @@
1
+ import { EmbeddingModelV3 } from '../../embedding-model/v3/embedding-model-v3';
2
+ import { EmbeddingModelV3CallOptions } from '../../embedding-model/v3/embedding-model-v3-call-options';
3
+
4
+ /**
5
+ * Middleware for EmbeddingModelV3.
6
+ * This type defines the structure for middleware that can be used to modify
7
+ * the behavior of EmbeddingModelV3 operations.
8
+ */
9
+ export type EmbeddingModelV3Middleware = {
10
+ /**
11
+ * Middleware specification version. Use `v3` for the current version.
12
+ */
13
+ readonly specificationVersion: 'v3';
14
+
15
+ /**
16
+ * Override the provider name if desired.
17
+ * @param options.model - The embedding model instance.
18
+ */
19
+ overrideProvider?: (options: { model: EmbeddingModelV3 }) => string;
20
+
21
+ /**
22
+ * Override the model ID if desired.
23
+ * @param options.model - The embedding model instance.
24
+ */
25
+ overrideModelId?: (options: { model: EmbeddingModelV3 }) => string;
26
+
27
+ /**
28
+ * Override the limit of how many embeddings can be generated in a single API call if desired.
29
+ * @param options.model - The embedding model instance.
30
+ */
31
+ overrideMaxEmbeddingsPerCall?: (options: {
32
+ model: EmbeddingModelV3;
33
+ }) => PromiseLike<number | undefined> | number | undefined;
34
+
35
+ /**
36
+ * Override support for handling multiple embedding calls in parallel, if desired..
37
+ * @param options.model - The embedding model instance.
38
+ */
39
+ overrideSupportsParallelCalls?: (options: {
40
+ model: EmbeddingModelV3;
41
+ }) => PromiseLike<boolean> | boolean;
42
+
43
+ /**
44
+ * Transforms the parameters before they are passed to the embed model.
45
+ * @param options - Object containing the type of operation and the parameters.
46
+ * @param options.params - The original parameters for the embedding model call.
47
+ * @returns A promise that resolves to the transformed parameters.
48
+ */
49
+ transformParams?: (options: {
50
+ params: EmbeddingModelV3CallOptions;
51
+ model: EmbeddingModelV3;
52
+ }) => PromiseLike<EmbeddingModelV3CallOptions>;
53
+
54
+ /**
55
+ * Wraps the embed operation of the embedding model.
56
+ *
57
+ * @param options - Object containing the embed function, parameters, and model.
58
+ * @param options.doEmbed - The original embed function.
59
+ * @param options.params - The parameters for the embed call. If the
60
+ * `transformParams` middleware is used, this will be the transformed parameters.
61
+ * @param options.model - The embedding model instance.
62
+ * @returns A promise that resolves to the result of the generate operation.
63
+ */
64
+ wrapEmbed?: (options: {
65
+ doEmbed: () => ReturnType<EmbeddingModelV3['doEmbed']>;
66
+ params: EmbeddingModelV3CallOptions;
67
+ model: EmbeddingModelV3;
68
+ }) => Promise<Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>>;
69
+ };
@@ -0,0 +1 @@
1
+ export * from './embedding-model-v3-middleware';
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Symbol used for identifying AI SDK Error instances.
3
+ * Enables checking if an error is an instance of AISDKError across package versions.
4
+ */
5
+ const marker = 'vercel.ai.error';
6
+ const symbol = Symbol.for(marker);
7
+
8
+ /**
9
+ * Custom error class for AI SDK related errors.
10
+ * @extends Error
11
+ */
12
+ export class AISDKError extends Error {
13
+ private readonly [symbol] = true; // used in isInstance
14
+
15
+ /**
16
+ * The underlying cause of the error, if any.
17
+ */
18
+ readonly cause?: unknown;
19
+
20
+ /**
21
+ * Creates an AI SDK Error.
22
+ *
23
+ * @param {Object} params - The parameters for creating the error.
24
+ * @param {string} params.name - The name of the error.
25
+ * @param {string} params.message - The error message.
26
+ * @param {unknown} [params.cause] - The underlying cause of the error.
27
+ */
28
+ constructor({
29
+ name,
30
+ message,
31
+ cause,
32
+ }: {
33
+ name: string;
34
+ message: string;
35
+ cause?: unknown;
36
+ }) {
37
+ super(message);
38
+
39
+ this.name = name;
40
+ this.cause = cause;
41
+ }
42
+
43
+ /**
44
+ * Checks if the given error is an AI SDK Error.
45
+ * @param {unknown} error - The error to check.
46
+ * @returns {boolean} True if the error is an AI SDK Error, false otherwise.
47
+ */
48
+ static isInstance(error: unknown): error is AISDKError {
49
+ return AISDKError.hasMarker(error, marker);
50
+ }
51
+
52
+ protected static hasMarker(error: unknown, marker: string): boolean {
53
+ const markerSymbol = Symbol.for(marker);
54
+ return (
55
+ error != null &&
56
+ typeof error === 'object' &&
57
+ markerSymbol in error &&
58
+ typeof error[markerSymbol] === 'boolean' &&
59
+ error[markerSymbol] === true
60
+ );
61
+ }
62
+ }
@@ -0,0 +1,59 @@
1
+ import { AISDKError } from './ai-sdk-error';
2
+
3
+ const name = 'AI_APICallError';
4
+ const marker = `vercel.ai.error.${name}`;
5
+ const symbol = Symbol.for(marker);
6
+
7
+ export class APICallError extends AISDKError {
8
+ private readonly [symbol] = true; // used in isInstance
9
+
10
+ readonly url: string;
11
+ readonly requestBodyValues: unknown;
12
+ readonly statusCode?: number;
13
+
14
+ readonly responseHeaders?: Record<string, string>;
15
+ readonly responseBody?: string;
16
+
17
+ readonly isRetryable: boolean;
18
+ readonly data?: unknown;
19
+
20
+ constructor({
21
+ message,
22
+ url,
23
+ requestBodyValues,
24
+ statusCode,
25
+ responseHeaders,
26
+ responseBody,
27
+ cause,
28
+ isRetryable = statusCode != null &&
29
+ (statusCode === 408 || // request timeout
30
+ statusCode === 409 || // conflict
31
+ statusCode === 429 || // too many requests
32
+ statusCode >= 500), // server error
33
+ data,
34
+ }: {
35
+ message: string;
36
+ url: string;
37
+ requestBodyValues: unknown;
38
+ statusCode?: number;
39
+ responseHeaders?: Record<string, string>;
40
+ responseBody?: string;
41
+ cause?: unknown;
42
+ isRetryable?: boolean;
43
+ data?: unknown;
44
+ }) {
45
+ super({ name, message, cause });
46
+
47
+ this.url = url;
48
+ this.requestBodyValues = requestBodyValues;
49
+ this.statusCode = statusCode;
50
+ this.responseHeaders = responseHeaders;
51
+ this.responseBody = responseBody;
52
+ this.isRetryable = isRetryable;
53
+ this.data = data;
54
+ }
55
+
56
+ static isInstance(error: unknown): error is APICallError {
57
+ return AISDKError.hasMarker(error, marker);
58
+ }
59
+ }
@@ -0,0 +1,17 @@
1
+ import { AISDKError } from './ai-sdk-error';
2
+
3
+ const name = 'AI_EmptyResponseBodyError';
4
+ const marker = `vercel.ai.error.${name}`;
5
+ const symbol = Symbol.for(marker);
6
+
7
+ export class EmptyResponseBodyError extends AISDKError {
8
+ private readonly [symbol] = true; // used in isInstance
9
+
10
+ constructor({ message = 'Empty response body' }: { message?: string } = {}) {
11
+ super({ name, message });
12
+ }
13
+
14
+ static isInstance(error: unknown): error is EmptyResponseBodyError {
15
+ return AISDKError.hasMarker(error, marker);
16
+ }
17
+ }
@@ -0,0 +1,15 @@
1
+ export function getErrorMessage(error: unknown | undefined) {
2
+ if (error == null) {
3
+ return 'unknown error';
4
+ }
5
+
6
+ if (typeof error === 'string') {
7
+ return error;
8
+ }
9
+
10
+ if (error instanceof Error) {
11
+ return error.message;
12
+ }
13
+
14
+ return JSON.stringify(error);
15
+ }
@@ -0,0 +1,15 @@
1
+ export { AISDKError } from './ai-sdk-error';
2
+ export { APICallError } from './api-call-error';
3
+ export { EmptyResponseBodyError } from './empty-response-body-error';
4
+ export { getErrorMessage } from './get-error-message';
5
+ export { InvalidArgumentError } from './invalid-argument-error';
6
+ export { InvalidPromptError } from './invalid-prompt-error';
7
+ export { InvalidResponseDataError } from './invalid-response-data-error';
8
+ export { JSONParseError } from './json-parse-error';
9
+ export { LoadAPIKeyError } from './load-api-key-error';
10
+ export { LoadSettingError } from './load-setting-error';
11
+ export { NoContentGeneratedError } from './no-content-generated-error';
12
+ export { NoSuchModelError } from './no-such-model-error';
13
+ export { TooManyEmbeddingValuesForCallError } from './too-many-embedding-values-for-call-error';
14
+ export { TypeValidationError } from './type-validation-error';
15
+ export { UnsupportedFunctionalityError } from './unsupported-functionality-error';
@@ -0,0 +1,32 @@
1
+ import { AISDKError } from './ai-sdk-error';
2
+
3
+ const name = 'AI_InvalidArgumentError';
4
+ const marker = `vercel.ai.error.${name}`;
5
+ const symbol = Symbol.for(marker);
6
+
7
+ /**
8
+ * A function argument is invalid.
9
+ */
10
+ export class InvalidArgumentError extends AISDKError {
11
+ private readonly [symbol] = true; // used in isInstance
12
+
13
+ readonly argument: string;
14
+
15
+ constructor({
16
+ message,
17
+ cause,
18
+ argument,
19
+ }: {
20
+ argument: string;
21
+ message: string;
22
+ cause?: unknown;
23
+ }) {
24
+ super({ name, message, cause });
25
+
26
+ this.argument = argument;
27
+ }
28
+
29
+ static isInstance(error: unknown): error is InvalidArgumentError {
30
+ return AISDKError.hasMarker(error, marker);
31
+ }
32
+ }
@@ -0,0 +1,33 @@
1
+ import { AISDKError } from './ai-sdk-error';
2
+
3
+ const name = 'AI_InvalidPromptError';
4
+ const marker = `vercel.ai.error.${name}`;
5
+ const symbol = Symbol.for(marker);
6
+
7
+ /**
8
+ * A prompt is invalid. This error should be thrown by providers when they cannot
9
+ * process a prompt.
10
+ */
11
+ export class InvalidPromptError extends AISDKError {
12
+ private readonly [symbol] = true; // used in isInstance
13
+
14
+ readonly prompt: unknown;
15
+
16
+ constructor({
17
+ prompt,
18
+ message,
19
+ cause,
20
+ }: {
21
+ prompt: unknown;
22
+ message: string;
23
+ cause?: unknown;
24
+ }) {
25
+ super({ name, message: `Invalid prompt: ${message}`, cause });
26
+
27
+ this.prompt = prompt;
28
+ }
29
+
30
+ static isInstance(error: unknown): error is InvalidPromptError {
31
+ return AISDKError.hasMarker(error, marker);
32
+ }
33
+ }
@@ -0,0 +1,31 @@
1
+ import { AISDKError } from './ai-sdk-error';
2
+
3
+ const name = 'AI_InvalidResponseDataError';
4
+ const marker = `vercel.ai.error.${name}`;
5
+ const symbol = Symbol.for(marker);
6
+
7
+ /**
8
+ * Server returned a response with invalid data content.
9
+ * This should be thrown by providers when they cannot parse the response from the API.
10
+ */
11
+ export class InvalidResponseDataError extends AISDKError {
12
+ private readonly [symbol] = true; // used in isInstance
13
+
14
+ readonly data: unknown;
15
+
16
+ constructor({
17
+ data,
18
+ message = `Invalid response data: ${JSON.stringify(data)}.`,
19
+ }: {
20
+ data: unknown;
21
+ message?: string;
22
+ }) {
23
+ super({ name, message });
24
+
25
+ this.data = data;
26
+ }
27
+
28
+ static isInstance(error: unknown): error is InvalidResponseDataError {
29
+ return AISDKError.hasMarker(error, marker);
30
+ }
31
+ }