ai 5.0.0-canary.9 → 5.0.0

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.
@@ -1,15 +1,17 @@
1
1
  // test/index.ts
2
2
  import {
3
+ convertArrayToAsyncIterable,
3
4
  convertArrayToReadableStream,
5
+ convertReadableStreamToArray,
4
6
  mockId
5
7
  } from "@ai-sdk/provider-utils/test";
6
8
 
7
- // core/test/not-implemented.ts
9
+ // src/test/not-implemented.ts
8
10
  function notImplemented() {
9
11
  throw new Error("Not implemented");
10
12
  }
11
13
 
12
- // core/test/mock-embedding-model-v2.ts
14
+ // src/test/mock-embedding-model-v2.ts
13
15
  var MockEmbeddingModelV2 = class {
14
16
  constructor({
15
17
  provider = "mock-provider",
@@ -27,29 +29,143 @@ var MockEmbeddingModelV2 = class {
27
29
  }
28
30
  };
29
31
 
30
- // core/test/mock-language-model-v1.ts
32
+ // src/test/mock-image-model-v2.ts
33
+ var MockImageModelV2 = class {
34
+ constructor({
35
+ provider = "mock-provider",
36
+ modelId = "mock-model-id",
37
+ maxImagesPerCall = 1,
38
+ doGenerate = notImplemented
39
+ } = {}) {
40
+ this.specificationVersion = "v2";
41
+ this.provider = provider;
42
+ this.modelId = modelId;
43
+ this.maxImagesPerCall = maxImagesPerCall;
44
+ this.doGenerate = doGenerate;
45
+ }
46
+ };
47
+
48
+ // src/test/mock-language-model-v2.ts
31
49
  var MockLanguageModelV2 = class {
32
50
  constructor({
33
51
  provider = "mock-provider",
34
52
  modelId = "mock-model-id",
35
- supportsUrl = void 0,
53
+ supportedUrls = {},
36
54
  doGenerate = notImplemented,
37
- doStream = notImplemented,
38
- defaultObjectGenerationMode = void 0,
39
- supportsStructuredOutputs = void 0
55
+ doStream = notImplemented
56
+ } = {}) {
57
+ this.specificationVersion = "v2";
58
+ this.doGenerateCalls = [];
59
+ this.doStreamCalls = [];
60
+ this.provider = provider;
61
+ this.modelId = modelId;
62
+ this.doGenerate = async (options) => {
63
+ this.doGenerateCalls.push(options);
64
+ if (typeof doGenerate === "function") {
65
+ return doGenerate(options);
66
+ } else if (Array.isArray(doGenerate)) {
67
+ return doGenerate[this.doGenerateCalls.length];
68
+ } else {
69
+ return doGenerate;
70
+ }
71
+ };
72
+ this.doStream = async (options) => {
73
+ this.doStreamCalls.push(options);
74
+ if (typeof doStream === "function") {
75
+ return doStream(options);
76
+ } else if (Array.isArray(doStream)) {
77
+ return doStream[this.doStreamCalls.length];
78
+ } else {
79
+ return doStream;
80
+ }
81
+ };
82
+ this._supportedUrls = typeof supportedUrls === "function" ? supportedUrls : async () => supportedUrls;
83
+ }
84
+ get supportedUrls() {
85
+ return this._supportedUrls();
86
+ }
87
+ };
88
+
89
+ // src/test/mock-provider-v2.ts
90
+ import {
91
+ NoSuchModelError
92
+ } from "@ai-sdk/provider";
93
+ var MockProviderV2 = class {
94
+ constructor({
95
+ languageModels,
96
+ embeddingModels,
97
+ imageModels,
98
+ transcriptionModels,
99
+ speechModels
100
+ } = {}) {
101
+ this.languageModel = (modelId) => {
102
+ if (!(languageModels == null ? void 0 : languageModels[modelId])) {
103
+ throw new NoSuchModelError({ modelId, modelType: "languageModel" });
104
+ }
105
+ return languageModels[modelId];
106
+ };
107
+ this.textEmbeddingModel = (modelId) => {
108
+ if (!(embeddingModels == null ? void 0 : embeddingModels[modelId])) {
109
+ throw new NoSuchModelError({
110
+ modelId,
111
+ modelType: "textEmbeddingModel"
112
+ });
113
+ }
114
+ return embeddingModels[modelId];
115
+ };
116
+ this.imageModel = (modelId) => {
117
+ if (!(imageModels == null ? void 0 : imageModels[modelId])) {
118
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
119
+ }
120
+ return imageModels[modelId];
121
+ };
122
+ this.transcriptionModel = (modelId) => {
123
+ if (!(transcriptionModels == null ? void 0 : transcriptionModels[modelId])) {
124
+ throw new NoSuchModelError({
125
+ modelId,
126
+ modelType: "transcriptionModel"
127
+ });
128
+ }
129
+ return transcriptionModels[modelId];
130
+ };
131
+ this.speechModel = (modelId) => {
132
+ if (!(speechModels == null ? void 0 : speechModels[modelId])) {
133
+ throw new NoSuchModelError({ modelId, modelType: "speechModel" });
134
+ }
135
+ return speechModels[modelId];
136
+ };
137
+ }
138
+ };
139
+
140
+ // src/test/mock-speech-model-v2.ts
141
+ var MockSpeechModelV2 = class {
142
+ constructor({
143
+ provider = "mock-provider",
144
+ modelId = "mock-model-id",
145
+ doGenerate = notImplemented
146
+ } = {}) {
147
+ this.specificationVersion = "v2";
148
+ this.provider = provider;
149
+ this.modelId = modelId;
150
+ this.doGenerate = doGenerate;
151
+ }
152
+ };
153
+
154
+ // src/test/mock-transcription-model-v2.ts
155
+ var MockTranscriptionModelV2 = class {
156
+ constructor({
157
+ provider = "mock-provider",
158
+ modelId = "mock-model-id",
159
+ doGenerate = notImplemented
40
160
  } = {}) {
41
161
  this.specificationVersion = "v2";
42
162
  this.provider = provider;
43
163
  this.modelId = modelId;
44
164
  this.doGenerate = doGenerate;
45
- this.doStream = doStream;
46
- this.supportsUrl = supportsUrl;
47
- this.defaultObjectGenerationMode = defaultObjectGenerationMode;
48
- this.supportsStructuredOutputs = supportsStructuredOutputs;
49
165
  }
50
166
  };
51
167
 
52
- // core/test/mock-values.ts
168
+ // src/test/mock-values.ts
53
169
  function mockValues(...values) {
54
170
  let counter = 0;
55
171
  return () => {
@@ -58,7 +174,7 @@ function mockValues(...values) {
58
174
  };
59
175
  }
60
176
 
61
- // core/util/simulate-readable-stream.ts
177
+ // src/util/simulate-readable-stream.ts
62
178
  import { delay as delayFunction } from "@ai-sdk/provider-utils";
63
179
  function simulateReadableStream({
64
180
  chunks,
@@ -85,8 +201,14 @@ function simulateReadableStream({
85
201
  var simulateReadableStream2 = simulateReadableStream;
86
202
  export {
87
203
  MockEmbeddingModelV2,
204
+ MockImageModelV2,
88
205
  MockLanguageModelV2,
206
+ MockProviderV2,
207
+ MockSpeechModelV2,
208
+ MockTranscriptionModelV2,
209
+ convertArrayToAsyncIterable,
89
210
  convertArrayToReadableStream,
211
+ convertReadableStreamToArray,
90
212
  mockId,
91
213
  mockValues,
92
214
  simulateReadableStream2 as simulateReadableStream
@@ -1 +1 @@
1
- {"version":3,"sources":["../../test/index.ts","../../core/test/not-implemented.ts","../../core/test/mock-embedding-model-v2.ts","../../core/test/mock-language-model-v1.ts","../../core/test/mock-values.ts","../../core/util/simulate-readable-stream.ts"],"sourcesContent":["export {\n convertArrayToReadableStream,\n mockId,\n} from '@ai-sdk/provider-utils/test';\nexport { MockEmbeddingModelV2 } from '../core/test/mock-embedding-model-v2';\nexport { MockLanguageModelV2 } from '../core/test/mock-language-model-v1';\nexport { mockValues } from '../core/test/mock-values';\n\nimport { simulateReadableStream as originalSimulateReadableStream } from '../core/util/simulate-readable-stream';\n\n/**\n * @deprecated Use `simulateReadableStream` from `ai` instead.\n */\nexport const simulateReadableStream = originalSimulateReadableStream;\n","export function notImplemented(): never {\n throw new Error('Not implemented');\n}\n","import { EmbeddingModelV2 } from '@ai-sdk/provider';\nimport { Embedding } from '../types';\nimport { EmbeddingModelUsage } from '../types/usage';\nimport { notImplemented } from './not-implemented';\n\nexport class MockEmbeddingModelV2<VALUE> implements EmbeddingModelV2<VALUE> {\n readonly specificationVersion = 'v2';\n\n readonly provider: EmbeddingModelV2<VALUE>['provider'];\n readonly modelId: EmbeddingModelV2<VALUE>['modelId'];\n readonly maxEmbeddingsPerCall: EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall'];\n readonly supportsParallelCalls: EmbeddingModelV2<VALUE>['supportsParallelCalls'];\n\n doEmbed: EmbeddingModelV2<VALUE>['doEmbed'];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n maxEmbeddingsPerCall = 1,\n supportsParallelCalls = false,\n doEmbed = notImplemented,\n }: {\n provider?: EmbeddingModelV2<VALUE>['provider'];\n modelId?: EmbeddingModelV2<VALUE>['modelId'];\n maxEmbeddingsPerCall?:\n | EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall']\n | null;\n supportsParallelCalls?: EmbeddingModelV2<VALUE>['supportsParallelCalls'];\n doEmbed?: EmbeddingModelV2<VALUE>['doEmbed'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;\n this.supportsParallelCalls = supportsParallelCalls;\n this.doEmbed = doEmbed;\n }\n}\n\nexport function mockEmbed<VALUE>(\n expectedValues: Array<VALUE>,\n embeddings: Array<Embedding>,\n usage?: EmbeddingModelUsage,\n response: Awaited<\n ReturnType<EmbeddingModelV2<VALUE>['doEmbed']>\n >['response'] = { headers: {}, body: {} },\n): EmbeddingModelV2<VALUE>['doEmbed'] {\n return async ({ values }) => {\n assert.deepStrictEqual(expectedValues, values);\n return { embeddings, usage, response };\n };\n}\n","import { LanguageModelV2 } from '@ai-sdk/provider';\nimport { notImplemented } from './not-implemented';\n\nexport class MockLanguageModelV2 implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n\n readonly provider: LanguageModelV2['provider'];\n readonly modelId: LanguageModelV2['modelId'];\n\n supportsUrl: LanguageModelV2['supportsUrl'];\n doGenerate: LanguageModelV2['doGenerate'];\n doStream: LanguageModelV2['doStream'];\n\n readonly defaultObjectGenerationMode: LanguageModelV2['defaultObjectGenerationMode'];\n readonly supportsStructuredOutputs: LanguageModelV2['supportsStructuredOutputs'];\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n supportsUrl = undefined,\n doGenerate = notImplemented,\n doStream = notImplemented,\n defaultObjectGenerationMode = undefined,\n supportsStructuredOutputs = undefined,\n }: {\n provider?: LanguageModelV2['provider'];\n modelId?: LanguageModelV2['modelId'];\n supportsUrl?: LanguageModelV2['supportsUrl'];\n doGenerate?: LanguageModelV2['doGenerate'];\n doStream?: LanguageModelV2['doStream'];\n defaultObjectGenerationMode?: LanguageModelV2['defaultObjectGenerationMode'];\n supportsStructuredOutputs?: LanguageModelV2['supportsStructuredOutputs'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.doGenerate = doGenerate;\n this.doStream = doStream;\n this.supportsUrl = supportsUrl;\n\n this.defaultObjectGenerationMode = defaultObjectGenerationMode;\n this.supportsStructuredOutputs = supportsStructuredOutputs;\n }\n}\n","export function mockValues<T>(...values: T[]): () => T {\n let counter = 0;\n return () => values[counter++] ?? values[values.length - 1];\n}\n","import { delay as delayFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Creates a ReadableStream that emits the provided values with an optional delay between each value.\n *\n * @param options - The configuration options\n * @param options.chunks - Array of values to be emitted by the stream\n * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @returns A ReadableStream that emits the provided values\n */\nexport function simulateReadableStream<T>({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal,\n}: {\n chunks: T[];\n initialDelayInMs?: number | null;\n chunkDelayInMs?: number | null;\n _internal?: {\n delay?: (ms: number | null) => Promise<void>;\n };\n}): ReadableStream<T> {\n const delay = _internal?.delay ?? delayFunction;\n\n let index = 0;\n\n return new ReadableStream({\n async pull(controller) {\n if (index < chunks.length) {\n await delay(index === 0 ? initialDelayInMs : chunkDelayInMs);\n controller.enqueue(chunks[index++]);\n } else {\n controller.close();\n }\n },\n });\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OACK;;;ACHA,SAAS,iBAAwB;AACtC,QAAM,IAAI,MAAM,iBAAiB;AACnC;;;ACGO,IAAM,uBAAN,MAAqE;AAAA,EAU1E,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,UAAU;AAAA,EACZ,IAQI,CAAC,GAAG;AAvBR,SAAS,uBAAuB;AAwB9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,uBAAuB,sDAAwB;AACpD,SAAK,wBAAwB;AAC7B,SAAK,UAAU;AAAA,EACjB;AACF;;;ACjCO,IAAM,sBAAN,MAAqD;AAAA,EAY1D,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,EAC9B,IAQI,CAAC,GAAG;AA3BR,SAAS,uBAAuB;AA4B9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,cAAc;AAEnB,SAAK,8BAA8B;AACnC,SAAK,4BAA4B;AAAA,EACnC;AACF;;;ACzCO,SAAS,cAAiB,QAAsB;AACrD,MAAI,UAAU;AACd,SAAO,MAAG;AAFZ;AAEe,wBAAO,SAAS,MAAhB,YAAqB,OAAO,OAAO,SAAS,CAAC;AAAA;AAC5D;;;ACHA,SAAS,SAAS,qBAAqB;AAWhC,SAAS,uBAA0B;AAAA,EACxC;AAAA,EACA,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB;AACF,GAOsB;AAvBtB;AAwBE,QAAM,SAAQ,4CAAW,UAAX,YAAoB;AAElC,MAAI,QAAQ;AAEZ,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,KAAK,YAAY;AACrB,UAAI,QAAQ,OAAO,QAAQ;AACzB,cAAM,MAAM,UAAU,IAAI,mBAAmB,cAAc;AAC3D,mBAAW,QAAQ,OAAO,OAAO,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ALzBO,IAAMA,0BAAyB;","names":["simulateReadableStream"]}
1
+ {"version":3,"sources":["../../test/index.ts","../../src/test/not-implemented.ts","../../src/test/mock-embedding-model-v2.ts","../../src/test/mock-image-model-v2.ts","../../src/test/mock-language-model-v2.ts","../../src/test/mock-provider-v2.ts","../../src/test/mock-speech-model-v2.ts","../../src/test/mock-transcription-model-v2.ts","../../src/test/mock-values.ts","../../src/util/simulate-readable-stream.ts"],"sourcesContent":["export {\n convertArrayToAsyncIterable,\n convertArrayToReadableStream,\n convertReadableStreamToArray,\n mockId,\n} from '@ai-sdk/provider-utils/test';\nexport { MockEmbeddingModelV2 } from '../src/test/mock-embedding-model-v2';\nexport { MockImageModelV2 } from '../src/test/mock-image-model-v2';\nexport { MockLanguageModelV2 } from '../src/test/mock-language-model-v2';\nexport { MockProviderV2 } from '../src/test/mock-provider-v2';\nexport { MockSpeechModelV2 } from '../src/test/mock-speech-model-v2';\nexport { MockTranscriptionModelV2 } from '../src/test/mock-transcription-model-v2';\nexport { mockValues } from '../src/test/mock-values';\n\nimport { simulateReadableStream as originalSimulateReadableStream } from '../src/util/simulate-readable-stream';\n\n/**\n * @deprecated Use `simulateReadableStream` from `ai` instead.\n */\nexport const simulateReadableStream = originalSimulateReadableStream;\n","export function notImplemented(): never {\n throw new Error('Not implemented');\n}\n","import { EmbeddingModelV2 } from '@ai-sdk/provider';\nimport { Embedding } from '../types';\nimport { EmbeddingModelUsage } from '../types/usage';\nimport { notImplemented } from './not-implemented';\n\nexport class MockEmbeddingModelV2<VALUE> implements EmbeddingModelV2<VALUE> {\n readonly specificationVersion = 'v2';\n\n readonly provider: EmbeddingModelV2<VALUE>['provider'];\n readonly modelId: EmbeddingModelV2<VALUE>['modelId'];\n readonly maxEmbeddingsPerCall: EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall'];\n readonly supportsParallelCalls: EmbeddingModelV2<VALUE>['supportsParallelCalls'];\n\n doEmbed: EmbeddingModelV2<VALUE>['doEmbed'];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n maxEmbeddingsPerCall = 1,\n supportsParallelCalls = false,\n doEmbed = notImplemented,\n }: {\n provider?: EmbeddingModelV2<VALUE>['provider'];\n modelId?: EmbeddingModelV2<VALUE>['modelId'];\n maxEmbeddingsPerCall?:\n | EmbeddingModelV2<VALUE>['maxEmbeddingsPerCall']\n | null;\n supportsParallelCalls?: EmbeddingModelV2<VALUE>['supportsParallelCalls'];\n doEmbed?: EmbeddingModelV2<VALUE>['doEmbed'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;\n this.supportsParallelCalls = supportsParallelCalls;\n this.doEmbed = doEmbed;\n }\n}\n\nexport function mockEmbed<VALUE>(\n expectedValues: Array<VALUE>,\n embeddings: Array<Embedding>,\n usage?: EmbeddingModelUsage,\n response: Awaited<\n ReturnType<EmbeddingModelV2<VALUE>['doEmbed']>\n >['response'] = { headers: {}, body: {} },\n providerMetadata?: Awaited<\n ReturnType<EmbeddingModelV2<VALUE>['doEmbed']>\n >['providerMetadata'],\n): EmbeddingModelV2<VALUE>['doEmbed'] {\n return async ({ values }) => {\n assert.deepStrictEqual(expectedValues, values);\n return { embeddings, usage, response, providerMetadata };\n };\n}\n","import { ImageModelV2 } from '@ai-sdk/provider';\nimport { notImplemented } from './not-implemented';\n\nexport class MockImageModelV2 implements ImageModelV2 {\n readonly specificationVersion = 'v2';\n readonly provider: ImageModelV2['provider'];\n readonly modelId: ImageModelV2['modelId'];\n readonly maxImagesPerCall: ImageModelV2['maxImagesPerCall'];\n\n doGenerate: ImageModelV2['doGenerate'];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n maxImagesPerCall = 1,\n doGenerate = notImplemented,\n }: {\n provider?: ImageModelV2['provider'];\n modelId?: ImageModelV2['modelId'];\n maxImagesPerCall?: ImageModelV2['maxImagesPerCall'];\n doGenerate?: ImageModelV2['doGenerate'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.maxImagesPerCall = maxImagesPerCall;\n this.doGenerate = doGenerate;\n }\n}\n","import { LanguageModelV2 } from '@ai-sdk/provider';\nimport { notImplemented } from './not-implemented';\n\nexport class MockLanguageModelV2 implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n\n private _supportedUrls: () => LanguageModelV2['supportedUrls'];\n\n readonly provider: LanguageModelV2['provider'];\n readonly modelId: LanguageModelV2['modelId'];\n\n doGenerate: LanguageModelV2['doGenerate'];\n doStream: LanguageModelV2['doStream'];\n\n doGenerateCalls: Parameters<LanguageModelV2['doGenerate']>[0][] = [];\n doStreamCalls: Parameters<LanguageModelV2['doStream']>[0][] = [];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n supportedUrls = {},\n doGenerate = notImplemented,\n doStream = notImplemented,\n }: {\n provider?: LanguageModelV2['provider'];\n modelId?: LanguageModelV2['modelId'];\n supportedUrls?:\n | LanguageModelV2['supportedUrls']\n | (() => LanguageModelV2['supportedUrls']);\n doGenerate?:\n | LanguageModelV2['doGenerate']\n | Awaited<ReturnType<LanguageModelV2['doGenerate']>>\n | Awaited<ReturnType<LanguageModelV2['doGenerate']>>[];\n doStream?:\n | LanguageModelV2['doStream']\n | Awaited<ReturnType<LanguageModelV2['doStream']>>\n | Awaited<ReturnType<LanguageModelV2['doStream']>>[];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.doGenerate = async options => {\n this.doGenerateCalls.push(options);\n\n if (typeof doGenerate === 'function') {\n return doGenerate(options);\n } else if (Array.isArray(doGenerate)) {\n return doGenerate[this.doGenerateCalls.length];\n } else {\n return doGenerate;\n }\n };\n this.doStream = async options => {\n this.doStreamCalls.push(options);\n\n if (typeof doStream === 'function') {\n return doStream(options);\n } else if (Array.isArray(doStream)) {\n return doStream[this.doStreamCalls.length];\n } else {\n return doStream;\n }\n };\n this._supportedUrls =\n typeof supportedUrls === 'function'\n ? supportedUrls\n : async () => supportedUrls;\n }\n\n get supportedUrls() {\n return this._supportedUrls();\n }\n}\n","import {\n EmbeddingModelV2,\n ImageModelV2,\n LanguageModelV2,\n NoSuchModelError,\n ProviderV2,\n SpeechModelV2,\n TranscriptionModelV2,\n} from '@ai-sdk/provider';\n\nexport class MockProviderV2 implements ProviderV2 {\n languageModel: ProviderV2['languageModel'];\n textEmbeddingModel: ProviderV2['textEmbeddingModel'];\n imageModel: ProviderV2['imageModel'];\n transcriptionModel: ProviderV2['transcriptionModel'];\n speechModel: ProviderV2['speechModel'];\n\n constructor({\n languageModels,\n embeddingModels,\n imageModels,\n transcriptionModels,\n speechModels,\n }: {\n languageModels?: Record<string, LanguageModelV2>;\n embeddingModels?: Record<string, EmbeddingModelV2<string>>;\n imageModels?: Record<string, ImageModelV2>;\n transcriptionModels?: Record<string, TranscriptionModelV2>;\n speechModels?: Record<string, SpeechModelV2>;\n } = {}) {\n this.languageModel = (modelId: string) => {\n if (!languageModels?.[modelId]) {\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n }\n return languageModels[modelId];\n };\n this.textEmbeddingModel = (modelId: string) => {\n if (!embeddingModels?.[modelId]) {\n throw new NoSuchModelError({\n modelId,\n modelType: 'textEmbeddingModel',\n });\n }\n return embeddingModels[modelId];\n };\n this.imageModel = (modelId: string) => {\n if (!imageModels?.[modelId]) {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n }\n return imageModels[modelId];\n };\n this.transcriptionModel = (modelId: string) => {\n if (!transcriptionModels?.[modelId]) {\n throw new NoSuchModelError({\n modelId,\n modelType: 'transcriptionModel',\n });\n }\n return transcriptionModels[modelId];\n };\n this.speechModel = (modelId: string) => {\n if (!speechModels?.[modelId]) {\n throw new NoSuchModelError({ modelId, modelType: 'speechModel' });\n }\n return speechModels[modelId];\n };\n }\n}\n","import { SpeechModelV2 } from '@ai-sdk/provider';\nimport { notImplemented } from './not-implemented';\n\nexport class MockSpeechModelV2 implements SpeechModelV2 {\n readonly specificationVersion = 'v2';\n readonly provider: SpeechModelV2['provider'];\n readonly modelId: SpeechModelV2['modelId'];\n\n doGenerate: SpeechModelV2['doGenerate'];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n doGenerate = notImplemented,\n }: {\n provider?: SpeechModelV2['provider'];\n modelId?: SpeechModelV2['modelId'];\n doGenerate?: SpeechModelV2['doGenerate'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.doGenerate = doGenerate;\n }\n}\n","import { TranscriptionModelV2 } from '@ai-sdk/provider';\nimport { notImplemented } from './not-implemented';\n\nexport class MockTranscriptionModelV2 implements TranscriptionModelV2 {\n readonly specificationVersion = 'v2';\n readonly provider: TranscriptionModelV2['provider'];\n readonly modelId: TranscriptionModelV2['modelId'];\n\n doGenerate: TranscriptionModelV2['doGenerate'];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n doGenerate = notImplemented,\n }: {\n provider?: TranscriptionModelV2['provider'];\n modelId?: TranscriptionModelV2['modelId'];\n doGenerate?: TranscriptionModelV2['doGenerate'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.doGenerate = doGenerate;\n }\n}\n","export function mockValues<T>(...values: T[]): () => T {\n let counter = 0;\n return () => values[counter++] ?? values[values.length - 1];\n}\n","import { delay as delayFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Creates a ReadableStream that emits the provided values with an optional delay between each value.\n *\n * @param options - The configuration options\n * @param options.chunks - Array of values to be emitted by the stream\n * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @returns A ReadableStream that emits the provided values\n */\nexport function simulateReadableStream<T>({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal,\n}: {\n chunks: T[];\n initialDelayInMs?: number | null;\n chunkDelayInMs?: number | null;\n _internal?: {\n delay?: (ms: number | null) => Promise<void>;\n };\n}): ReadableStream<T> {\n const delay = _internal?.delay ?? delayFunction;\n\n let index = 0;\n\n return new ReadableStream({\n async pull(controller) {\n if (index < chunks.length) {\n await delay(index === 0 ? initialDelayInMs : chunkDelayInMs);\n controller.enqueue(chunks[index++]);\n } else {\n controller.close();\n }\n },\n });\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACLA,SAAS,iBAAwB;AACtC,QAAM,IAAI,MAAM,iBAAiB;AACnC;;;ACGO,IAAM,uBAAN,MAAqE;AAAA,EAU1E,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,UAAU;AAAA,EACZ,IAQI,CAAC,GAAG;AAvBR,SAAS,uBAAuB;AAwB9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,uBAAuB,sDAAwB;AACpD,SAAK,wBAAwB;AAC7B,SAAK,UAAU;AAAA,EACjB;AACF;;;ACjCO,IAAM,mBAAN,MAA+C;AAAA,EAQpD,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,aAAa;AAAA,EACf,IAKI,CAAC,GAAG;AAjBR,SAAS,uBAAuB;AAkB9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,mBAAmB;AACxB,SAAK,aAAa;AAAA,EACpB;AACF;;;ACxBO,IAAM,sBAAN,MAAqD;AAAA,EAc1D,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,gBAAgB,CAAC;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,EACb,IAcI,CAAC,GAAG;AAjCR,SAAS,uBAAuB;AAUhC,2BAAkE,CAAC;AACnE,yBAA8D,CAAC;AAuB7D,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,aAAa,OAAM,YAAW;AACjC,WAAK,gBAAgB,KAAK,OAAO;AAEjC,UAAI,OAAO,eAAe,YAAY;AACpC,eAAO,WAAW,OAAO;AAAA,MAC3B,WAAW,MAAM,QAAQ,UAAU,GAAG;AACpC,eAAO,WAAW,KAAK,gBAAgB,MAAM;AAAA,MAC/C,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AACA,SAAK,WAAW,OAAM,YAAW;AAC/B,WAAK,cAAc,KAAK,OAAO;AAE/B,UAAI,OAAO,aAAa,YAAY;AAClC,eAAO,SAAS,OAAO;AAAA,MACzB,WAAW,MAAM,QAAQ,QAAQ,GAAG;AAClC,eAAO,SAAS,KAAK,cAAc,MAAM;AAAA,MAC3C,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AACA,SAAK,iBACH,OAAO,kBAAkB,aACrB,gBACA,YAAY;AAAA,EACpB;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,KAAK,eAAe;AAAA,EAC7B;AACF;;;ACvEA;AAAA,EAIE;AAAA,OAIK;AAEA,IAAM,iBAAN,MAA2C;AAAA,EAOhD,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAMI,CAAC,GAAG;AACN,SAAK,gBAAgB,CAAC,YAAoB;AACxC,UAAI,EAAC,iDAAiB,WAAU;AAC9B,cAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,gBAAgB,CAAC;AAAA,MACpE;AACA,aAAO,eAAe,OAAO;AAAA,IAC/B;AACA,SAAK,qBAAqB,CAAC,YAAoB;AAC7C,UAAI,EAAC,mDAAkB,WAAU;AAC/B,cAAM,IAAI,iBAAiB;AAAA,UACzB;AAAA,UACA,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AACA,aAAO,gBAAgB,OAAO;AAAA,IAChC;AACA,SAAK,aAAa,CAAC,YAAoB;AACrC,UAAI,EAAC,2CAAc,WAAU;AAC3B,cAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,MACjE;AACA,aAAO,YAAY,OAAO;AAAA,IAC5B;AACA,SAAK,qBAAqB,CAAC,YAAoB;AAC7C,UAAI,EAAC,2DAAsB,WAAU;AACnC,cAAM,IAAI,iBAAiB;AAAA,UACzB;AAAA,UACA,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AACA,aAAO,oBAAoB,OAAO;AAAA,IACpC;AACA,SAAK,cAAc,CAAC,YAAoB;AACtC,UAAI,EAAC,6CAAe,WAAU;AAC5B,cAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,cAAc,CAAC;AAAA,MAClE;AACA,aAAO,aAAa,OAAO;AAAA,IAC7B;AAAA,EACF;AACF;;;AChEO,IAAM,oBAAN,MAAiD;AAAA,EAOtD,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,EACf,IAII,CAAC,GAAG;AAdR,SAAS,uBAAuB;AAe9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,aAAa;AAAA,EACpB;AACF;;;ACpBO,IAAM,2BAAN,MAA+D;AAAA,EAOpE,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,aAAa;AAAA,EACf,IAII,CAAC,GAAG;AAdR,SAAS,uBAAuB;AAe9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,aAAa;AAAA,EACpB;AACF;;;ACvBO,SAAS,cAAiB,QAAsB;AACrD,MAAI,UAAU;AACd,SAAO,MAAG;AAFZ;AAEe,wBAAO,SAAS,MAAhB,YAAqB,OAAO,OAAO,SAAS,CAAC;AAAA;AAC5D;;;ACHA,SAAS,SAAS,qBAAqB;AAWhC,SAAS,uBAA0B;AAAA,EACxC;AAAA,EACA,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB;AACF,GAOsB;AAvBtB;AAwBE,QAAM,SAAQ,4CAAW,UAAX,YAAoB;AAElC,MAAI,QAAQ;AAEZ,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,KAAK,YAAY;AACrB,UAAI,QAAQ,OAAO,QAAQ;AACzB,cAAM,MAAM,UAAU,IAAI,mBAAmB,cAAc;AAC3D,mBAAW,QAAQ,OAAO,OAAO,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ATnBO,IAAMA,0BAAyB;","names":["simulateReadableStream"]}
package/internal.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './dist/internal';
package/mcp-stdio.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './dist/mcp-stdio';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai",
3
- "version": "5.0.0-canary.9",
3
+ "version": "5.0.0",
4
4
  "description": "AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -9,7 +9,10 @@
9
9
  "types": "./dist/index.d.ts",
10
10
  "files": [
11
11
  "dist/**/*",
12
- "CHANGELOG.md"
12
+ "CHANGELOG.md",
13
+ "internal.d.ts",
14
+ "mcp-stdio.d.ts",
15
+ "test.d.ts"
13
16
  ],
14
17
  "exports": {
15
18
  "./package.json": "./package.json",
@@ -38,24 +41,24 @@
38
41
  }
39
42
  },
40
43
  "dependencies": {
41
- "@ai-sdk/provider": "2.0.0-canary.7",
42
- "@ai-sdk/provider-utils": "3.0.0-canary.8",
43
44
  "@opentelemetry/api": "1.9.0",
44
- "zod-to-json-schema": "^3.24.1"
45
+ "@ai-sdk/gateway": "1.0.0",
46
+ "@ai-sdk/provider": "2.0.0",
47
+ "@ai-sdk/provider-utils": "3.0.0"
45
48
  },
46
49
  "devDependencies": {
47
- "@types/json-schema": "7.0.15",
48
50
  "@edge-runtime/vm": "^5.0.0",
51
+ "@types/json-schema": "7.0.15",
49
52
  "@types/node": "20.17.24",
50
53
  "eslint": "8.57.1",
51
54
  "tsup": "^7.2.0",
52
55
  "typescript": "5.8.3",
53
- "zod": "3.23.8",
56
+ "zod": "3.25.76",
54
57
  "@vercel/ai-tsconfig": "0.0.0",
55
58
  "eslint-config-vercel-ai": "0.0.0"
56
59
  },
57
60
  "peerDependencies": {
58
- "zod": "^3.23.8"
61
+ "zod": "^3.25.76 || ^4"
59
62
  },
60
63
  "engines": {
61
64
  "node": ">=18"
@@ -63,7 +66,7 @@
63
66
  "publishConfig": {
64
67
  "access": "public"
65
68
  },
66
- "homepage": "https://sdk.vercel.ai/docs",
69
+ "homepage": "https://ai-sdk.dev/docs",
67
70
  "repository": {
68
71
  "type": "git",
69
72
  "url": "git+https://github.com/vercel/ai.git"
@@ -74,23 +77,32 @@
74
77
  "keywords": [
75
78
  "ai",
76
79
  "vercel",
77
- "next",
78
- "nextjs"
80
+ "sdk",
81
+ "mcp",
82
+ "tool-calling",
83
+ "tools",
84
+ "structured-output",
85
+ "agent",
86
+ "agentic",
87
+ "generative",
88
+ "chatbot",
89
+ "prompt",
90
+ "inference",
91
+ "llm",
92
+ "language-model",
93
+ "streaming"
79
94
  ],
80
95
  "scripts": {
81
96
  "build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
82
- "build:watch": "pnpm clean && tsup --watch",
97
+ "build:watch": "pnpm clean && tsup --watch --tsconfig tsconfig.build.json",
83
98
  "clean": "rm -rf dist *.tsbuildinfo",
84
99
  "lint": "eslint \"./**/*.ts*\"",
85
100
  "type-check": "tsc --build",
86
101
  "prettier-check": "prettier --check \"./**/*.ts*\"",
87
102
  "test": "pnpm test:node && pnpm test:edge",
103
+ "test:update": "pnpm test:node -u",
104
+ "test:watch": "vitest --config vitest.node.config.js",
88
105
  "test:edge": "vitest --config vitest.edge.config.js --run",
89
- "test:edge:watch": "vitest --config vitest.edge.config.js",
90
- "test:node": "vitest --config vitest.node.config.js --run",
91
- "test:node:watch": "vitest --config vitest.node.config.js",
92
- "test:node:core": "pnpm vitest --config vitest.node.config.js --run ./core/",
93
- "test:node:core:watch": "pnpm vitest --config vitest.node.config.js ./core/",
94
- "test:node:util": "pnpm vitest --config vitest.node.config.js --run ./util/"
106
+ "test:node": "vitest --config vitest.node.config.js --run"
95
107
  }
96
108
  }
package/test.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './dist/test';