ai 3.0.14 → 3.0.16

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 (35) hide show
  1. package/dist/index.d.mts +375 -56
  2. package/dist/index.d.ts +375 -56
  3. package/dist/index.js +195 -135
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +195 -135
  6. package/dist/index.mjs.map +1 -1
  7. package/mistral/dist/index.d.mts +4 -1
  8. package/mistral/dist/index.d.ts +4 -1
  9. package/mistral/dist/index.js +15 -15
  10. package/mistral/dist/index.js.map +1 -1
  11. package/mistral/dist/index.mjs +15 -15
  12. package/mistral/dist/index.mjs.map +1 -1
  13. package/openai/dist/index.d.mts +4 -0
  14. package/openai/dist/index.d.ts +4 -0
  15. package/openai/dist/index.js +19 -19
  16. package/openai/dist/index.js.map +1 -1
  17. package/openai/dist/index.mjs +19 -19
  18. package/openai/dist/index.mjs.map +1 -1
  19. package/package.json +8 -8
  20. package/rsc/dist/index.d.ts +21 -3
  21. package/rsc/dist/rsc-client.d.mts +1 -1
  22. package/rsc/dist/rsc-client.mjs +2 -0
  23. package/rsc/dist/rsc-client.mjs.map +1 -1
  24. package/rsc/dist/rsc-server.d.mts +2 -2
  25. package/rsc/dist/rsc-server.mjs +1 -1
  26. package/rsc/dist/rsc-server.mjs.map +1 -1
  27. package/rsc/dist/rsc-shared.d.mts +20 -2
  28. package/rsc/dist/rsc-shared.mjs +75 -2
  29. package/rsc/dist/rsc-shared.mjs.map +1 -1
  30. package/{ai-model-specification → spec}/dist/index.d.mts +4 -0
  31. package/{ai-model-specification → spec}/dist/index.d.ts +4 -0
  32. package/{ai-model-specification → spec}/dist/index.js +29 -29
  33. package/{ai-model-specification → spec}/dist/index.mjs +25 -25
  34. /package/{ai-model-specification → spec}/dist/index.js.map +0 -0
  35. /package/{ai-model-specification → spec}/dist/index.mjs.map +0 -0
@@ -1,17 +1,32 @@
1
1
  "use client";
2
2
 
3
+ // rsc/shared-client/streamable.tsx
4
+ import { startTransition, useLayoutEffect, useState } from "react";
5
+
3
6
  // rsc/constants.ts
4
7
  var STREAMABLE_VALUE_TYPE = Symbol.for("ui.streamable.value");
5
8
  var DEV_DEFAULT_STREAMABLE_WARNING_TIME = 15 * 1e3;
6
9
 
