ai 0.0.0-85f9a635-20240518005312 → 0.0.0-8777c42a-20250115032312

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 (58) hide show
  1. package/CHANGELOG.md +2863 -0
  2. package/README.md +99 -22
  3. package/dist/index.d.mts +1925 -1592
  4. package/dist/index.d.ts +1925 -1592
  5. package/dist/index.js +5500 -2961
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +5497 -2916
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +39 -100
  10. package/react/dist/index.d.mts +8 -563
  11. package/react/dist/index.d.ts +8 -580
  12. package/react/dist/index.js +7 -1395
  13. package/react/dist/index.js.map +1 -1
  14. package/react/dist/index.mjs +12 -1383
  15. package/react/dist/index.mjs.map +1 -1
  16. package/rsc/dist/index.d.ts +340 -197
  17. package/rsc/dist/rsc-server.d.mts +339 -197
  18. package/rsc/dist/rsc-server.mjs +1295 -1347
  19. package/rsc/dist/rsc-server.mjs.map +1 -1
  20. package/rsc/dist/rsc-shared.d.mts +30 -23
  21. package/rsc/dist/rsc-shared.mjs +69 -105
  22. package/rsc/dist/rsc-shared.mjs.map +1 -1
  23. package/test/dist/index.d.mts +67 -0
  24. package/test/dist/index.d.ts +67 -0
  25. package/test/dist/index.js +131 -0
  26. package/test/dist/index.js.map +1 -0
  27. package/test/dist/index.mjs +101 -0
  28. package/test/dist/index.mjs.map +1 -0
  29. package/prompts/dist/index.d.mts +0 -324
  30. package/prompts/dist/index.d.ts +0 -324
  31. package/prompts/dist/index.js +0 -178
  32. package/prompts/dist/index.js.map +0 -1
  33. package/prompts/dist/index.mjs +0 -146
  34. package/prompts/dist/index.mjs.map +0 -1
  35. package/react/dist/index.server.d.mts +0 -17
  36. package/react/dist/index.server.d.ts +0 -17
  37. package/react/dist/index.server.js +0 -50
  38. package/react/dist/index.server.js.map +0 -1
  39. package/react/dist/index.server.mjs +0 -23
  40. package/react/dist/index.server.mjs.map +0 -1
  41. package/solid/dist/index.d.mts +0 -408
  42. package/solid/dist/index.d.ts +0 -408
  43. package/solid/dist/index.js +0 -1072
  44. package/solid/dist/index.js.map +0 -1
  45. package/solid/dist/index.mjs +0 -1044
  46. package/solid/dist/index.mjs.map +0 -1
  47. package/svelte/dist/index.d.mts +0 -484
  48. package/svelte/dist/index.d.ts +0 -484
  49. package/svelte/dist/index.js +0 -1778
  50. package/svelte/dist/index.js.map +0 -1
  51. package/svelte/dist/index.mjs +0 -1749
  52. package/svelte/dist/index.mjs.map +0 -1
  53. package/vue/dist/index.d.mts +0 -402
  54. package/vue/dist/index.d.ts +0 -402
  55. package/vue/dist/index.js +0 -1072
  56. package/vue/dist/index.js.map +0 -1
  57. package/vue/dist/index.mjs +0 -1034
  58. package/vue/dist/index.mjs.map +0 -1
@@ -1,32 +1,15 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
 
3
- type ServerWrappedAction<T = unknown> = (aiState: T, ...args: unknown[]) => Promise<[Promise<T>, unknown]>;
4
- type ServerWrappedActions<T = unknown> = Record<string, ServerWrappedAction<T>>;
5
- type InternalAIProviderProps<AIState = any, UIState = any> = {
6
- children: React.ReactNode;
7
- initialUIState: UIState;
8
- initialAIState: AIState;
9
- initialAIStatePatch: undefined | Promise<AIState>;
10
- wrappedActions: ServerWrappedActions<AIState>;
11
- wrappedSyncUIState?: ServerWrappedAction<AIState>;
12
- };
13
- type AIProviderProps<AIState = any, UIState = any, Actions = any> = {
14
- children: React.ReactNode;
15
- initialAIState?: AIState;
16
- initialUIState?: UIState;
17
- /** $ActionTypes is only added for type inference and is never used at runtime **/
18
- $ActionTypes?: Actions;
19
- };
20
- type AIProvider<AIState = any, UIState = any, Actions = any> = (props: AIProviderProps<AIState, UIState, Actions>) => Promise<React.ReactElement>;
21
- type InferAIState<T, Fallback> = T extends AIProvider<infer AIState, any, any> ? AIState : Fallback;
22
- type InferUIState<T, Fallback> = T extends AIProvider<any, infer UIState, any> ? UIState : Fallback;
23
- type InferActions<T, Fallback> = T extends AIProvider<any, any, infer Actions> ? Actions : Fallback;
24
- type ValueOrUpdater<T> = T | ((current: T) => T);
3
+ declare const __internal_curr: unique symbol;
4
+ declare const __internal_error: unique symbol;
25
5
  /**
26
6
  * StreamableValue is a value that can be streamed over the network via AI Actions.
27
7
  * To read the streamed values, use the `readStreamableValue` or `useStreamableValue` APIs.
28
8
  */
29
- type StreamableValue<T = any, E = any> = {};
9
+ type StreamableValue<T = any, E = any> = {
10
+ [__internal_curr]?: T;
11
+ [__internal_error]?: E;
12
+ };
30
13
 
31
14
  /**
32
15
  * `readStreamableValue` takes a streamable value created via the `createStreamableValue().value` API,
@@ -59,6 +42,7 @@ type StreamableValue<T = any, E = any> = {};
59
42
  * This logs out 1, 2, 3 on console.
60
43
  */
61
44
  declare function readStreamableValue<T = unknown>(streamableValue: StreamableValue<T>): AsyncIterable<T | undefined>;
45
+
62
46
  /**
63
47
  * `useStreamableValue` is a React hook that takes a streamable value created via the `createStreamableValue().value` API,
64
48
  * and returns the current value, error, and pending state.
@@ -78,6 +62,29 @@ declare function readStreamableValue<T = unknown>(streamableValue: StreamableVal
78
62
  */
79
63
  declare function useStreamableValue<T = unknown, Error = unknown>(streamableValue?: StreamableValue<T>): [data: T | undefined, error: Error | undefined, pending: boolean];
80
64
 
