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.
- package/dist/index.d.mts +375 -56
- package/dist/index.d.ts +375 -56
- package/dist/index.js +195 -135
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +195 -135
- package/dist/index.mjs.map +1 -1
- package/mistral/dist/index.d.mts +4 -1
- package/mistral/dist/index.d.ts +4 -1
- package/mistral/dist/index.js +15 -15
- package/mistral/dist/index.js.map +1 -1
- package/mistral/dist/index.mjs +15 -15
- package/mistral/dist/index.mjs.map +1 -1
- package/openai/dist/index.d.mts +4 -0
- package/openai/dist/index.d.ts +4 -0
- package/openai/dist/index.js +19 -19
- package/openai/dist/index.js.map +1 -1
- package/openai/dist/index.mjs +19 -19
- package/openai/dist/index.mjs.map +1 -1
- package/package.json +8 -8
- package/rsc/dist/index.d.ts +21 -3
- package/rsc/dist/rsc-client.d.mts +1 -1
- package/rsc/dist/rsc-client.mjs +2 -0
- package/rsc/dist/rsc-client.mjs.map +1 -1
- package/rsc/dist/rsc-server.d.mts +2 -2
- package/rsc/dist/rsc-server.mjs +1 -1
- package/rsc/dist/rsc-server.mjs.map +1 -1
- package/rsc/dist/rsc-shared.d.mts +20 -2
- package/rsc/dist/rsc-shared.mjs +75 -2
- package/rsc/dist/rsc-shared.mjs.map +1 -1
- package/{ai-model-specification → spec}/dist/index.d.mts +4 -0
- package/{ai-model-specification → spec}/dist/index.d.ts +4 -0
- package/{ai-model-specification → spec}/dist/index.js +29 -29
- package/{ai-model-specification → spec}/dist/index.mjs +25 -25
- /package/{ai-model-specification → spec}/dist/index.js.map +0 -0
- /package/{ai-model-specification → spec}/dist/index.mjs.map +0 -0
package/rsc/dist/rsc-shared.mjs
CHANGED
@@ -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 (!
|
15
|
+
if (!hasReadableValueSignature(value)) {
|
10
16
|
throw new Error(
|
11
|
-
"Invalid value: this hook only accepts values created via `createStreamableValue
|
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
|
-
//
|
31
|
-
var
|
32
|
-
__export(
|
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(
|
64
|
+
module.exports = __toCommonJS(spec_exports);
|
65
65
|
|
66
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
274
|
+
// spec/util/parse-json.ts
|
275
275
|
var import_secure_json_parse = __toESM(require("secure-json-parse"));
|
276
276
|
|
277
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
517
|
+
// spec/util/response-handler.ts
|
518
518
|
var import_stream = require("eventsource-parser/stream");
|
519
519
|
|
520
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
209
|
+
// spec/util/parse-json.ts
|
210
210
|
import SecureJSON from "secure-json-parse";
|
211
211
|
|
212
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
452
|
+
// spec/util/response-handler.ts
|
453
453
|
import {
|
454
454
|
EventSourceParserStream
|
455
455
|
} from "eventsource-parser/stream";
|
456
456
|
|
457
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
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
|
-
//
|
683
|
+
// spec/errors/unsupported-functionality-error.ts
|
684
684
|
var UnsupportedFunctionalityError = class extends Error {
|
685
685
|
constructor({
|
686
686
|
provider,
|
File without changes
|
File without changes
|