7
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
+ }
8
14
  function assertStreamableValue(value) {
9
- if (!value || typeof value !== "object" || !("type" in value) || value.type !== STREAMABLE_VALUE_TYPE) {
15
+ if (!hasReadableValueSignature(value)) {
10
16
  throw new Error(
11
- "Invalid value: this hook only accepts values created via `createStreamableValue` from the server."
17
+ "Invalid value: this hook only accepts values created via `createStreamableValue`."
12
18
  );
13
19
  }
14
20
  }
21
+ function isStreamableValue(value) {
22
+ const hasSignature = hasReadableValueSignature(value);
23
+ if (!hasSignature && typeof value !== "undefined") {
24
+ throw new Error(
25
+ "Invalid value: this hook only accepts values created via `createStreamableValue`."
26
+ );
27
+ }
28
+ return hasSignature;
29
+ }
15
30
  function readStreamableValue(streamableValue) {
16
31
  assertStreamableValue(streamableValue);
17
32
  return {
@@ -74,6 +89,63 @@ function readStreamableValue(streamableValue) {
74
89
  }
75
90
  };
76
91
  }
92
+ function useStreamableValue(streamableValue) {
93
+ const [curr, setCurr] = useState(
94
+ isStreamableValue(streamableValue) ? streamableValue.curr : void 0
95
+ );
96
+ const [error, setError] = useState(
97
+ isStreamableValue(streamableValue) ? streamableValue.error : void 0
98
+ );
99
+ const [pending, setPending] = useState(
100
+ isStreamableValue(streamableValue) ? !!streamableValue.next : false
101
+ );
102
+ useLayoutEffect(() => {
103
+ if (!isStreamableValue(streamableValue))
104
+ return;
105
+ let cancelled = false;
106
+ const iterator = readStreamableValue(streamableValue);
107
+ if (streamableValue.next) {
108
+ startTransition(() => {
109
+ if (cancelled)
110
+ return;
111
+ setPending(true);
112
+ });
113
+ }
114
+ (async () => {
115
+ try {
116
+ for await (const value of iterator) {
117
+ if (cancelled)
118
+ return;
119
+ startTransition(() => {
120
+ if (cancelled)
121
+ return;
122
+ setCurr(value);
123
+ });
124
+ }
125
+ } catch (e) {
126
+ if (cancelled)
127
+ return;
128
+ startTransition(() => {
129
+ if (cancelled)
130
+ return;
131
+ setError(e);
132
+ });
133
+ } finally {
134
+ if (cancelled)
135
+ return;
136
+ startTransition(() => {
137
+ if (cancelled)
138
+ return;
139
+ setPending(false);
140
+ });
141
+ }
142
+ })();
143
+ return () => {
144
+ cancelled = true;
145
+ };
146
+ }, [streamableValue]);
147
+ return [curr, error, pending];
148
+ }
77
149
 
78
150
  // rsc/shared-client/context.tsx
79
151
  import * as React2 from "react";
@@ -267,6 +339,7 @@ export {
267
339
  readStreamableValue,
268
340
  useAIState,
269
341
  useActions,
342
+ useStreamableValue,
270
343
  useSyncUIState,
271
344
  useUIState
272
345
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../constants.ts","../shared-client/streamable.tsx","../shared-client/context.tsx","../utils.tsx"],"sourcesContent":["export const STREAMABLE_VALUE_TYPE = Symbol.for('ui.streamable.value');\nexport const DEV_DEFAULT_STREAMABLE_WARNING_TIME = 15 * 1000;\n","import { STREAMABLE_VALUE_TYPE } from '../constants';\nimport type { StreamableValue } from '../types';\n\nfunction assertStreamableValue(\n value: unknown,\n): asserts value is StreamableValue {\n if (\n !value ||\n typeof value !== 'object' ||\n !('type' in value) ||\n value.type !== STREAMABLE_VALUE_TYPE\n ) {\n throw new Error(\n 'Invalid value: this hook only accepts values created via `createStreamableValue` from the server.',\n );\n }\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","'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":["../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","'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"]}
@@ -437,6 +437,10 @@ type LanguageModelV1FunctionToolCall = {
437
437
  args: string;
438
438
  };
439
439
 
440
+ /**
441
+ * Experimental: Specification for a language model that implements the language model
442
+ * interface version 1.
443
+ */
440
444
  type LanguageModelV1 = {
441
445
  /**
442
446
  * The language model must specify which language model interface
@@ -437,6 +437,10 @@ type LanguageModelV1FunctionToolCall = {
437
437
  args: string;
438
438
  };
439
439
 
440
+ /**
441
+ * Experimental: Specification for a language model that implements the language model
442
+ * interface version 1.
443
+ */
440
444
  type LanguageModelV1 = {
441
445
  /**
442
446
  * The language model must specify which language model interface
@@ -27,9 +27,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
- // ai-model-specification/index.ts
31
- var ai_model_specification_exports = {};
32
- __export(ai_model_specification_exports, {
30
+ // spec/index.ts
31
+ var spec_exports = {};
32
+ __export(spec_exports, {
33
33
  APICallError: () => APICallError,
34
34
  InvalidArgumentError: () => InvalidArgumentError,
35
35
  InvalidDataContentError: () => InvalidDataContentError,
@@ -61,9 +61,9 @@ __export(ai_model_specification_exports, {
61
61
  scale: () => scale,
62
62
  validateTypes: () => validateTypes
63
63
  });
64
- module.exports = __toCommonJS(ai_model_specification_exports);
64
+ module.exports = __toCommonJS(spec_exports);
65
65
 
66
- // ai-model-specification/errors/api-call-error.ts
66
+ // spec/errors/api-call-error.ts
67
67
  var APICallError = class extends Error {
68
68
  constructor({
69
69
  message,
@@ -107,7 +107,7 @@ var APICallError = class extends Error {
107
107
  }
108
108
  };
109
109
 
110
- // ai-model-specification/errors/invalid-argument-error.ts
110
+ // spec/errors/invalid-argument-error.ts
111
111
  var InvalidArgumentError = class extends Error {
112
112
  constructor({
113
113
  parameter,
@@ -133,7 +133,7 @@ var InvalidArgumentError = class extends Error {
133
133
  }
134
134
  };
135
135
 
136
- // ai-model-specification/errors/invalid-data-content-error.ts
136
+ // spec/errors/invalid-data-content-error.ts
137
137
  var InvalidDataContentError = class extends Error {
138
138
  constructor({
139
139
  content,
@@ -156,7 +156,7 @@ var InvalidDataContentError = class extends Error {
156
156
  }
157
157
  };
158
158
 
159
- // ai-model-specification/errors/invalid-prompt-error.ts
159
+ // spec/errors/invalid-prompt-error.ts
160
160
  var InvalidPromptError = class extends Error {
161
161
  constructor({ prompt: prompt2, message }) {
162
162
  super(`Invalid prompt: ${message}`);
@@ -176,7 +176,7 @@ var InvalidPromptError = class extends Error {
176
176
  }
177
177
  };
178
178
 
179
- // ai-model-specification/errors/invalid-response-data-error.ts
179
+ // spec/errors/invalid-response-data-error.ts
180
180
  var InvalidResponseDataError = class extends Error {
181
181
  constructor({
182
182
  data,
@@ -199,14 +199,14 @@ var InvalidResponseDataError = class extends Error {
199
199
  }
200
200
  };
201
201
 
202
- // ai-model-specification/util/generate-id.ts
202
+ // spec/util/generate-id.ts
203
203
  var import_non_secure = require("nanoid/non-secure");
204
204
  var generateId = (0, import_non_secure.customAlphabet)(
205
205
  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
206
206
  7
207
207
  );
208
208
 
209
- // ai-model-specification/util/get-error-message.ts
209
+ // spec/util/get-error-message.ts
210
210
  function getErrorMessage(error) {
211
211
  if (error == null) {
212
212
  return "unknown error";
@@ -220,7 +220,7 @@ function getErrorMessage(error) {
220
220
  return JSON.stringify(error);
221
221
  }
222
222
 
223
- // ai-model-specification/errors/load-api-key-error.ts
223
+ // spec/errors/load-api-key-error.ts
224
224
  var LoadAPIKeyError = class extends Error {
225
225
  constructor({ message }) {
226
226
  super(message);
@@ -237,7 +237,7 @@ var LoadAPIKeyError = class extends Error {
237
237
  }
238
238
  };
239
239
 
240
- // ai-model-specification/util/load-api-key.ts
240
+ // spec/util/load-api-key.ts
241
241
  function loadApiKey({
242
242
  apiKey,
243
243
  environmentVariableName,
@@ -271,10 +271,10 @@ function loadApiKey({
271
271
  return apiKey;
272
272
  }
273
273
 
274
- // ai-model-specification/util/parse-json.ts
274
+ // spec/util/parse-json.ts
275
275
  var import_secure_json_parse = __toESM(require("secure-json-parse"));
276
276
 
277
- // ai-model-specification/errors/json-parse-error.ts
277
+ // spec/errors/json-parse-error.ts
278
278
  var JSONParseError = class extends Error {
279
279
  constructor({ text, cause }) {
280
280
  super(
@@ -299,7 +299,7 @@ Error message: ${getErrorMessage(cause)}`
299
299
  }
300
300
  };
301
301
 
302
- // ai-model-specification/errors/type-validation-error.ts
302
+ // spec/errors/type-validation-error.ts
303
303
  var TypeValidationError = class extends Error {
304
304
  constructor({ value, cause }) {
305
305
  super(
@@ -324,7 +324,7 @@ Error message: ${getErrorMessage(cause)}`
324
324
  }
325
325
  };
326
326
 
327
- // ai-model-specification/util/validate-types.ts
327
+ // spec/util/validate-types.ts
328
328
  function validateTypes({
329
329
  value,
330
330
  schema
@@ -362,7 +362,7 @@ function safeValidateTypes({
362
362
  }
363
363
  }
364
364
 
365
- // ai-model-specification/util/parse-json.ts
365
+ // spec/util/parse-json.ts
366
366
  function parseJSON({
367
367
  text,
368
368
  schema
@@ -409,7 +409,7 @@ function isParseableJson(input) {
409
409
  }
410
410
  }
411
411
 
412
- // ai-model-specification/util/post-to-api.ts
412
+ // spec/util/post-to-api.ts
413
413
  var postJsonToApi = async ({
414
414
  url,
415
415
  headers,
@@ -514,10 +514,10 @@ var postToApi = async ({
514
514
  }
515
515
  };
516
516
 
517
- // ai-model-specification/util/response-handler.ts
517
+ // spec/util/response-handler.ts
518
518
  var import_stream = require("eventsource-parser/stream");
519
519
 
520
- // ai-model-specification/errors/no-response-body-error.ts
520
+ // spec/errors/no-response-body-error.ts
521
521
  var NoResponseBodyError = class extends Error {
522
522
  constructor({ message = "No response body" } = {}) {
523
523
  super(message);
@@ -535,7 +535,7 @@ var NoResponseBodyError = class extends Error {
535
535
  }
536
536
  };
537
537
 
538
- // ai-model-specification/util/response-handler.ts
538
+ // spec/util/response-handler.ts
539
539
  var createJsonErrorResponseHandler = ({
540
540
  errorSchema,
541
541
  errorToMessage,
@@ -616,7 +616,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
616
616
  return parsedResult.value;
617
617
  };
618
618
 
619
- // ai-model-specification/util/scale.ts
619
+ // spec/util/scale.ts
620
620
  function scale({
621
621
  inputMin = 0,
622
622
  inputMax = 1,
@@ -632,7 +632,7 @@ function scale({
632
632
  return (value - inputMin) * outputRange / inputRange + outputMin;
633
633
  }
634
634
 
635
- // ai-model-specification/util/uint8-utils.ts
635
+ // spec/util/uint8-utils.ts
636
636
  function convertBase64ToUint8Array(base64String) {
637
637
  const base64Url = base64String.replace(/-/g, "+").replace(/_/g, "/");
638
638
  const latin1string = globalThis.atob(base64Url);
@@ -646,7 +646,7 @@ function convertUint8ArrayToBase64(array) {
646
646
  return globalThis.btoa(latin1string);
647
647
  }
648
648
 
649
- // ai-model-specification/errors/invalid-tool-arguments-error.ts
649
+ // spec/errors/invalid-tool-arguments-error.ts
650
650
  var InvalidToolArgumentsError = class extends Error {
651
651
  constructor({
652
652
  toolArgs,
@@ -677,7 +677,7 @@ var InvalidToolArgumentsError = class extends Error {
677
677
  }
678
678
  };
679
679
 
680
- // ai-model-specification/errors/no-object-generated-error.ts
680
+ // spec/errors/no-object-generated-error.ts
681
681
  var NoTextGeneratedError = class extends Error {
682
682
  constructor() {
683
683
  super(`No text generated.`);
@@ -696,7 +696,7 @@ var NoTextGeneratedError = class extends Error {
696
696
  }
697
697
  };
698
698
 
699
- // ai-model-specification/errors/no-such-tool-error.ts
699
+ // spec/errors/no-such-tool-error.ts
700
700
  var NoSuchToolError = class extends Error {
701
701
  constructor({ message, toolName }) {
702
702
  super(message);
@@ -716,7 +716,7 @@ var NoSuchToolError = class extends Error {
716
716
  }
717
717
  };
718
718
 
719
- // ai-model-specification/errors/retry-error.ts
719
+ // spec/errors/retry-error.ts
720
720
  var RetryError = class extends Error {
721
721
  constructor({
722
722
  message,
@@ -743,7 +743,7 @@ var RetryError = class extends Error {
743
743
  }
744
744
  };
745
745
 
746
- // ai-model-specification/errors/unsupported-functionality-error.ts
746
+ // spec/errors/unsupported-functionality-error.ts
747
747
  var UnsupportedFunctionalityError = class extends Error {
748
748
  constructor({
749
749
  provider,
@@ -1,4 +1,4 @@
1
- // ai-model-specification/errors/api-call-error.ts
1
+ // spec/errors/api-call-error.ts
2
2
  var APICallError = class extends Error {
3
3
  constructor({
4
4
  message,
@@ -42,7 +42,7 @@ var APICallError = class extends Error {
42
42
  }
43
43
  };
44
44
 
45
- // ai-model-specification/errors/invalid-argument-error.ts
45
+ // spec/errors/invalid-argument-error.ts
46
46
  var InvalidArgumentError = class extends Error {
47
47
  constructor({
48
48
  parameter,
@@ -68,7 +68,7 @@ var InvalidArgumentError = class extends Error {
68
68
  }
69
69
  };
70
70
 
71
- // ai-model-specification/errors/invalid-data-content-error.ts
71
+ // spec/errors/invalid-data-content-error.ts
72
72
  var InvalidDataContentError = class extends Error {
73
73
  constructor({
74
74
  content,
@@ -91,7 +91,7 @@ var InvalidDataContentError = class extends Error {
91
91
  }
92
92
  };
93
93
 
94
- // ai-model-specification/errors/invalid-prompt-error.ts
94
+ // spec/errors/invalid-prompt-error.ts
95
95
  var InvalidPromptError = class extends Error {
96
96
  constructor({ prompt: prompt2, message }) {
97
97
  super(`Invalid prompt: ${message}`);
@@ -111,7 +111,7 @@ var InvalidPromptError = class extends Error {
111
111
  }
112
112
  };
113
113
 
114
- // ai-model-specification/errors/invalid-response-data-error.ts
114
+ // spec/errors/invalid-response-data-error.ts
115
115
  var InvalidResponseDataError = class extends Error {
116
116
  constructor({
117
117
  data,
@@ -134,14 +134,14 @@ var InvalidResponseDataError = class extends Error {
134
134
  }
135
135
  };
136
136
 
137
- // ai-model-specification/util/generate-id.ts
137
+ // spec/util/generate-id.ts
138
138
  import { customAlphabet } from "nanoid/non-secure";
139
139
  var generateId = customAlphabet(
140
140
  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
141
141
  7
142
142
  );
143
143
 
144
- // ai-model-specification/util/get-error-message.ts
144
+ // spec/util/get-error-message.ts
145
145
  function getErrorMessage(error) {
146
146
  if (error == null) {
147
147
  return "unknown error";
@@ -155,7 +155,7 @@ function getErrorMessage(error) {
155
155
  return JSON.stringify(error);
156
156
  }
157
157
 
158
- // ai-model-specification/errors/load-api-key-error.ts
158
+ // spec/errors/load-api-key-error.ts
159
159
  var LoadAPIKeyError = class extends Error {
160
160
  constructor({ message }) {
161
161
  super(message);
@@ -172,7 +172,7 @@ var LoadAPIKeyError = class extends Error {
172
172
  }
173
173
  };
174
174
 
175
- // ai-model-specification/util/load-api-key.ts
175
+ // spec/util/load-api-key.ts
176
176
  function loadApiKey({
177
177
  apiKey,
178
178
  environmentVariableName,
@@ -206,10 +206,10 @@ function loadApiKey({
206
206
  return apiKey;
207
207
  }
208
208
 
209
- // ai-model-specification/util/parse-json.ts
209
+ // spec/util/parse-json.ts
210
210
  import SecureJSON from "secure-json-parse";
211
211
 
212
- // ai-model-specification/errors/json-parse-error.ts
212
+ // spec/errors/json-parse-error.ts
213
213
  var JSONParseError = class extends Error {
214
214
  constructor({ text, cause }) {
215
215
  super(
@@ -234,7 +234,7 @@ Error message: ${getErrorMessage(cause)}`
234
234
  }
235
235
  };
236
236
 
237
- // ai-model-specification/errors/type-validation-error.ts
237
+ // spec/errors/type-validation-error.ts
238
238
  var TypeValidationError = class extends Error {
239
239
  constructor({ value, cause }) {
240
240
  super(
@@ -259,7 +259,7 @@ Error message: ${getErrorMessage(cause)}`
259
259
  }
260
260
  };
261
261
 
262
- // ai-model-specification/util/validate-types.ts
262
+ // spec/util/validate-types.ts
263
263
  function validateTypes({
264
264
  value,
265
265
  schema
@@ -297,7 +297,7 @@ function safeValidateTypes({
297
297
  }
298
298
  }
299
299
 
300
- // ai-model-specification/util/parse-json.ts
300
+ // spec/util/parse-json.ts
301
301
  function parseJSON({
302
302
  text,
303
303
  schema
@@ -344,7 +344,7 @@ function isParseableJson(input) {
344
344
  }
345
345
  }
346
346
 
347
- // ai-model-specification/util/post-to-api.ts
347
+ // spec/util/post-to-api.ts
348
348
  var postJsonToApi = async ({
349
349
  url,
350
350
  headers,
@@ -449,12 +449,12 @@ var postToApi = async ({
449
449
  }
450
450
  };
451
451
 
452
- // ai-model-specification/util/response-handler.ts
452
+ // spec/util/response-handler.ts
453
453
  import {
454
454
  EventSourceParserStream
455
455
  } from "eventsource-parser/stream";
456
456
 
457
- // ai-model-specification/errors/no-response-body-error.ts
457
+ // spec/errors/no-response-body-error.ts
458
458
  var NoResponseBodyError = class extends Error {
459
459
  constructor({ message = "No response body" } = {}) {
460
460
  super(message);
@@ -472,7 +472,7 @@ var NoResponseBodyError = class extends Error {
472
472
  }
473
473
  };
474
474
 
475
- // ai-model-specification/util/response-handler.ts
475
+ // spec/util/response-handler.ts
476
476
  var createJsonErrorResponseHandler = ({
477
477
  errorSchema,
478
478
  errorToMessage,
@@ -553,7 +553,7 @@ var createJsonResponseHandler = (responseSchema) => async ({ response, url, requ
553
553
  return parsedResult.value;
554
554
  };
555
555
 
556
- // ai-model-specification/util/scale.ts
556
+ // spec/util/scale.ts
557
557
  function scale({
558
558
  inputMin = 0,
559
559
  inputMax = 1,
@@ -569,7 +569,7 @@ function scale({
569
569
  return (value - inputMin) * outputRange / inputRange + outputMin;
570
570
  }
571
571
 
572
- // ai-model-specification/util/uint8-utils.ts
572
+ // spec/util/uint8-utils.ts
573
573
  function convertBase64ToUint8Array(base64String) {
574
574
  const base64Url = base64String.replace(/-/g, "+").replace(/_/g, "/");
575
575
  const latin1string = globalThis.atob(base64Url);
@@ -583,7 +583,7 @@ function convertUint8ArrayToBase64(array) {
583
583
  return globalThis.btoa(latin1string);
584
584
  }
585
585
 
586
- // ai-model-specification/errors/invalid-tool-arguments-error.ts
586
+ // spec/errors/invalid-tool-arguments-error.ts
587
587
  var InvalidToolArgumentsError = class extends Error {
588
588
  constructor({
589
589
  toolArgs,
@@ -614,7 +614,7 @@ var InvalidToolArgumentsError = class extends Error {
614
614
  }
615
615
  };
616
616
 
617
- // ai-model-specification/errors/no-object-generated-error.ts
617
+ // spec/errors/no-object-generated-error.ts
618
618
  var NoTextGeneratedError = class extends Error {
619
619
  constructor() {
620
620
  super(`No text generated.`);
@@ -633,7 +633,7 @@ var NoTextGeneratedError = class extends Error {
633
633
  }
634
634
  };
635
635
 
636
- // ai-model-specification/errors/no-such-tool-error.ts
636
+ // spec/errors/no-such-tool-error.ts
637
637
  var NoSuchToolError = class extends Error {
638
638
  constructor({ message, toolName }) {
639
639
  super(message);
@@ -653,7 +653,7 @@ var NoSuchToolError = class extends Error {
653
653
  }
654
654
  };
655
655
 
656
- // ai-model-specification/errors/retry-error.ts
656
+ // spec/errors/retry-error.ts
657
657
  var RetryError = class extends Error {
658
658
  constructor({
659
659
  message,
@@ -680,7 +680,7 @@ var RetryError = class extends Error {
680
680
  }
681
681
  };
682
682
 
683
- // ai-model-specification/errors/unsupported-functionality-error.ts
683
+ // spec/errors/unsupported-functionality-error.ts
684
684
  var UnsupportedFunctionalityError = class extends Error {
685
685
  constructor({
686
686
  provider,