65
+ type ServerWrappedAction<T = unknown> = (aiState: T, ...args: unknown[]) => Promise<[Promise<T>, unknown]>;
66
+ type ServerWrappedActions<T = unknown> = Record<string, ServerWrappedAction<T>>;
67
+ type InternalAIProviderProps<AIState = any, UIState = any> = {
68
+ children: React.ReactNode;
69
+ initialUIState: UIState;
70
+ initialAIState: AIState;
71
+ initialAIStatePatch: undefined | Promise<AIState>;
72
+ wrappedActions: ServerWrappedActions<AIState>;
73
+ wrappedSyncUIState?: ServerWrappedAction<AIState>;
74
+ };
75
+ type AIProviderProps<AIState = any, UIState = any, Actions = any> = {
76
+ children: React.ReactNode;
77
+ initialAIState?: AIState;
78
+ initialUIState?: UIState;
79
+ /** $ActionTypes is only added for type inference and is never used at runtime **/
80
+ $ActionTypes?: Actions;
81
+ };
82
+ type AIProvider<AIState = any, UIState = any, Actions = any> = (props: AIProviderProps<AIState, UIState, Actions>) => Promise<React.ReactElement>;
83
+ type InferAIState<T, Fallback> = T extends AIProvider<infer AIState, any, any> ? AIState : Fallback;
84
+ type InferUIState<T, Fallback> = T extends AIProvider<any, infer UIState, any> ? UIState : Fallback;
85
+ type InferActions<T, Fallback> = T extends AIProvider<any, any, infer Actions> ? Actions : Fallback;
86
+ type ValueOrUpdater<T> = T | ((current: T) => T);
87
+
81
88
  declare function InternalAIProvider({ children, initialUIState, initialAIState, initialAIStatePatch, wrappedActions, wrappedSyncUIState, }: InternalAIProviderProps): react_jsx_runtime.JSX.Element;
82
89
  declare function useUIState<AI extends AIProvider = any>(): [InferUIState<AI, any>, (v: InferUIState<AI, any> | ((v_: InferUIState<AI, any>) => InferUIState<AI, any>)) => void];
