@assistant-ui/react 0.8.15 → 0.8.17
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/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +2 -2
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js.map +1 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs +1 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs.map +1 -1
- package/dist/runtimes/edge/{EdgeChatAdapter.d.ts → EdgeModelAdapter.d.ts} +4 -4
- package/dist/runtimes/edge/EdgeModelAdapter.d.ts.map +1 -0
- package/dist/runtimes/edge/{EdgeChatAdapter.js → EdgeModelAdapter.js} +8 -8
- package/dist/runtimes/edge/EdgeModelAdapter.js.map +1 -0
- package/dist/runtimes/edge/{EdgeChatAdapter.mjs → EdgeModelAdapter.mjs} +4 -4
- package/dist/runtimes/edge/EdgeModelAdapter.mjs.map +1 -0
- package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts.map +1 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js +1 -0
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js.map +1 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs +1 -0
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs.map +1 -1
- package/dist/runtimes/edge/index.d.ts +2 -1
- package/dist/runtimes/edge/index.d.ts.map +1 -1
- package/dist/runtimes/edge/index.js +5 -2
- package/dist/runtimes/edge/index.js.map +1 -1
- package/dist/runtimes/edge/index.mjs +4 -2
- package/dist/runtimes/edge/index.mjs.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.d.ts +2 -1
- package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.js +60 -21
- package/dist/runtimes/edge/streams/toolResultStream.js.map +1 -1
- package/dist/runtimes/edge/streams/toolResultStream.mjs +58 -20
- package/dist/runtimes/edge/streams/toolResultStream.mjs.map +1 -1
- package/dist/runtimes/edge/useEdgeRuntime.d.ts +2 -2
- package/dist/runtimes/edge/useEdgeRuntime.d.ts.map +1 -1
- package/dist/runtimes/edge/useEdgeRuntime.js +2 -2
- package/dist/runtimes/edge/useEdgeRuntime.js.map +1 -1
- package/dist/runtimes/edge/useEdgeRuntime.mjs +2 -2
- package/dist/runtimes/edge/useEdgeRuntime.mjs.map +1 -1
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +3 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -1
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs +3 -0
- package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs.map +1 -1
- package/dist/runtimes/utils/MessageRepository.d.ts +112 -0
- package/dist/runtimes/utils/MessageRepository.d.ts.map +1 -1
- package/dist/runtimes/utils/MessageRepository.js +103 -1
- package/dist/runtimes/utils/MessageRepository.js.map +1 -1
- package/dist/runtimes/utils/MessageRepository.mjs +103 -1
- package/dist/runtimes/utils/MessageRepository.mjs.map +1 -1
- package/dist/tests/MessageRepository.test.d.ts +2 -0
- package/dist/tests/MessageRepository.test.d.ts.map +1 -0
- package/dist/tests/setup.d.ts +2 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.js +2656 -0
- package/dist/tests/setup.js.map +1 -0
- package/dist/tests/setup.mjs +2632 -0
- package/dist/tests/setup.mjs.map +1 -0
- package/dist/types/AssistantTypes.d.ts +1 -1
- package/dist/types/AssistantTypes.d.ts.map +1 -1
- package/dist/types/AssistantTypes.js.map +1 -1
- package/package.json +12 -6
- package/src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts +1 -1
- package/src/runtimes/edge/{EdgeChatAdapter.ts → EdgeModelAdapter.ts} +3 -3
- package/src/runtimes/edge/converters/toLanguageModelMessages.ts +3 -1
- package/src/runtimes/edge/index.ts +3 -1
- package/src/runtimes/edge/streams/toolResultStream.ts +76 -27
- package/src/runtimes/edge/useEdgeRuntime.ts +3 -3
- package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +4 -0
- package/src/runtimes/utils/MessageRepository.tsx +142 -1
- package/src/tests/MessageRepository.test.ts +690 -0
- package/src/tests/setup.ts +11 -0
- package/src/types/AssistantTypes.ts +1 -1
- package/dist/runtimes/edge/EdgeChatAdapter.d.ts.map +0 -1
- package/dist/runtimes/edge/EdgeChatAdapter.js.map +0 -1
- package/dist/runtimes/edge/EdgeChatAdapter.mjs.map +0 -1
@@ -26,7 +26,7 @@ module.exports = __toCommonJS(DangerousInBrowserAdapter_exports);
|
|
26
26
|
var import_toCoreMessages = require("../edge/converters/toCoreMessages.js");
|
27
27
|
var import_toLanguageModelTools = require("../edge/converters/toLanguageModelTools.js");
|
28
28
|
var import_toolResultStream = require("../edge/streams/toolResultStream.js");
|
29
|
-
var
|
29
|
+
var import_EdgeModelAdapter = require("../edge/EdgeModelAdapter.js");
|
30
30
|
var import_createEdgeRuntimeAPI = require("../edge/createEdgeRuntimeAPI.js");
|
31
31
|
var import_assistant_stream = require("assistant-stream");
|
32
32
|
var DangerousInBrowserAdapter = class {
|
@@ -46,7 +46,7 @@ var DangerousInBrowserAdapter = class {
|
|
46
46
|
}
|
47
47
|
});
|
48
48
|
const stream = res.pipeThrough((0, import_toolResultStream.toolResultStream)(context.tools, abortSignal)).pipeThrough(new import_assistant_stream.AssistantMessageAccumulator());
|
49
|
-
for await (const update of (0,
|
49
|
+
for await (const update of (0, import_EdgeModelAdapter.asAsyncIterable)(stream)) {
|
50
50
|
yield update;
|
51
51
|
}
|
52
52
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts"],"sourcesContent":["import {\n ChatModelAdapter,\n ChatModelRunOptions,\n} from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"../edge/converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"../edge/converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"../edge/EdgeRuntimeRequestOptions\";\nimport { toolResultStream } from \"../edge/streams/toolResultStream\";\nimport { asAsyncIterable } from \"../edge/
|
1
|
+
{"version":3,"sources":["../../../src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts"],"sourcesContent":["import {\n ChatModelAdapter,\n ChatModelRunOptions,\n} from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"../edge/converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"../edge/converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"../edge/EdgeRuntimeRequestOptions\";\nimport { toolResultStream } from \"../edge/streams/toolResultStream\";\nimport { asAsyncIterable } from \"../edge/EdgeModelAdapter\";\nimport {\n CreateEdgeRuntimeAPIOptions,\n getEdgeRuntimeStream,\n} from \"../edge/createEdgeRuntimeAPI\";\nimport { AssistantMessageAccumulator } from \"assistant-stream\";\n\nexport type DangerousInBrowserAdapterOptions = CreateEdgeRuntimeAPIOptions;\n\nexport class DangerousInBrowserAdapter implements ChatModelAdapter {\n constructor(private options: DangerousInBrowserAdapterOptions) {}\n\n async *run({ messages, abortSignal, context }: ChatModelRunOptions) {\n const res = await getEdgeRuntimeStream({\n options: this.options,\n abortSignal,\n requestData: {\n system: context.system,\n messages: toCoreMessages(messages),\n tools: context.tools ? toLanguageModelTools(context.tools) : [],\n ...context.callSettings,\n ...context.config,\n } satisfies EdgeRuntimeRequestOptions,\n });\n\n const stream = res\n .pipeThrough(toolResultStream(context.tools, abortSignal))\n .pipeThrough(new AssistantMessageAccumulator());\n\n for await (const update of asAsyncIterable(stream)) {\n yield update;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,4BAA+B;AAC/B,kCAAqC;AAErC,8BAAiC;AACjC,8BAAgC;AAChC,kCAGO;AACP,8BAA4C;AAIrC,IAAM,4BAAN,MAA4D;AAAA,EACjE,YAAoB,SAA2C;AAA3C;AAAA,EAA4C;AAAA,EAEhE,OAAO,IAAI,EAAE,UAAU,aAAa,QAAQ,GAAwB;AAClE,UAAM,MAAM,UAAM,kDAAqB;AAAA,MACrC,SAAS,KAAK;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,QAAQ,QAAQ;AAAA,QAChB,cAAU,sCAAe,QAAQ;AAAA,QACjC,OAAO,QAAQ,YAAQ,kDAAqB,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC9D,GAAG,QAAQ;AAAA,QACX,GAAG,QAAQ;AAAA,MACb;AAAA,IACF,CAAC;AAED,UAAM,SAAS,IACZ,gBAAY,0CAAiB,QAAQ,OAAO,WAAW,CAAC,EACxD,YAAY,IAAI,oDAA4B,CAAC;AAEhD,qBAAiB,cAAU,yCAAgB,MAAM,GAAG;AAClD,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
import { toCoreMessages } from "../edge/converters/toCoreMessages.mjs";
|
3
3
|
import { toLanguageModelTools } from "../edge/converters/toLanguageModelTools.mjs";
|
4
4
|
import { toolResultStream } from "../edge/streams/toolResultStream.mjs";
|
5
|
-
import { asAsyncIterable } from "../edge/
|
5
|
+
import { asAsyncIterable } from "../edge/EdgeModelAdapter.mjs";
|
6
6
|
import {
|
7
7
|
getEdgeRuntimeStream
|
8
8
|
} from "../edge/createEdgeRuntimeAPI.mjs";
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts"],"sourcesContent":["import {\n ChatModelAdapter,\n ChatModelRunOptions,\n} from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"../edge/converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"../edge/converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"../edge/EdgeRuntimeRequestOptions\";\nimport { toolResultStream } from \"../edge/streams/toolResultStream\";\nimport { asAsyncIterable } from \"../edge/
|
1
|
+
{"version":3,"sources":["../../../src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts"],"sourcesContent":["import {\n ChatModelAdapter,\n ChatModelRunOptions,\n} from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"../edge/converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"../edge/converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"../edge/EdgeRuntimeRequestOptions\";\nimport { toolResultStream } from \"../edge/streams/toolResultStream\";\nimport { asAsyncIterable } from \"../edge/EdgeModelAdapter\";\nimport {\n CreateEdgeRuntimeAPIOptions,\n getEdgeRuntimeStream,\n} from \"../edge/createEdgeRuntimeAPI\";\nimport { AssistantMessageAccumulator } from \"assistant-stream\";\n\nexport type DangerousInBrowserAdapterOptions = CreateEdgeRuntimeAPIOptions;\n\nexport class DangerousInBrowserAdapter implements ChatModelAdapter {\n constructor(private options: DangerousInBrowserAdapterOptions) {}\n\n async *run({ messages, abortSignal, context }: ChatModelRunOptions) {\n const res = await getEdgeRuntimeStream({\n options: this.options,\n abortSignal,\n requestData: {\n system: context.system,\n messages: toCoreMessages(messages),\n tools: context.tools ? toLanguageModelTools(context.tools) : [],\n ...context.callSettings,\n ...context.config,\n } satisfies EdgeRuntimeRequestOptions,\n });\n\n const stream = res\n .pipeThrough(toolResultStream(context.tools, abortSignal))\n .pipeThrough(new AssistantMessageAccumulator());\n\n for await (const update of asAsyncIterable(stream)) {\n yield update;\n }\n }\n}\n"],"mappings":";AAIA,SAAS,sBAAsB;AAC/B,SAAS,4BAA4B;AAErC,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC;AAAA,EAEE;AAAA,OACK;AACP,SAAS,mCAAmC;AAIrC,IAAM,4BAAN,MAA4D;AAAA,EACjE,YAAoB,SAA2C;AAA3C;AAAA,EAA4C;AAAA,EAEhE,OAAO,IAAI,EAAE,UAAU,aAAa,QAAQ,GAAwB;AAClE,UAAM,MAAM,MAAM,qBAAqB;AAAA,MACrC,SAAS,KAAK;AAAA,MACd;AAAA,MACA,aAAa;AAAA,QACX,QAAQ,QAAQ;AAAA,QAChB,UAAU,eAAe,QAAQ;AAAA,QACjC,OAAO,QAAQ,QAAQ,qBAAqB,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC9D,GAAG,QAAQ;AAAA,QACX,GAAG,QAAQ;AAAA,MACb;AAAA,IACF,CAAC;AAED,UAAM,SAAS,IACZ,YAAY,iBAAiB,QAAQ,OAAO,WAAW,CAAC,EACxD,YAAY,IAAI,4BAA4B,CAAC;AAEhD,qBAAiB,UAAU,gBAAgB,MAAM,GAAG;AAClD,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
|
@@ -2,7 +2,7 @@ import { ChatModelAdapter, ChatModelRunOptions } from "../local/ChatModelAdapter
|
|
2
2
|
import { ThreadMessage } from "../../types";
|
3
3
|
export declare function asAsyncIterable<T>(source: ReadableStream<T>): AsyncIterable<T>;
|
4
4
|
type HeadersValue = Record<string, string> | Headers;
|
5
|
-
export type
|
5
|
+
export type EdgeModelAdapterOptions = {
|
6
6
|
api: string;
|
7
7
|
/**
|
8
8
|
* Callback function to be called when the API response is received.
|
@@ -39,10 +39,10 @@ export type EdgeChatAdapterOptions = {
|
|
39
39
|
*/
|
40
40
|
unstable_AISDKInterop?: boolean | "v2" | undefined;
|
41
41
|
};
|
42
|
-
export declare class
|
42
|
+
export declare class EdgeModelAdapter implements ChatModelAdapter {
|
43
43
|
private options;
|
44
|
-
constructor(options:
|
44
|
+
constructor(options: EdgeModelAdapterOptions);
|
45
45
|
run({ messages, runConfig, abortSignal, context, unstable_assistantMessageId, unstable_getMessage, }: ChatModelRunOptions): AsyncGenerator<import("assistant-stream").AssistantMessage, void, unknown>;
|
46
46
|
}
|
47
47
|
export {};
|
48
|
-
//# sourceMappingURL=
|
48
|
+
//# sourceMappingURL=EdgeModelAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EdgeModelAdapter.d.ts","sourceRoot":"","sources":["../../../src/runtimes/edge/EdgeModelAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C,wBAAgB,eAAe,CAAC,CAAC,EAC/B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,aAAa,CAAC,CAAC,CAAC,CAclB;AAED,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IAeZ;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAEjC;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;CACpD,CAAC;AAgBF,qBAAa,gBAAiB,YAAW,gBAAgB;IAC3C,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,uBAAuB;IAE7C,GAAG,CAAC,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,2BAA2B,EAC3B,mBAAmB,GACpB,EAAE,mBAAmB;CAkEvB"}
|
@@ -27,13 +27,13 @@ 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
|
-
// src/runtimes/edge/
|
31
|
-
var
|
32
|
-
__export(
|
33
|
-
|
30
|
+
// src/runtimes/edge/EdgeModelAdapter.ts
|
31
|
+
var EdgeModelAdapter_exports = {};
|
32
|
+
__export(EdgeModelAdapter_exports, {
|
33
|
+
EdgeModelAdapter: () => EdgeModelAdapter,
|
34
34
|
asAsyncIterable: () => asAsyncIterable
|
35
35
|
});
|
36
|
-
module.exports = __toCommonJS(
|
36
|
+
module.exports = __toCommonJS(EdgeModelAdapter_exports);
|
37
37
|
var import_toCoreMessages = require("./converters/toCoreMessages.js");
|
38
38
|
var import_toLanguageModelTools = require("./converters/toLanguageModelTools.js");
|
39
39
|
var import_toolResultStream = require("./streams/toolResultStream.js");
|
@@ -65,7 +65,7 @@ var toAISDKTools = (tools) => {
|
|
65
65
|
])
|
66
66
|
);
|
67
67
|
};
|
68
|
-
var
|
68
|
+
var EdgeModelAdapter = class {
|
69
69
|
constructor(options) {
|
70
70
|
this.options = options;
|
71
71
|
}
|
@@ -121,7 +121,7 @@ var EdgeChatAdapter = class {
|
|
121
121
|
};
|
122
122
|
// Annotate the CommonJS export names for ESM import in node:
|
123
123
|
0 && (module.exports = {
|
124
|
-
|
124
|
+
EdgeModelAdapter,
|
125
125
|
asAsyncIterable
|
126
126
|
});
|
127
|
-
//# sourceMappingURL=
|
127
|
+
//# sourceMappingURL=EdgeModelAdapter.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/runtimes/edge/EdgeModelAdapter.ts"],"sourcesContent":["import {\n ChatModelAdapter,\n ChatModelRunOptions,\n} from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"./converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"./converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"./EdgeRuntimeRequestOptions\";\nimport { toolResultStream } from \"./streams/toolResultStream\";\nimport { toLanguageModelMessages } from \"./converters\";\nimport { ThreadMessage } from \"../../types\";\nimport { Tool } from \"../../model-context\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { JSONSchema7 } from \"json-schema\";\nimport {\n AssistantMessageAccumulator,\n DataStreamDecoder,\n} from \"assistant-stream\";\n\nexport function asAsyncIterable<T>(\n source: ReadableStream<T>,\n): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator]: () => {\n const reader = source.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done\n ? { done: true, value: undefined }\n : { done: false, value };\n },\n };\n },\n };\n}\n\ntype HeadersValue = Record<string, string> | Headers;\n\nexport type EdgeModelAdapterOptions = {\n api: string;\n\n // experimental_prepareRequestBody?: (options: {\n // id: string;\n // messages: UIMessage[];\n // requestData?: JSONValue;\n // requestBody?: object;\n // }) => unknown;\n\n // onToolCall?: ({\n // toolCall,\n // }: {\n // toolCall: UIMessageToolInvocation;\n // }) => void | Promise<unknown> | unknown;\n\n /**\n * Callback function to be called when the API response is received.\n */\n onResponse?: (response: Response) => void | Promise<void>;\n /**\n * Optional callback function that is called when the assistant message is finished streaming.\n */\n onFinish?: (message: ThreadMessage) => void;\n /**\n * Callback function to be called when an error is encountered.\n */\n onError?: (error: Error) => void;\n\n credentials?: RequestCredentials;\n\n /**\n * Headers to be sent with the request.\n * Can be a static headers object or a function that returns a Promise of headers.\n */\n headers?: HeadersValue | (() => Promise<HeadersValue>);\n\n body?: object;\n\n /**\n * @deprecated Renamed to `sendExtraMessageFields`.\n */\n unstable_sendMessageIds?: boolean;\n\n /**\n * When enabled, the adapter will not strip `id` from messages in the messages array.\n */\n sendExtraMessageFields?: boolean;\n\n /**\n * When enabled, the adapter will send messages in the format expected by the Vercel AI SDK Core.\n * This feature will be removed in the future in favor of a better solution.\n *\n * `v2` sends frontend tools in a format that can be directly passed to `stremaText`\n */\n unstable_AISDKInterop?: boolean | \"v2\" | undefined;\n};\n\nconst toAISDKTools = (tools: Record<string, Tool<any, any>>) => {\n return Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: (tool.parameters instanceof z.ZodType\n ? zodToJsonSchema(tool.parameters)\n : tool.parameters) as JSONSchema7,\n },\n ]),\n );\n};\n\nexport class EdgeModelAdapter implements ChatModelAdapter {\n constructor(private options: EdgeModelAdapterOptions) {}\n\n async *run({\n messages,\n runConfig,\n abortSignal,\n context,\n unstable_assistantMessageId,\n unstable_getMessage,\n }: ChatModelRunOptions) {\n const headersValue =\n typeof this.options.headers === \"function\"\n ? await this.options.headers()\n : this.options.headers;\n\n const headers = new Headers(headersValue);\n headers.set(\"Content-Type\", \"application/json\");\n\n const result = await fetch(this.options.api, {\n method: \"POST\",\n headers,\n credentials: this.options.credentials ?? \"same-origin\",\n body: JSON.stringify({\n system: context.system,\n messages: this.options.unstable_AISDKInterop\n ? (toLanguageModelMessages(messages, {\n unstable_includeId:\n this.options.unstable_sendMessageIds ||\n this.options.sendExtraMessageFields,\n }) as EdgeRuntimeRequestOptions[\"messages\"]) // TODO figure out a better way to do this\n : toCoreMessages(messages, {\n unstable_includeId:\n this.options.unstable_sendMessageIds ||\n this.options.sendExtraMessageFields,\n }),\n tools: context.tools\n ? this.options.unstable_AISDKInterop === \"v2\"\n ? (toAISDKTools(context.tools) as any)\n : toLanguageModelTools(context.tools)\n : [],\n unstable_assistantMessageId,\n runConfig,\n ...context.callSettings,\n ...context.config,\n\n ...this.options.body,\n } satisfies EdgeRuntimeRequestOptions),\n signal: abortSignal,\n });\n\n await this.options.onResponse?.(result);\n\n try {\n if (!result.ok) {\n throw new Error(`Status ${result.status}: ${await result.text()}`);\n }\n if (!result.body) {\n throw new Error(\"Response body is null\");\n }\n\n const stream = result.body\n .pipeThrough(new DataStreamDecoder())\n .pipeThrough(toolResultStream(context.tools, abortSignal))\n .pipeThrough(new AssistantMessageAccumulator());\n\n for await (const update of asAsyncIterable(stream)) {\n yield update;\n }\n\n this.options.onFinish?.(unstable_getMessage());\n } catch (error: unknown) {\n this.options.onError?.(error as Error);\n throw error;\n }\n }\n}\n"],"mappings":"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","names":["zodToJsonSchema"]}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// src/runtimes/edge/
|
1
|
+
// src/runtimes/edge/EdgeModelAdapter.ts
|
2
2
|
import { toCoreMessages } from "./converters/toCoreMessages.mjs";
|
3
3
|
import { toLanguageModelTools } from "./converters/toLanguageModelTools.mjs";
|
4
4
|
import { toolResultStream } from "./streams/toolResultStream.mjs";
|
@@ -33,7 +33,7 @@ var toAISDKTools = (tools) => {
|
|
33
33
|
])
|
34
34
|
);
|
35
35
|
};
|
36
|
-
var
|
36
|
+
var EdgeModelAdapter = class {
|
37
37
|
constructor(options) {
|
38
38
|
this.options = options;
|
39
39
|
}
|
@@ -88,7 +88,7 @@ var EdgeChatAdapter = class {
|
|
88
88
|
}
|
89
89
|
};
|
90
90
|
export {
|
91
|
-
|
91
|
+
EdgeModelAdapter,
|
92
92
|
asAsyncIterable
|
93
93
|
};
|
94
|
-
//# sourceMappingURL=
|
94
|
+
//# sourceMappingURL=EdgeModelAdapter.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/runtimes/edge/EdgeModelAdapter.ts"],"sourcesContent":["import {\n ChatModelAdapter,\n ChatModelRunOptions,\n} from \"../local/ChatModelAdapter\";\nimport { toCoreMessages } from \"./converters/toCoreMessages\";\nimport { toLanguageModelTools } from \"./converters/toLanguageModelTools\";\nimport { EdgeRuntimeRequestOptions } from \"./EdgeRuntimeRequestOptions\";\nimport { toolResultStream } from \"./streams/toolResultStream\";\nimport { toLanguageModelMessages } from \"./converters\";\nimport { ThreadMessage } from \"../../types\";\nimport { Tool } from \"../../model-context\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { JSONSchema7 } from \"json-schema\";\nimport {\n AssistantMessageAccumulator,\n DataStreamDecoder,\n} from \"assistant-stream\";\n\nexport function asAsyncIterable<T>(\n source: ReadableStream<T>,\n): AsyncIterable<T> {\n return {\n [Symbol.asyncIterator]: () => {\n const reader = source.getReader();\n return {\n async next(): Promise<IteratorResult<T, undefined>> {\n const { done, value } = await reader.read();\n return done\n ? { done: true, value: undefined }\n : { done: false, value };\n },\n };\n },\n };\n}\n\ntype HeadersValue = Record<string, string> | Headers;\n\nexport type EdgeModelAdapterOptions = {\n api: string;\n\n // experimental_prepareRequestBody?: (options: {\n // id: string;\n // messages: UIMessage[];\n // requestData?: JSONValue;\n // requestBody?: object;\n // }) => unknown;\n\n // onToolCall?: ({\n // toolCall,\n // }: {\n // toolCall: UIMessageToolInvocation;\n // }) => void | Promise<unknown> | unknown;\n\n /**\n * Callback function to be called when the API response is received.\n */\n onResponse?: (response: Response) => void | Promise<void>;\n /**\n * Optional callback function that is called when the assistant message is finished streaming.\n */\n onFinish?: (message: ThreadMessage) => void;\n /**\n * Callback function to be called when an error is encountered.\n */\n onError?: (error: Error) => void;\n\n credentials?: RequestCredentials;\n\n /**\n * Headers to be sent with the request.\n * Can be a static headers object or a function that returns a Promise of headers.\n */\n headers?: HeadersValue | (() => Promise<HeadersValue>);\n\n body?: object;\n\n /**\n * @deprecated Renamed to `sendExtraMessageFields`.\n */\n unstable_sendMessageIds?: boolean;\n\n /**\n * When enabled, the adapter will not strip `id` from messages in the messages array.\n */\n sendExtraMessageFields?: boolean;\n\n /**\n * When enabled, the adapter will send messages in the format expected by the Vercel AI SDK Core.\n * This feature will be removed in the future in favor of a better solution.\n *\n * `v2` sends frontend tools in a format that can be directly passed to `stremaText`\n */\n unstable_AISDKInterop?: boolean | \"v2\" | undefined;\n};\n\nconst toAISDKTools = (tools: Record<string, Tool<any, any>>) => {\n return Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: (tool.parameters instanceof z.ZodType\n ? zodToJsonSchema(tool.parameters)\n : tool.parameters) as JSONSchema7,\n },\n ]),\n );\n};\n\nexport class EdgeModelAdapter implements ChatModelAdapter {\n constructor(private options: EdgeModelAdapterOptions) {}\n\n async *run({\n messages,\n runConfig,\n abortSignal,\n context,\n unstable_assistantMessageId,\n unstable_getMessage,\n }: ChatModelRunOptions) {\n const headersValue =\n typeof this.options.headers === \"function\"\n ? await this.options.headers()\n : this.options.headers;\n\n const headers = new Headers(headersValue);\n headers.set(\"Content-Type\", \"application/json\");\n\n const result = await fetch(this.options.api, {\n method: \"POST\",\n headers,\n credentials: this.options.credentials ?? \"same-origin\",\n body: JSON.stringify({\n system: context.system,\n messages: this.options.unstable_AISDKInterop\n ? (toLanguageModelMessages(messages, {\n unstable_includeId:\n this.options.unstable_sendMessageIds ||\n this.options.sendExtraMessageFields,\n }) as EdgeRuntimeRequestOptions[\"messages\"]) // TODO figure out a better way to do this\n : toCoreMessages(messages, {\n unstable_includeId:\n this.options.unstable_sendMessageIds ||\n this.options.sendExtraMessageFields,\n }),\n tools: context.tools\n ? this.options.unstable_AISDKInterop === \"v2\"\n ? (toAISDKTools(context.tools) as any)\n : toLanguageModelTools(context.tools)\n : [],\n unstable_assistantMessageId,\n runConfig,\n ...context.callSettings,\n ...context.config,\n\n ...this.options.body,\n } satisfies EdgeRuntimeRequestOptions),\n signal: abortSignal,\n });\n\n await this.options.onResponse?.(result);\n\n try {\n if (!result.ok) {\n throw new Error(`Status ${result.status}: ${await result.text()}`);\n }\n if (!result.body) {\n throw new Error(\"Response body is null\");\n }\n\n const stream = result.body\n .pipeThrough(new DataStreamDecoder())\n .pipeThrough(toolResultStream(context.tools, abortSignal))\n .pipeThrough(new AssistantMessageAccumulator());\n\n for await (const update of asAsyncIterable(stream)) {\n yield update;\n }\n\n this.options.onFinish?.(unstable_getMessage());\n } catch (error: unknown) {\n this.options.onError?.(error as Error);\n throw error;\n }\n }\n}\n"],"mappings":"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","names":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"toLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,aAAa,
|
1
|
+
{"version":3,"file":"toLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,aAAa,EAId,MAAM,+BAA+B,CAAC;AAiEvC,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,aAAa,EAAE,EAC1D,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GACzD,sBAAsB,EAAE,CAqG1B"}
|
@@ -60,6 +60,7 @@ var assistantMessageSplitter = () => {
|
|
60
60
|
type: "tool-result",
|
61
61
|
toolCallId: part.toolCallId,
|
62
62
|
toolName: part.toolName,
|
63
|
+
..."artifact" in part ? { artifact: part.artifact } : {},
|
63
64
|
result: part.result === void 0 ? "Error: tool is has no configured code to run" : part.result,
|
64
65
|
isError: part.isError ?? part.result === void 0
|
65
66
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\":\n case \"file\": {\n break; // reasoning, source, and file parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n ToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart | ToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(\"artifact\" in part ? { artifact: part.artifact } : {}),\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\":\n case \"file\": {\n break; // reasoning, source, and file parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":"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","names":["message"]}
|
@@ -36,6 +36,7 @@ var assistantMessageSplitter = () => {
|
|
36
36
|
type: "tool-result",
|
37
37
|
toolCallId: part.toolCallId,
|
38
38
|
toolName: part.toolName,
|
39
|
+
..."artifact" in part ? { artifact: part.artifact } : {},
|
39
40
|
result: part.result === void 0 ? "Error: tool is has no configured code to run" : part.result,
|
40
41
|
isError: part.isError ?? part.result === void 0
|
41
42
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\":\n case \"file\": {\n break; // reasoning, source, and file parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":";
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n ToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart | ToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(\"artifact\" in part ? { artifact: part.artifact } : {}),\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\":\n case \"file\": {\n break; // reasoning, source, and file parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":"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","names":["message"]}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
export * from "./converters";
|
2
2
|
export { useEdgeRuntime, type EdgeRuntimeOptions } from "./useEdgeRuntime";
|
3
|
-
export { EdgeChatAdapter } from "./
|
3
|
+
export { EdgeModelAdapter as EdgeChatAdapter } from "./EdgeModelAdapter";
|
4
4
|
export type { EdgeRuntimeRequestOptions } from "./EdgeRuntimeRequestOptions";
|
5
|
+
export { unstable_runPendingTools } from "./streams/toolResultStream";
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/edge/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/edge/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,YAAY,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
|
@@ -21,16 +21,19 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
21
21
|
// src/runtimes/edge/index.ts
|
22
22
|
var edge_exports = {};
|
23
23
|
__export(edge_exports, {
|
24
|
-
EdgeChatAdapter: () =>
|
24
|
+
EdgeChatAdapter: () => import_EdgeModelAdapter.EdgeModelAdapter,
|
25
|
+
unstable_runPendingTools: () => import_toolResultStream.unstable_runPendingTools,
|
25
26
|
useEdgeRuntime: () => import_useEdgeRuntime.useEdgeRuntime
|
26
27
|
});
|
27
28
|
module.exports = __toCommonJS(edge_exports);
|
28
29
|
__reExport(edge_exports, require("./converters/index.js"), module.exports);
|
29
30
|
var import_useEdgeRuntime = require("./useEdgeRuntime.js");
|
30
|
-
var
|
31
|
+
var import_EdgeModelAdapter = require("./EdgeModelAdapter.js");
|
32
|
+
var import_toolResultStream = require("./streams/toolResultStream.js");
|
31
33
|
// Annotate the CommonJS export names for ESM import in node:
|
32
34
|
0 && (module.exports = {
|
33
35
|
EdgeChatAdapter,
|
36
|
+
unstable_runPendingTools,
|
34
37
|
useEdgeRuntime,
|
35
38
|
...require("./converters/index.js")
|
36
39
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/runtimes/edge/index.ts"],"sourcesContent":["export * from \"./converters\";\n\nexport { useEdgeRuntime, type EdgeRuntimeOptions } from \"./useEdgeRuntime\";\nexport { EdgeChatAdapter } from \"./
|
1
|
+
{"version":3,"sources":["../../../src/runtimes/edge/index.ts"],"sourcesContent":["export * from \"./converters\";\n\nexport { useEdgeRuntime, type EdgeRuntimeOptions } from \"./useEdgeRuntime\";\nexport { EdgeModelAdapter as EdgeChatAdapter } from \"./EdgeModelAdapter\";\nexport type { EdgeRuntimeRequestOptions } from \"./EdgeRuntimeRequestOptions\";\n\nexport { unstable_runPendingTools } from \"./streams/toolResultStream\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAc,kCAAd;AAEA,4BAAwD;AACxD,8BAAoD;AAGpD,8BAAyC;","names":[]}
|
@@ -1,9 +1,11 @@
|
|
1
1
|
// src/runtimes/edge/index.ts
|
2
2
|
export * from "./converters/index.mjs";
|
3
3
|
import { useEdgeRuntime } from "./useEdgeRuntime.mjs";
|
4
|
-
import {
|
4
|
+
import { EdgeModelAdapter } from "./EdgeModelAdapter.mjs";
|
5
|
+
import { unstable_runPendingTools } from "./streams/toolResultStream.mjs";
|
5
6
|
export {
|
6
|
-
EdgeChatAdapter,
|
7
|
+
EdgeModelAdapter as EdgeChatAdapter,
|
8
|
+
unstable_runPendingTools,
|
7
9
|
useEdgeRuntime
|
8
10
|
};
|
9
11
|
//# sourceMappingURL=index.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/runtimes/edge/index.ts"],"sourcesContent":["export * from \"./converters\";\n\nexport { useEdgeRuntime, type EdgeRuntimeOptions } from \"./useEdgeRuntime\";\nexport { EdgeChatAdapter } from \"./
|
1
|
+
{"version":3,"sources":["../../../src/runtimes/edge/index.ts"],"sourcesContent":["export * from \"./converters\";\n\nexport { useEdgeRuntime, type EdgeRuntimeOptions } from \"./useEdgeRuntime\";\nexport { EdgeModelAdapter as EdgeChatAdapter } from \"./EdgeModelAdapter\";\nexport type { EdgeRuntimeRequestOptions } from \"./EdgeRuntimeRequestOptions\";\n\nexport { unstable_runPendingTools } from \"./streams/toolResultStream\";\n"],"mappings":";AAAA,cAAc;AAEd,SAAS,sBAA+C;AACxD,SAA6B,wBAAuB;AAGpD,SAAS,gCAAgC;","names":[]}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { Tool } from "../../../model-context/ModelContextTypes";
|
2
|
-
import { ToolExecutionStream } from "assistant-stream";
|
2
|
+
import { AssistantMessage, ToolExecutionStream } from "assistant-stream";
|
3
|
+
export declare function unstable_runPendingTools(message: AssistantMessage, tools: Record<string, Tool<any, any>> | undefined, abortSignal: AbortSignal): Promise<AssistantMessage>;
|
3
4
|
export declare function toolResultStream(tools: Record<string, Tool<any, any>> | undefined, abortSignal: AbortSignal): ToolExecutionStream;
|
4
5
|
//# sourceMappingURL=toolResultStream.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"toolResultStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
1
|
+
{"version":3,"file":"toolResultStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA4CzE,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,EACjD,WAAW,EAAE,WAAW,6BA6BzB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,EACjD,WAAW,EAAE,WAAW,uBAKzB"}
|
@@ -20,36 +20,75 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
20
20
|
// src/runtimes/edge/streams/toolResultStream.ts
|
21
21
|
var toolResultStream_exports = {};
|
22
22
|
__export(toolResultStream_exports, {
|
23
|
-
toolResultStream: () => toolResultStream
|
23
|
+
toolResultStream: () => toolResultStream,
|
24
|
+
unstable_runPendingTools: () => unstable_runPendingTools
|
24
25
|
});
|
25
26
|
module.exports = __toCommonJS(toolResultStream_exports);
|
26
27
|
var import_zod = require("zod");
|
27
28
|
var import_assistant_stream = require("assistant-stream");
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
29
|
+
var import_assistant_stream2 = require("assistant-stream");
|
30
|
+
function getToolResponse(tools, abortSignal, toolCall) {
|
31
|
+
const tool = tools?.[toolCall.toolName];
|
32
|
+
if (!tool || !tool.execute) return void 0;
|
33
|
+
let executeFn = tool.execute;
|
34
|
+
if (tool.parameters instanceof import_zod.z.ZodType) {
|
35
|
+
const result = tool.parameters.safeParse(toolCall.args);
|
36
|
+
if (!result.success) {
|
37
|
+
executeFn = tool.experimental_onSchemaValidationError ?? (() => {
|
38
|
+
throw new Error(
|
39
|
+
`Function parameter validation failed. ${JSON.stringify(result.error.issues)}`
|
40
|
+
);
|
41
|
+
});
|
42
|
+
}
|
43
|
+
}
|
44
|
+
const getResult = async () => {
|
45
|
+
const result = await executeFn(toolCall.args, {
|
46
|
+
toolCallId: toolCall.toolCallId,
|
47
|
+
abortSignal
|
48
|
+
});
|
49
|
+
if (result instanceof import_assistant_stream2.ToolResponse) return result;
|
50
|
+
return new import_assistant_stream2.ToolResponse({
|
51
|
+
result: result === void 0 ? "<no result>" : result
|
52
|
+
});
|
53
|
+
};
|
54
|
+
return getResult();
|
55
|
+
}
|
56
|
+
async function unstable_runPendingTools(message, tools, abortSignal) {
|
57
|
+
for (const part of message.parts) {
|
58
|
+
if (part.type === "tool-call") {
|
59
|
+
const promiseOrUndefined = getToolResponse(tools, abortSignal, part);
|
60
|
+
if (promiseOrUndefined) {
|
61
|
+
const result = await promiseOrUndefined;
|
62
|
+
const updatedParts = message.parts.map((p) => {
|
63
|
+
if (p.type === "tool-call" && p.toolCallId === part.toolCallId) {
|
64
|
+
return {
|
65
|
+
...p,
|
66
|
+
state: "result",
|
67
|
+
artifact: result.artifact,
|
68
|
+
result: result.result,
|
69
|
+
isError: result.isError
|
70
|
+
};
|
71
|
+
}
|
72
|
+
return p;
|
38
73
|
});
|
74
|
+
message = {
|
75
|
+
...message,
|
76
|
+
parts: updatedParts,
|
77
|
+
content: updatedParts
|
78
|
+
};
|
39
79
|
}
|
40
80
|
}
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
return getResult();
|
49
|
-
});
|
81
|
+
}
|
82
|
+
return message;
|
83
|
+
}
|
84
|
+
function toolResultStream(tools, abortSignal) {
|
85
|
+
return new import_assistant_stream.ToolExecutionStream(
|
86
|
+
(toolCall) => getToolResponse(tools, abortSignal, toolCall)
|
87
|
+
);
|
50
88
|
}
|
51
89
|
// Annotate the CommonJS export names for ESM import in node:
|
52
90
|
0 && (module.exports = {
|
53
|
-
toolResultStream
|
91
|
+
toolResultStream,
|
92
|
+
unstable_runPendingTools
|
54
93
|
});
|
55
94
|
//# sourceMappingURL=toolResultStream.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../model-context/ModelContextTypes\";\nimport { z } from \"zod\";\nimport { ToolExecutionStream } from \"assistant-stream\";\n\
|
1
|
+
{"version":3,"sources":["../../../../src/runtimes/edge/streams/toolResultStream.ts"],"sourcesContent":["import { Tool } from \"../../../model-context/ModelContextTypes\";\nimport { z } from \"zod\";\nimport { AssistantMessage, ToolExecutionStream } from \"assistant-stream\";\nimport { ToolResponse } from \"assistant-stream\";\n\nfunction getToolResponse(\n tools: Record<string, Tool<any, any>> | undefined,\n abortSignal: AbortSignal,\n toolCall: {\n toolCallId: string;\n toolName: string;\n args: unknown;\n },\n) {\n const tool = tools?.[toolCall.toolName];\n if (!tool || !tool.execute) return undefined;\n\n let executeFn = tool.execute;\n\n if (tool.parameters instanceof z.ZodType) {\n const result = tool.parameters.safeParse(toolCall.args);\n if (!result.success) {\n executeFn =\n tool.experimental_onSchemaValidationError ??\n (() => {\n throw new Error(\n `Function parameter validation failed. ${JSON.stringify(result.error.issues)}`,\n );\n });\n }\n }\n\n const getResult = async () => {\n const result = await executeFn(toolCall.args, {\n toolCallId: toolCall.toolCallId,\n abortSignal,\n });\n if (result instanceof ToolResponse) return result;\n return new ToolResponse({\n result: result === undefined ? \"<no result>\" : result,\n });\n };\n\n return getResult();\n}\n\nexport async function unstable_runPendingTools(\n message: AssistantMessage,\n tools: Record<string, Tool<any, any>> | undefined,\n abortSignal: AbortSignal,\n) {\n // TODO parallel tool calling\n for (const part of message.parts) {\n if (part.type === \"tool-call\") {\n const promiseOrUndefined = getToolResponse(tools, abortSignal, part);\n if (promiseOrUndefined) {\n const result = await promiseOrUndefined;\n const updatedParts = message.parts.map((p) => {\n if (p.type === \"tool-call\" && p.toolCallId === part.toolCallId) {\n return {\n ...p,\n state: \"result\" as const,\n artifact: result.artifact,\n result: result.result,\n isError: result.isError,\n };\n }\n return p;\n });\n message = {\n ...message,\n parts: updatedParts,\n content: updatedParts,\n };\n }\n }\n }\n return message;\n}\n\nexport function toolResultStream(\n tools: Record<string, Tool<any, any>> | undefined,\n abortSignal: AbortSignal,\n) {\n return new ToolExecutionStream((toolCall) =>\n getToolResponse(tools, abortSignal, toolCall),\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAAkB;AAClB,8BAAsD;AACtD,IAAAA,2BAA6B;AAE7B,SAAS,gBACP,OACA,aACA,UAKA;AACA,QAAM,OAAO,QAAQ,SAAS,QAAQ;AACtC,MAAI,CAAC,QAAQ,CAAC,KAAK,QAAS,QAAO;AAEnC,MAAI,YAAY,KAAK;AAErB,MAAI,KAAK,sBAAsB,aAAE,SAAS;AACxC,UAAM,SAAS,KAAK,WAAW,UAAU,SAAS,IAAI;AACtD,QAAI,CAAC,OAAO,SAAS;AACnB,kBACE,KAAK,yCACJ,MAAM;AACL,cAAM,IAAI;AAAA,UACR,yCAAyC,KAAK,UAAU,OAAO,MAAM,MAAM,CAAC;AAAA,QAC9E;AAAA,MACF;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,YAAY,YAAY;AAC5B,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAAA,MAC5C,YAAY,SAAS;AAAA,MACrB;AAAA,IACF,CAAC;AACD,QAAI,kBAAkB,sCAAc,QAAO;AAC3C,WAAO,IAAI,sCAAa;AAAA,MACtB,QAAQ,WAAW,SAAY,gBAAgB;AAAA,IACjD,CAAC;AAAA,EACH;AAEA,SAAO,UAAU;AACnB;AAEA,eAAsB,yBACpB,SACA,OACA,aACA;AAEA,aAAW,QAAQ,QAAQ,OAAO;AAChC,QAAI,KAAK,SAAS,aAAa;AAC7B,YAAM,qBAAqB,gBAAgB,OAAO,aAAa,IAAI;AACnE,UAAI,oBAAoB;AACtB,cAAM,SAAS,MAAM;AACrB,cAAM,eAAe,QAAQ,MAAM,IAAI,CAAC,MAAM;AAC5C,cAAI,EAAE,SAAS,eAAe,EAAE,eAAe,KAAK,YAAY;AAC9D,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,OAAO;AAAA,cACP,UAAU,OAAO;AAAA,cACjB,QAAQ,OAAO;AAAA,cACf,SAAS,OAAO;AAAA,YAClB;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AACD,kBAAU;AAAA,UACR,GAAG;AAAA,UACH,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,iBACd,OACA,aACA;AACA,SAAO,IAAI;AAAA,IAAoB,CAAC,aAC9B,gBAAgB,OAAO,aAAa,QAAQ;AAAA,EAC9C;AACF;","names":["import_assistant_stream"]}
|
@@ -1,30 +1,68 @@
|
|
1
1
|
// src/runtimes/edge/streams/toolResultStream.ts
|
2
2
|
import { z } from "zod";
|
3
3
|
import { ToolExecutionStream } from "assistant-stream";
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
import { ToolResponse } from "assistant-stream";
|
5
|
+
function getToolResponse(tools, abortSignal, toolCall) {
|
6
|
+
const tool = tools?.[toolCall.toolName];
|
7
|
+
if (!tool || !tool.execute) return void 0;
|
8
|
+
let executeFn = tool.execute;
|
9
|
+
if (tool.parameters instanceof z.ZodType) {
|
10
|
+
const result = tool.parameters.safeParse(toolCall.args);
|
11
|
+
if (!result.success) {
|
12
|
+
executeFn = tool.experimental_onSchemaValidationError ?? (() => {
|
13
|
+
throw new Error(
|
14
|
+
`Function parameter validation failed. ${JSON.stringify(result.error.issues)}`
|
15
|
+
);
|
16
|
+
});
|
17
|
+
}
|
18
|
+
}
|
19
|
+
const getResult = async () => {
|
20
|
+
const result = await executeFn(toolCall.args, {
|
21
|
+
toolCallId: toolCall.toolCallId,
|
22
|
+
abortSignal
|
23
|
+
});
|
24
|
+
if (result instanceof ToolResponse) return result;
|
25
|
+
return new ToolResponse({
|
26
|
+
result: result === void 0 ? "<no result>" : result
|
27
|
+
});
|
28
|
+
};
|
29
|
+
return getResult();
|
30
|
+
}
|
31
|
+
async function unstable_runPendingTools(message, tools, abortSignal) {
|
32
|
+
for (const part of message.parts) {
|
33
|
+
if (part.type === "tool-call") {
|
34
|
+
const promiseOrUndefined = getToolResponse(tools, abortSignal, part);
|
35
|
+
if (promiseOrUndefined) {
|
36
|
+
const result = await promiseOrUndefined;
|
37
|
+
const updatedParts = message.parts.map((p) => {
|
38
|
+
if (p.type === "tool-call" && p.toolCallId === part.toolCallId) {
|
39
|
+
return {
|
40
|
+
...p,
|
41
|
+
state: "result",
|
42
|
+
artifact: result.artifact,
|
43
|
+
result: result.result,
|
44
|
+
isError: result.isError
|
45
|
+
};
|
46
|
+
}
|
47
|
+
return p;
|
14
48
|
});
|
49
|
+
message = {
|
50
|
+
...message,
|
51
|
+
parts: updatedParts,
|
52
|
+
content: updatedParts
|
53
|
+
};
|
15
54
|
}
|
16
55
|
}
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
return getResult();
|
25
|
-
});
|
56
|
+
}
|
57
|
+
return message;
|
58
|
+
}
|
59
|
+
function toolResultStream(tools, abortSignal) {
|
60
|
+
return new ToolExecutionStream(
|
61
|
+
(toolCall) => getToolResponse(tools, abortSignal, toolCall)
|
62
|
+
);
|
26
63
|
}
|
27
64
|
export {
|
28
|
-
toolResultStream
|
65
|
+
toolResultStream,
|
66
|
+
unstable_runPendingTools
|
29
67
|
};
|
30
68
|
//# sourceMappingURL=toolResultStream.mjs.map
|