83
90
  declare function useAIState<AI extends AIProvider = any>(): [
@@ -1,106 +1,92 @@
1
1
  "use client";
2
2
 
3
- // rsc/shared-client/streamable.tsx
4
- import { startTransition, useLayoutEffect, useState } from "react";
5
-
6
- // rsc/constants.ts
3
+ // rsc/streamable-value/streamable-value.ts
7
4
  var STREAMABLE_VALUE_TYPE = Symbol.for("ui.streamable.value");
8
- var DEV_DEFAULT_STREAMABLE_WARNING_TIME = 15 * 1e3;
9
5
 
10
- // rsc/shared-client/streamable.tsx
11
- function hasReadableValueSignature(value) {
12
- return !!(value && typeof value === "object" && "type" in value && value.type === STREAMABLE_VALUE_TYPE);
13
- }
14
- function assertStreamableValue(value) {
15
- if (!hasReadableValueSignature(value)) {
16
- throw new Error(
17
- "Invalid value: this hook only accepts values created via `createStreamableValue`."
18
- );
19
- }
20
- }
6
+ // rsc/streamable-value/is-streamable-value.ts
21
7
  function isStreamableValue(value) {
22
- const hasSignature = hasReadableValueSignature(value);
23
- if (!hasSignature && typeof value !== "undefined") {
8
+ return value != null && typeof value === "object" && "type" in value && value.type === STREAMABLE_VALUE_TYPE;
9
+ }
10
+
11
+ // rsc/streamable-value/read-streamable-value.tsx
12
+ function readStreamableValue(streamableValue) {
13
+ if (!isStreamableValue(streamableValue)) {
24
14
  throw new Error(
25
15
  "Invalid value: this hook only accepts values created via `createStreamableValue`."
26
16
  );
27
17
  }
28
- return hasSignature;
29
- }
30
- function readStreamableValue(streamableValue) {
31
- assertStreamableValue(streamableValue);
32
18
  return {
33
19
  [Symbol.asyncIterator]() {
34
20
  let row = streamableValue;
35
- let curr = row.curr;
36
- let done = false;
37
- let initial = true;
21
+ let value = row.curr;
22
+ let isDone = false;
23
+ let isFirstIteration = true;
38
24
  return {
39
25
  async next() {
40
- if (done)
41
- return { value: curr, done: true };
26
+ if (isDone)
27
+ return { value, done: true };
42
28
  row = await row;
43
- if (typeof row.error !== "undefined") {
29
+ if (row.error !== void 0) {
44
30
  throw row.error;
45
31
  }
46
32
  if ("curr" in row || row.diff) {
47
33
  if (row.diff) {
48
- switch (row.diff[0]) {
49
- case 0:
50
- if (typeof curr !== "string") {
51
- throw new Error(
52
- "Invalid patch: can only append to string types. This is a bug in the AI SDK."
53
- );
54
- } else {
55
- curr = curr + row.diff[1];
56
- }
57
- break;
34
+ if (row.diff[0] === 0) {
35
+ if (typeof value !== "string") {
36
+ throw new Error(
37
+ "Invalid patch: can only append to string types. This is a bug in the AI SDK."
38
+ );
39
+ }
40
+ value = value + row.diff[1];
58
41
  }
59
42
  } else {
60
- curr = row.curr;
43
+ value = row.curr;
61
44
  }
62
45
  if (!row.next) {
63
- done = true;
64
- return {
65
- value: curr,
66
- done: false
67
- };
46
+ isDone = true;
47
+ return { value, done: false };
68
48
  }
69
49
  }
70
- if (!row.next) {
71
- return {
72
- value: curr,
73
- done: true
74
- };
50
+ if (row.next === void 0) {
51
+ return { value, done: true };
75
52
  }
76
53
  row = row.next;
77
- if (initial) {
78
- initial = false;
79
- if (typeof curr === "undefined") {
54
+ if (isFirstIteration) {
55
+ isFirstIteration = false;
56
+ if (value === void 0) {
80
57
  return this.next();
81
58
  }
82
59
  }
83
- return {
84
- value: curr,
85
- done: false
86
- };
60
+ return { value, done: false };
87
61
  }
88
62
  };
89
63
  }
90
64
  };
91
65
  }
66
+
67
+ // rsc/streamable-value/use-streamable-value.tsx
68
+ import { startTransition, useLayoutEffect, useState } from "react";
69
+ function checkStreamableValue(value) {
70
+ const hasSignature = isStreamableValue(value);
71
+ if (!hasSignature && value !== void 0) {
72
+ throw new Error(
73
+ "Invalid value: this hook only accepts values created via `createStreamableValue`."
74
+ );
75
+ }
76
+ return hasSignature;
77
+ }
92
78
  function useStreamableValue(streamableValue) {
93
79
  const [curr, setCurr] = useState(
94
- isStreamableValue(streamableValue) ? streamableValue.curr : void 0
80
+ checkStreamableValue(streamableValue) ? streamableValue.curr : void 0
95
81
  );
96
82
  const [error, setError] = useState(
97
- isStreamableValue(streamableValue) ? streamableValue.error : void 0
83
+ checkStreamableValue(streamableValue) ? streamableValue.error : void 0
98
84
  );
99
85
  const [pending, setPending] = useState(
100
- isStreamableValue(streamableValue) ? !!streamableValue.next : false
86
+ checkStreamableValue(streamableValue) ? !!streamableValue.next : false
101
87
  );
102
88
  useLayoutEffect(() => {
103
- if (!isStreamableValue(streamableValue))
89
+ if (!checkStreamableValue(streamableValue))
104
90
  return;
105
91
  let cancelled = false;
106
92
  const iterator = readStreamableValue(streamableValue);
@@ -148,40 +134,18 @@ function useStreamableValue(streamableValue) {
148
134
  }
149
135
 
150
136
  // rsc/shared-client/context.tsx
151
- import * as React2 from "react";
137
+ import * as React from "react";
152
138
  import * as jsondiffpatch from "jsondiffpatch";
153
139
 
154
- // rsc/utils.tsx
155
- import { Suspense } from "react";
156
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
157
- var R = [
158
- async ({
159
- c,
160
- // current
161
- n
162
- // next
163
- }) => {
164
- const chunk = await n;
165
- if (chunk.done) {
166
- return chunk.value;
167
- }
168
- if (chunk.append) {
169
- return /* @__PURE__ */ jsxs(Fragment, { children: [
170
- c,
171
- /* @__PURE__ */ jsx(Suspense, { fallback: chunk.value, children: /* @__PURE__ */ jsx(R, { c: chunk.value, n: chunk.next }) })
172
- ] });
173
- }
174
- return /* @__PURE__ */ jsx(Suspense, { fallback: chunk.value, children: /* @__PURE__ */ jsx(R, { c: chunk.value, n: chunk.next }) });
175
- }
176
- ][0];
177
- var isFunction = (x) => typeof x === "function";
140
+ // util/is-function.ts
141
+ var isFunction = (value) => typeof value === "function";
178
142
 
179
143
  // rsc/shared-client/context.tsx
180
- import { jsx as jsx2 } from "react/jsx-runtime";
181
- var InternalUIStateProvider = React2.createContext(null);
182
- var InternalAIStateProvider = React2.createContext(void 0);
183
- var InternalActionProvider = React2.createContext(null);
184
- var InternalSyncUIStateProvider = React2.createContext(null);
144
+ import { jsx } from "react/jsx-runtime";
145
+ var InternalUIStateProvider = React.createContext(null);
146
+ var InternalAIStateProvider = React.createContext(void 0);
147
+ var InternalActionProvider = React.createContext(null);
148
+ var InternalSyncUIStateProvider = React.createContext(null);
185
149
  function InternalAIProvider({
186
150
  children,
187
151
  initialUIState,
@@ -190,13 +154,13 @@ function InternalAIProvider({
190
154
  wrappedActions,
191
155
  wrappedSyncUIState
192
156
  }) {
193
- if (!("use" in React2)) {
157
+ if (!("use" in React)) {
194
158
  throw new Error("Unsupported React version.");
195
159
  }
196
- const uiState = React2.useState(initialUIState);
160
+ const uiState = React.useState(initialUIState);
197
161
  const setUIState = uiState[1];
198
- const resolvedInitialAIStatePatch = initialAIStatePatch ? React2.use(initialAIStatePatch) : void 0;
199
- initialAIState = React2.useMemo(() => {
162
+ const resolvedInitialAIStatePatch = initialAIStatePatch ? React.use(initialAIStatePatch) : void 0;
163
+ initialAIState = React.useMemo(() => {
200
164
  if (resolvedInitialAIStatePatch) {
201
165
  return jsondiffpatch.patch(
202
166
  jsondiffpatch.clone(initialAIState),
@@ -205,13 +169,13 @@ function InternalAIProvider({
205
169
  }
206
170
  return initialAIState;
207
171
  }, [initialAIState, resolvedInitialAIStatePatch]);
208
- const aiState = React2.useState(initialAIState);
172
+ const aiState = React.useState(initialAIState);
209
173
  const setAIState = aiState[1];
210
- const aiStateRef = React2.useRef(aiState[0]);
211
- React2.useEffect(() => {
174
+ const aiStateRef = React.useRef(aiState[0]);
175
+ React.useEffect(() => {
212
176
  aiStateRef.current = aiState[0];
213
177
  }, [aiState[0]]);
214
- const clientWrappedActions = React2.useMemo(
178
+ const clientWrappedActions = React.useMemo(
215
179
  () => Object.fromEntries(
216
180
  Object.entries(wrappedActions).map(([key, action]) => [
217
181
  key,
@@ -238,7 +202,7 @@ function InternalAIProvider({
238
202
  ),
239
203
  [wrappedActions]
240
204
  );
241
- const clientWrappedSyncUIStateAction = React2.useMemo(() => {
205
+ const clientWrappedSyncUIStateAction = React.useMemo(() => {
242
206
  if (!wrappedSyncUIState) {
243
207
  return () => {
244
208
  };
@@ -261,7 +225,7 @@ function InternalAIProvider({
261
225
  }
262
226
  };
263
227
  }, [wrappedSyncUIState]);
264
- return /* @__PURE__ */ jsx2(InternalAIStateProvider.Provider, { value: aiState, children: /* @__PURE__ */ jsx2(InternalUIStateProvider.Provider, { value: uiState, children: /* @__PURE__ */ jsx2(InternalActionProvider.Provider, { value: clientWrappedActions, children: /* @__PURE__ */ jsx2(
228
+ return /* @__PURE__ */ jsx(InternalAIStateProvider.Provider, { value: aiState, children: /* @__PURE__ */ jsx(InternalUIStateProvider.Provider, { value: uiState, children: /* @__PURE__ */ jsx(InternalActionProvider.Provider, { value: clientWrappedActions, children: /* @__PURE__ */ jsx(
265
229
  InternalSyncUIStateProvider.Provider,
266
230
  {
267
231
  value: clientWrappedSyncUIStateAction,
@@ -270,7 +234,7 @@ function InternalAIProvider({
270
234
  ) }) }) });
271
235
  }
272
236
  function useUIState() {
273
- const state = React2.useContext(InternalUIStateProvider);
237
+ const state = React.useContext(InternalUIStateProvider);
274
238
  if (state === null) {
275
239
  throw new Error("`useUIState` must be used inside an <AI> provider.");
276
240
  }
@@ -285,7 +249,7 @@ function useUIState() {
285
249
  return state;
286
250
  }
287
251
  function useAIState(...args) {
288
- const state = React2.useContext(InternalAIStateProvider);
252
+ const state = React.useContext(InternalAIStateProvider);
289
253
  if (state === null) {
290
254
  throw new Error("`useAIState` must be used inside an <AI> provider.");
291
255
  }
@@ -303,7 +267,7 @@ function useAIState(...args) {
303
267
  );
304
268
  }
305
269
  const key = args[0];
306
- const setter = React2.useCallback(
270
+ const setter = React.useCallback(
307
271
  typeof key === "undefined" ? state[1] : (newState) => {
308
272
  if (isFunction(newState)) {
309
273
  return state[1]((s) => {
@@ -322,11 +286,11 @@ function useAIState(...args) {
322
286
  }
323
287
  }
324
288
  function useActions() {
325
- const actions = React2.useContext(InternalActionProvider);
289
+ const actions = React.useContext(InternalActionProvider);
326
290
  return actions;
327
291
  }
328
292
  function useSyncUIState() {
329
- const syncUIState = React2.useContext(
293
+ const syncUIState = React.useContext(
330
294
  InternalSyncUIStateProvider
331
295
  );
332
296
  if (syncUIState === null) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../shared-client/streamable.tsx","../constants.ts","../shared-client/context.tsx","../utils.tsx"],"sourcesContent":["import { startTransition, useLayoutEffect, useState } from 'react';\nimport { STREAMABLE_VALUE_TYPE } from '../constants';\nimport type { StreamableValue } from '../types';\n\nfunction hasReadableValueSignature(value: unknown): value is StreamableValue {\n return !!(\n value &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === STREAMABLE_VALUE_TYPE\n );\n}\n\nfunction assertStreamableValue(\n value: unknown,\n): asserts value is StreamableValue {\n if (!hasReadableValueSignature(value)) {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n}\n\nfunction isStreamableValue(value: unknown): value is StreamableValue {\n const hasSignature = hasReadableValueSignature(value);\n\n if (!hasSignature && typeof value !== 'undefined') {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n\n return hasSignature;\n}\n\n/**\n * `readStreamableValue` takes a streamable value created via the `createStreamableValue().value` API,\n * and returns an async iterator.\n *\n * ```js\n * // Inside your AI action:\n *\n * async function action() {\n * 'use server'\n * const streamable = createStreamableValue();\n *\n * streamable.update(1);\n * streamable.update(2);\n * streamable.done(3);\n * // ...\n * return streamable.value;\n * }\n * ```\n *\n * And to read the value:\n *\n * ```js\n * const streamableValue = await action()\n * for await (const v of readStreamableValue(streamableValue)) {\n * console.log(v)\n * }\n * ```\n *\n * This logs out 1, 2, 3 on console.\n */\nexport function readStreamableValue<T = unknown>(\n streamableValue: StreamableValue<T>,\n): AsyncIterable<T | undefined> {\n assertStreamableValue(streamableValue);\n\n return {\n [Symbol.asyncIterator]() {\n let row: StreamableValue<T> | Promise<StreamableValue<T>> =\n streamableValue;\n let curr = row.curr;\n let done = false;\n let initial = true;\n\n return {\n async next() {\n if (done) return { value: curr, done: true };\n\n row = await row;\n\n if (typeof row.error !== 'undefined') {\n throw row.error;\n }\n if ('curr' in row || row.diff) {\n if (row.diff) {\n switch (row.diff[0]) {\n case 0:\n if (typeof curr !== 'string') {\n throw new Error(\n 'Invalid patch: can only append to string types. This is a bug in the AI SDK.',\n );\n } else {\n (curr as string) = curr + row.diff[1];\n }\n break;\n }\n } else {\n curr = row.curr;\n }\n\n // The last emitted { done: true } won't be used as the value\n // by the for await...of syntax.\n if (!row.next) {\n done = true;\n return {\n value: curr,\n done: false,\n };\n }\n }\n\n if (!row.next) {\n return {\n value: curr,\n done: true,\n };\n }\n\n row = row.next;\n if (initial) {\n initial = false;\n if (typeof curr === 'undefined') {\n // This is the initial chunk and there isn't an initial value yet.\n // Let's skip this one.\n return this.next();\n }\n }\n\n return {\n value: curr,\n done: false,\n };\n },\n };\n },\n };\n}\n\n/**\n * `useStreamableValue` is a React hook that takes a streamable value created via the `createStreamableValue().value` API,\n * and returns the current value, error, and pending state.\n *\n * This is useful for consuming streamable values received from a component's props. For example:\n *\n * ```js\n * function MyComponent({ streamableValue }) {\n * const [data, error, pending] = useStreamableValue(streamableValue);\n *\n * if (pending) return <div>Loading...</div>;\n * if (error) return <div>Error: {error.message}</div>;\n *\n * return <div>Data: {data}</div>;\n * }\n * ```\n */\nexport function useStreamableValue<T = unknown, Error = unknown>(\n streamableValue?: StreamableValue<T>,\n): [data: T | undefined, error: Error | undefined, pending: boolean] {\n const [curr, setCurr] = useState<T | undefined>(\n isStreamableValue(streamableValue) ? streamableValue.curr : undefined,\n );\n const [error, setError] = useState<Error | undefined>(\n isStreamableValue(streamableValue) ? streamableValue.error : undefined,\n );\n const [pending, setPending] = useState<boolean>(\n isStreamableValue(streamableValue) ? !!streamableValue.next : false,\n );\n\n useLayoutEffect(() => {\n if (!isStreamableValue(streamableValue)) return;\n\n let cancelled = false;\n\n const iterator = readStreamableValue(streamableValue);\n if (streamableValue.next) {\n startTransition(() => {\n if (cancelled) return;\n setPending(true);\n });\n }\n\n (async () => {\n try {\n for await (const value of iterator) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setCurr(value);\n });\n }\n } catch (e) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setError(e as Error);\n });\n } finally {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setPending(false);\n });\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [streamableValue]);\n\n return [curr, error, pending];\n}\n","export const STREAMABLE_VALUE_TYPE = Symbol.for('ui.streamable.value');\nexport const DEV_DEFAULT_STREAMABLE_WARNING_TIME = 15 * 1000;\n","/* eslint-disable react-hooks/exhaustive-deps */\n'use client';\n\nimport * as React from 'react';\n\nimport * as jsondiffpatch from 'jsondiffpatch';\nimport type {\n InternalAIProviderProps,\n AIProvider,\n InferAIState,\n ValueOrUpdater,\n InferActions,\n InferUIState,\n} from '../types';\nimport { isFunction } from '../utils';\n\nconst InternalUIStateProvider = React.createContext<null | any>(null);\nconst InternalAIStateProvider = React.createContext<undefined | any>(undefined);\nconst InternalActionProvider = React.createContext<null | any>(null);\nconst InternalSyncUIStateProvider = React.createContext<null | any>(null);\n\nexport function InternalAIProvider({\n children,\n initialUIState,\n initialAIState,\n initialAIStatePatch,\n wrappedActions,\n wrappedSyncUIState,\n}: InternalAIProviderProps) {\n if (!('use' in React)) {\n throw new Error('Unsupported React version.');\n }\n\n const uiState = React.useState(initialUIState);\n const setUIState = uiState[1];\n\n const resolvedInitialAIStatePatch = initialAIStatePatch\n ? (React as any).use(initialAIStatePatch)\n : undefined;\n initialAIState = React.useMemo(() => {\n if (resolvedInitialAIStatePatch) {\n return jsondiffpatch.patch(\n jsondiffpatch.clone(initialAIState),\n resolvedInitialAIStatePatch,\n );\n }\n return initialAIState;\n }, [initialAIState, resolvedInitialAIStatePatch]);\n\n const aiState = React.useState(initialAIState);\n const setAIState = aiState[1];\n const aiStateRef = React.useRef(aiState[0]);\n\n React.useEffect(() => {\n aiStateRef.current = aiState[0];\n }, [aiState[0]]);\n\n const clientWrappedActions = React.useMemo(\n () =>\n Object.fromEntries(\n Object.entries(wrappedActions).map(([key, action]) => [\n key,\n async (...args: any) => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, result] = await action(\n aiStateSnapshot,\n ...args,\n );\n (async () => {\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n aiState[1](\n jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n ),\n );\n }\n })();\n return result;\n },\n ]),\n ),\n [wrappedActions],\n );\n\n const clientWrappedSyncUIStateAction = React.useMemo(() => {\n if (!wrappedSyncUIState) {\n return () => {};\n }\n\n return async () => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, uiState] = await wrappedSyncUIState!(\n aiStateSnapshot,\n );\n\n if (uiState !== undefined) {\n setUIState(uiState);\n }\n\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n const patchedAiState = jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n );\n setAIState(patchedAiState);\n }\n };\n }, [wrappedSyncUIState]);\n\n return (\n <InternalAIStateProvider.Provider value={aiState}>\n <InternalUIStateProvider.Provider value={uiState}>\n <InternalActionProvider.Provider value={clientWrappedActions}>\n <InternalSyncUIStateProvider.Provider\n value={clientWrappedSyncUIStateAction}\n >\n {children}\n </InternalSyncUIStateProvider.Provider>\n </InternalActionProvider.Provider>\n </InternalUIStateProvider.Provider>\n </InternalAIStateProvider.Provider>\n );\n}\n\nexport function useUIState<AI extends AIProvider = any>() {\n type T = InferUIState<AI, any>;\n\n const state = React.useContext<\n [T, (v: T | ((v_: T) => T)) => void] | null | undefined\n >(InternalUIStateProvider);\n if (state === null) {\n throw new Error('`useUIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialUIState` must be provided to `createAI` or `<AI>`',\n );\n }\n return state;\n}\n\n// TODO: How do we avoid causing a re-render when the AI state changes but you\n// are only listening to a specific key? We need useSES perhaps?\nfunction useAIState<AI extends AIProvider = any>(): [\n InferAIState<AI, any>,\n (newState: ValueOrUpdater<InferAIState<AI, any>>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n key: keyof InferAIState<AI, any>,\n): [\n InferAIState<AI, any>[typeof key],\n (newState: ValueOrUpdater<InferAIState<AI, any>[typeof key]>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n ...args: [] | [keyof InferAIState<AI, any>]\n) {\n type T = InferAIState<AI, any>;\n\n const state = React.useContext<\n [T, (newState: ValueOrUpdater<T>) => void] | null | undefined\n >(InternalAIStateProvider);\n if (state === null) {\n throw new Error('`useAIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialAIState` must be provided to `createAI` or `<AI>`',\n );\n }\n if (args.length >= 1 && typeof state[0] !== 'object') {\n throw new Error(\n 'When using `useAIState` with a key, the AI state must be an object.',\n );\n }\n\n const key = args[0];\n const setter = React.useCallback(\n typeof key === 'undefined'\n ? state[1]\n : (newState: ValueOrUpdater<T>) => {\n if (isFunction(newState)) {\n return state[1](s => {\n return { ...s, [key]: newState(s[key]) };\n });\n } else {\n return state[1]({ ...state[0], [key]: newState });\n }\n },\n [key],\n );\n\n if (args.length === 0) {\n return state;\n } else {\n return [state[0][args[0]], setter];\n }\n}\n\nexport function useActions<AI extends AIProvider = any>() {\n type T = InferActions<AI, any>;\n\n const actions = React.useContext<T>(InternalActionProvider);\n return actions;\n}\n\nexport function useSyncUIState() {\n const syncUIState = React.useContext<() => Promise<void>>(\n InternalSyncUIStateProvider,\n );\n\n if (syncUIState === null) {\n throw new Error('`useSyncUIState` must be used inside an <AI> provider.');\n }\n\n return syncUIState;\n}\n\nexport { useAIState };\n","import React, { Suspense } from 'react';\n\nexport function createResolvablePromise<T = any>() {\n let resolve: (value: T) => void, reject: (error: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return {\n promise,\n resolve: resolve!,\n reject: reject!,\n };\n}\n\n// Use the name `R` for `Row` as it will be shorter in the RSC payload.\nconst R = [\n (async ({\n c, // current\n n, // next\n }: {\n c: React.ReactNode;\n n: Promise<any>;\n }) => {\n const chunk = await n;\n if (chunk.done) {\n return chunk.value;\n }\n\n if (chunk.append) {\n return (\n <>\n {c}\n <Suspense fallback={chunk.value}>\n <R c={chunk.value} n={chunk.next} />\n </Suspense>\n </>\n );\n }\n\n return (\n <Suspense fallback={chunk.value}>\n <R c={chunk.value} n={chunk.next} />\n </Suspense>\n );\n }) as unknown as React.FC<{\n c: React.ReactNode;\n n: Promise<any>;\n }>,\n][0];\n\nexport function createSuspensedChunk(initialValue: React.ReactNode) {\n const { promise, resolve, reject } = createResolvablePromise();\n\n return {\n row: (\n <Suspense fallback={initialValue}>\n <R c={initialValue} n={promise} />\n </Suspense>\n ),\n resolve,\n reject,\n };\n}\n\nexport const isFunction = (x: unknown): x is Function =>\n typeof x === 'function';\n\nexport const consumeStream = async (stream: ReadableStream) => {\n const reader = stream.getReader();\n while (true) {\n const { done } = await reader.read();\n if (done) break;\n }\n};\n"],"mappings":"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","names":["React","jsx","React","uiState"]}
1
+ {"version":3,"sources":["../streamable-value/streamable-value.ts","../streamable-value/is-streamable-value.ts","../streamable-value/read-streamable-value.tsx","../streamable-value/use-streamable-value.tsx","../shared-client/context.tsx","../../util/is-function.ts"],"sourcesContent":["export const STREAMABLE_VALUE_TYPE = Symbol.for('ui.streamable.value');\n\nexport type StreamablePatch = undefined | [0, string]; // Append string.\n\ndeclare const __internal_curr: unique symbol;\ndeclare const __internal_error: unique symbol;\n\n/**\n * StreamableValue is a value that can be streamed over the network via AI Actions.\n * To read the streamed values, use the `readStreamableValue` or `useStreamableValue` APIs.\n */\nexport type StreamableValue<T = any, E = any> = {\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n type?: typeof STREAMABLE_VALUE_TYPE;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n curr?: T;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n error?: E;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n diff?: StreamablePatch;\n /**\n * @internal Use `readStreamableValue` to read the values.\n */\n next?: Promise<StreamableValue<T, E>>;\n\n // branded types to maintain type signature after internal properties are stripped.\n [__internal_curr]?: T;\n [__internal_error]?: E;\n};\n","import { STREAMABLE_VALUE_TYPE, StreamableValue } from './streamable-value';\n\nexport function isStreamableValue(value: unknown): value is StreamableValue {\n return (\n value != null &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === STREAMABLE_VALUE_TYPE\n );\n}\n","import { isStreamableValue } from './is-streamable-value';\nimport { StreamableValue } from './streamable-value';\n\n/**\n * `readStreamableValue` takes a streamable value created via the `createStreamableValue().value` API,\n * and returns an async iterator.\n *\n * ```js\n * // Inside your AI action:\n *\n * async function action() {\n * 'use server'\n * const streamable = createStreamableValue();\n *\n * streamable.update(1);\n * streamable.update(2);\n * streamable.done(3);\n * // ...\n * return streamable.value;\n * }\n * ```\n *\n * And to read the value:\n *\n * ```js\n * const streamableValue = await action()\n * for await (const v of readStreamableValue(streamableValue)) {\n * console.log(v)\n * }\n * ```\n *\n * This logs out 1, 2, 3 on console.\n */\nexport function readStreamableValue<T = unknown>(\n streamableValue: StreamableValue<T>,\n): AsyncIterable<T | undefined> {\n if (!isStreamableValue(streamableValue)) {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n\n return {\n [Symbol.asyncIterator]() {\n let row: StreamableValue<T> | Promise<StreamableValue<T>> =\n streamableValue;\n let value = row.curr; // the current value\n let isDone = false;\n let isFirstIteration = true;\n\n return {\n async next() {\n // the iteration is done already, return the last value:\n if (isDone) return { value, done: true };\n\n // resolve the promise at the beginning of each iteration:\n row = await row;\n\n // throw error if any:\n if (row.error !== undefined) {\n throw row.error;\n }\n\n // if there is a value or a patch, use it:\n if ('curr' in row || row.diff) {\n if (row.diff) {\n // streamable patch (text only):\n if (row.diff[0] === 0) {\n if (typeof value !== 'string') {\n throw new Error(\n 'Invalid patch: can only append to string types. This is a bug in the AI SDK.',\n );\n }\n\n // casting required to remove T & string limitation\n (value as string) = value + row.diff[1];\n }\n } else {\n // replace the value (full new value)\n value = row.curr;\n }\n\n // The last emitted { done: true } won't be used as the value\n // by the for await...of syntax.\n if (!row.next) {\n isDone = true;\n return { value, done: false };\n }\n }\n\n // there are no further rows to iterate over:\n if (row.next === undefined) {\n return { value, done: true };\n }\n\n row = row.next;\n\n if (isFirstIteration) {\n isFirstIteration = false; // TODO should this be set for every return?\n\n if (value === undefined) {\n // This is the initial chunk and there isn't an initial value yet.\n // Let's skip this one.\n return this.next();\n }\n }\n\n return { value, done: false };\n },\n };\n },\n };\n}\n","import { startTransition, useLayoutEffect, useState } from 'react';\nimport { readStreamableValue } from './read-streamable-value';\nimport { StreamableValue } from './streamable-value';\nimport { isStreamableValue } from './is-streamable-value';\n\nfunction checkStreamableValue(value: unknown): value is StreamableValue {\n const hasSignature = isStreamableValue(value);\n\n if (!hasSignature && value !== undefined) {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue`.',\n );\n }\n\n return hasSignature;\n}\n\n/**\n * `useStreamableValue` is a React hook that takes a streamable value created via the `createStreamableValue().value` API,\n * and returns the current value, error, and pending state.\n *\n * This is useful for consuming streamable values received from a component's props. For example:\n *\n * ```js\n * function MyComponent({ streamableValue }) {\n * const [data, error, pending] = useStreamableValue(streamableValue);\n *\n * if (pending) return <div>Loading...</div>;\n * if (error) return <div>Error: {error.message}</div>;\n *\n * return <div>Data: {data}</div>;\n * }\n * ```\n */\nexport function useStreamableValue<T = unknown, Error = unknown>(\n streamableValue?: StreamableValue<T>,\n): [data: T | undefined, error: Error | undefined, pending: boolean] {\n const [curr, setCurr] = useState<T | undefined>(\n checkStreamableValue(streamableValue) ? streamableValue.curr : undefined,\n );\n const [error, setError] = useState<Error | undefined>(\n checkStreamableValue(streamableValue) ? streamableValue.error : undefined,\n );\n const [pending, setPending] = useState<boolean>(\n checkStreamableValue(streamableValue) ? !!streamableValue.next : false,\n );\n\n useLayoutEffect(() => {\n if (!checkStreamableValue(streamableValue)) return;\n\n let cancelled = false;\n\n const iterator = readStreamableValue(streamableValue);\n if (streamableValue.next) {\n startTransition(() => {\n if (cancelled) return;\n setPending(true);\n });\n }\n\n (async () => {\n try {\n for await (const value of iterator) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setCurr(value);\n });\n }\n } catch (e) {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setError(e as Error);\n });\n } finally {\n if (cancelled) return;\n startTransition(() => {\n if (cancelled) return;\n setPending(false);\n });\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [streamableValue]);\n\n return [curr, error, pending];\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n'use client';\n\nimport * as React from 'react';\n\nimport * as jsondiffpatch from 'jsondiffpatch';\nimport { isFunction } from '../../util/is-function';\nimport type {\n AIProvider,\n InferActions,\n InferAIState,\n InferUIState,\n InternalAIProviderProps,\n ValueOrUpdater,\n} from '../types';\n\nconst InternalUIStateProvider = React.createContext<null | any>(null);\nconst InternalAIStateProvider = React.createContext<undefined | any>(undefined);\nconst InternalActionProvider = React.createContext<null | any>(null);\nconst InternalSyncUIStateProvider = React.createContext<null | any>(null);\n\nexport function InternalAIProvider({\n children,\n initialUIState,\n initialAIState,\n initialAIStatePatch,\n wrappedActions,\n wrappedSyncUIState,\n}: InternalAIProviderProps) {\n if (!('use' in React)) {\n throw new Error('Unsupported React version.');\n }\n\n const uiState = React.useState(initialUIState);\n const setUIState = uiState[1];\n\n const resolvedInitialAIStatePatch = initialAIStatePatch\n ? (React as any).use(initialAIStatePatch)\n : undefined;\n initialAIState = React.useMemo(() => {\n if (resolvedInitialAIStatePatch) {\n return jsondiffpatch.patch(\n jsondiffpatch.clone(initialAIState),\n resolvedInitialAIStatePatch,\n );\n }\n return initialAIState;\n }, [initialAIState, resolvedInitialAIStatePatch]);\n\n const aiState = React.useState(initialAIState);\n const setAIState = aiState[1];\n const aiStateRef = React.useRef(aiState[0]);\n\n React.useEffect(() => {\n aiStateRef.current = aiState[0];\n }, [aiState[0]]);\n\n const clientWrappedActions = React.useMemo(\n () =>\n Object.fromEntries(\n Object.entries(wrappedActions).map(([key, action]) => [\n key,\n async (...args: any) => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, result] = await action(\n aiStateSnapshot,\n ...args,\n );\n (async () => {\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n aiState[1](\n jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n ),\n );\n }\n })();\n return result;\n },\n ]),\n ),\n [wrappedActions],\n );\n\n const clientWrappedSyncUIStateAction = React.useMemo(() => {\n if (!wrappedSyncUIState) {\n return () => {};\n }\n\n return async () => {\n const aiStateSnapshot = aiStateRef.current;\n const [aiStateDelta, uiState] = await wrappedSyncUIState!(\n aiStateSnapshot,\n );\n\n if (uiState !== undefined) {\n setUIState(uiState);\n }\n\n const delta = await aiStateDelta;\n if (delta !== undefined) {\n const patchedAiState = jsondiffpatch.patch(\n jsondiffpatch.clone(aiStateSnapshot),\n delta,\n );\n setAIState(patchedAiState);\n }\n };\n }, [wrappedSyncUIState]);\n\n return (\n <InternalAIStateProvider.Provider value={aiState}>\n <InternalUIStateProvider.Provider value={uiState}>\n <InternalActionProvider.Provider value={clientWrappedActions}>\n <InternalSyncUIStateProvider.Provider\n value={clientWrappedSyncUIStateAction}\n >\n {children}\n </InternalSyncUIStateProvider.Provider>\n </InternalActionProvider.Provider>\n </InternalUIStateProvider.Provider>\n </InternalAIStateProvider.Provider>\n );\n}\n\nexport function useUIState<AI extends AIProvider = any>() {\n type T = InferUIState<AI, any>;\n\n const state = React.useContext<\n [T, (v: T | ((v_: T) => T)) => void] | null | undefined\n >(InternalUIStateProvider);\n if (state === null) {\n throw new Error('`useUIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialUIState` must be provided to `createAI` or `<AI>`',\n );\n }\n return state;\n}\n\n// TODO: How do we avoid causing a re-render when the AI state changes but you\n// are only listening to a specific key? We need useSES perhaps?\nfunction useAIState<AI extends AIProvider = any>(): [\n InferAIState<AI, any>,\n (newState: ValueOrUpdater<InferAIState<AI, any>>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n key: keyof InferAIState<AI, any>,\n): [\n InferAIState<AI, any>[typeof key],\n (newState: ValueOrUpdater<InferAIState<AI, any>[typeof key]>) => void,\n];\nfunction useAIState<AI extends AIProvider = any>(\n ...args: [] | [keyof InferAIState<AI, any>]\n) {\n type T = InferAIState<AI, any>;\n\n const state = React.useContext<\n [T, (newState: ValueOrUpdater<T>) => void] | null | undefined\n >(InternalAIStateProvider);\n if (state === null) {\n throw new Error('`useAIState` must be used inside an <AI> provider.');\n }\n if (!Array.isArray(state)) {\n throw new Error('Invalid state');\n }\n if (state[0] === undefined) {\n throw new Error(\n '`initialAIState` must be provided to `createAI` or `<AI>`',\n );\n }\n if (args.length >= 1 && typeof state[0] !== 'object') {\n throw new Error(\n 'When using `useAIState` with a key, the AI state must be an object.',\n );\n }\n\n const key = args[0];\n const setter = React.useCallback(\n typeof key === 'undefined'\n ? state[1]\n : (newState: ValueOrUpdater<T>) => {\n if (isFunction(newState)) {\n return state[1](s => {\n return { ...s, [key]: newState(s[key]) };\n });\n } else {\n return state[1]({ ...state[0], [key]: newState });\n }\n },\n [key],\n );\n\n if (args.length === 0) {\n return state;\n } else {\n return [state[0][args[0]], setter];\n }\n}\n\nexport function useActions<AI extends AIProvider = any>() {\n type T = InferActions<AI, any>;\n\n const actions = React.useContext<T>(InternalActionProvider);\n return actions;\n}\n\nexport function useSyncUIState() {\n const syncUIState = React.useContext<() => Promise<void>>(\n InternalSyncUIStateProvider,\n );\n\n if (syncUIState === null) {\n throw new Error('`useSyncUIState` must be used inside an <AI> provider.');\n }\n\n return syncUIState;\n}\n\nexport { useAIState };\n","/**\n * Checks if the given value is a function.\n *\n * @param {unknown} value - The value to check.\n * @returns {boolean} True if the value is a function, false otherwise.\n */\nexport const isFunction = (value: unknown): value is Function =>\n typeof value === 'function';\n"],"mappings":"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","names":["uiState"]}
@@ -0,0 +1,67 @@
1
+ export { convertArrayToReadableStream } from '@ai-sdk/provider-utils/test';
2
+ import { EmbeddingModelV1, LanguageModelV1 } from '@ai-sdk/provider';
3
+
4
+ declare class MockEmbeddingModelV1<VALUE> implements EmbeddingModelV1<VALUE> {
5
+ readonly specificationVersion = "v1";
6
+ readonly provider: EmbeddingModelV1<VALUE>['provider'];
7
+ readonly modelId: EmbeddingModelV1<VALUE>['modelId'];
8
+ readonly maxEmbeddingsPerCall: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'];
9
+ readonly supportsParallelCalls: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
10
+ doEmbed: EmbeddingModelV1<VALUE>['doEmbed'];
11
+ constructor({ provider, modelId, maxEmbeddingsPerCall, supportsParallelCalls, doEmbed, }?: {
12
+ provider?: EmbeddingModelV1<VALUE>['provider'];
13
+ modelId?: EmbeddingModelV1<VALUE>['modelId'];
14
+ maxEmbeddingsPerCall?: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'] | null;
15
+ supportsParallelCalls?: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
16
+ doEmbed?: EmbeddingModelV1<VALUE>['doEmbed'];
17
+ });
18
+ }
19
+
20
+ declare function mockId(): () => string;
21
+
22
+ declare class MockLanguageModelV1 implements LanguageModelV1 {
23
+ readonly specificationVersion = "v1";
24
+ readonly provider: LanguageModelV1['provider'];
25
+ readonly modelId: LanguageModelV1['modelId'];
26
+ supportsUrl: LanguageModelV1['supportsUrl'];
27
+ doGenerate: LanguageModelV1['doGenerate'];
28
+ doStream: LanguageModelV1['doStream'];
29
+ readonly defaultObjectGenerationMode: LanguageModelV1['defaultObjectGenerationMode'];
30
+ readonly supportsStructuredOutputs: LanguageModelV1['supportsStructuredOutputs'];
31
+ constructor({ provider, modelId, supportsUrl, doGenerate, doStream, defaultObjectGenerationMode, supportsStructuredOutputs, }?: {
32
+ provider?: LanguageModelV1['provider'];
33
+ modelId?: LanguageModelV1['modelId'];
34
+ supportsUrl?: LanguageModelV1['supportsUrl'];
35
+ doGenerate?: LanguageModelV1['doGenerate'];
36
+ doStream?: LanguageModelV1['doStream'];
37
+ defaultObjectGenerationMode?: LanguageModelV1['defaultObjectGenerationMode'];
38
+ supportsStructuredOutputs?: LanguageModelV1['supportsStructuredOutputs'];
39
+ });
40
+ }
41
+
42
+ declare function mockValues<T>(...values: T[]): () => T;
43
+
44
+ /**
45
+ * Creates a ReadableStream that emits the provided values with an optional delay between each value.
46
+ *
47
+ * @param options - The configuration options
48
+ * @param options.chunks - Array of values to be emitted by the stream
49
+ * @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.
50
+ * @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.
51
+ * @returns A ReadableStream that emits the provided values
52
+ */
53
+ declare function simulateReadableStream$1<T>({ chunks, initialDelayInMs, chunkDelayInMs, _internal, }: {
54
+ chunks: T[];
55
+ initialDelayInMs?: number | null;
56
+ chunkDelayInMs?: number | null;
57
+ _internal?: {
58
+ delay?: (ms: number | null) => Promise<void>;
59
+ };
60
+ }): ReadableStream<T>;
61
+
62
+ /**
63
+ * @deprecated Use `simulateReadableStream` from `ai` instead.
64
+ */
65
+ declare const simulateReadableStream: typeof simulateReadableStream$1;
66
+
67
+ export { MockEmbeddingModelV1, MockLanguageModelV1, mockId, mockValues, simulateReadableStream };
@@ -0,0 +1,67 @@
1
+ export { convertArrayToReadableStream } from '@ai-sdk/provider-utils/test';
2
+ import { EmbeddingModelV1, LanguageModelV1 } from '@ai-sdk/provider';
3
+
4
+ declare class MockEmbeddingModelV1<VALUE> implements EmbeddingModelV1<VALUE> {
5
+ readonly specificationVersion = "v1";
6
+ readonly provider: EmbeddingModelV1<VALUE>['provider'];
7
+ readonly modelId: EmbeddingModelV1<VALUE>['modelId'];
8
+ readonly maxEmbeddingsPerCall: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'];
9
+ readonly supportsParallelCalls: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
10
+ doEmbed: EmbeddingModelV1<VALUE>['doEmbed'];
11
+ constructor({ provider, modelId, maxEmbeddingsPerCall, supportsParallelCalls, doEmbed, }?: {
12
+ provider?: EmbeddingModelV1<VALUE>['provider'];
13
+ modelId?: EmbeddingModelV1<VALUE>['modelId'];
14
+ maxEmbeddingsPerCall?: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'] | null;
15
+ supportsParallelCalls?: EmbeddingModelV1<VALUE>['supportsParallelCalls'];
16
+ doEmbed?: EmbeddingModelV1<VALUE>['doEmbed'];
17
+ });
18
+ }
19
+
20
+ declare function mockId(): () => string;
21
+
22
+ declare class MockLanguageModelV1 implements LanguageModelV1 {
23
+ readonly specificationVersion = "v1";
24
+ readonly provider: LanguageModelV1['provider'];
25
+ readonly modelId: LanguageModelV1['modelId'];
26
+ supportsUrl: LanguageModelV1['supportsUrl'];
27
+ doGenerate: LanguageModelV1['doGenerate'];
28
+ doStream: LanguageModelV1['doStream'];
29
+ readonly defaultObjectGenerationMode: LanguageModelV1['defaultObjectGenerationMode'];
30
+ readonly supportsStructuredOutputs: LanguageModelV1['supportsStructuredOutputs'];
31
+ constructor({ provider, modelId, supportsUrl, doGenerate, doStream, defaultObjectGenerationMode, supportsStructuredOutputs, }?: {
32
+ provider?: LanguageModelV1['provider'];
33
+ modelId?: LanguageModelV1['modelId'];
34
+ supportsUrl?: LanguageModelV1['supportsUrl'];
35
+ doGenerate?: LanguageModelV1['doGenerate'];
36
+ doStream?: LanguageModelV1['doStream'];
37
+ defaultObjectGenerationMode?: LanguageModelV1['defaultObjectGenerationMode'];
38
+ supportsStructuredOutputs?: LanguageModelV1['supportsStructuredOutputs'];
39
+ });
40
+ }
41
+
42
+ declare function mockValues<T>(...values: T[]): () => T;
43
+
44
+ /**
45
+ * Creates a ReadableStream that emits the provided values with an optional delay between each value.
46
+ *
47
+ * @param options - The configuration options
48
+ * @param options.chunks - Array of values to be emitted by the stream
49
+ * @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.
50
+ * @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.
51
+ * @returns A ReadableStream that emits the provided values
52
+ */
53
+ declare function simulateReadableStream$1<T>({ chunks, initialDelayInMs, chunkDelayInMs, _internal, }: {
54
+ chunks: T[];
55
+ initialDelayInMs?: number | null;
56
+ chunkDelayInMs?: number | null;
57
+ _internal?: {
58
+ delay?: (ms: number | null) => Promise<void>;
59
+ };
60
+ }): ReadableStream<T>;
61
+
62
+ /**
63
+ * @deprecated Use `simulateReadableStream` from `ai` instead.
64
+ */
65
+ declare const simulateReadableStream: typeof simulateReadableStream$1;
66
+
67
+ export { MockEmbeddingModelV1, MockLanguageModelV1, mockId, mockValues, simulateReadableStream };