@assistant-ui/react 0.8.20 → 0.9.1
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/api/ThreadRuntime.d.ts.map +1 -1
- package/dist/api/ThreadRuntime.js +3 -1
- package/dist/api/ThreadRuntime.js.map +1 -1
- package/dist/api/ThreadRuntime.mjs +3 -1
- package/dist/api/ThreadRuntime.mjs.map +1 -1
- package/dist/cloud/AssistantCloudRuns.d.ts +2 -2
- package/dist/cloud/AssistantCloudRuns.d.ts.map +1 -1
- package/dist/cloud/AssistantCloudRuns.js.map +1 -1
- package/dist/cloud/AssistantCloudRuns.mjs.map +1 -1
- package/dist/cloud/auiV0.d.ts +1 -2
- package/dist/cloud/auiV0.d.ts.map +1 -1
- package/dist/cloud/auiV0.js.map +1 -1
- package/dist/cloud/auiV0.mjs.map +1 -1
- package/dist/context/react/AttachmentContext.d.ts +108 -108
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -3
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -4
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs +3 -3
- package/dist/internal.mjs.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.js +5 -2
- package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.mjs +5 -2
- package/dist/primitives/assistantModal/AssistantModalRoot.mjs.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.js +3 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +3 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.js +2 -2
- package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.mjs +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
- package/dist/runtimes/index.d.ts +1 -2
- package/dist/runtimes/index.d.ts.map +1 -1
- package/dist/runtimes/index.js +6 -5
- package/dist/runtimes/index.js.map +1 -1
- package/dist/runtimes/index.mjs +7 -3
- package/dist/runtimes/index.mjs.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.js +3 -3
- package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +4 -4
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/cloud.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/cloud.js +2 -2
- package/dist/runtimes/remote-thread-list/adapter/cloud.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/cloud.mjs +2 -2
- package/dist/runtimes/remote-thread-list/adapter/cloud.mjs.map +1 -1
- package/dist/runtimes/{edge/streams → streams}/toolResultStream.d.ts +1 -1
- package/dist/runtimes/streams/toolResultStream.d.ts.map +1 -0
- package/dist/runtimes/{edge/streams → streams}/toolResultStream.js +1 -1
- package/dist/runtimes/streams/toolResultStream.js.map +1 -0
- package/dist/runtimes/{edge/streams → streams}/toolResultStream.mjs +1 -1
- package/dist/runtimes/streams/toolResultStream.mjs.map +1 -0
- package/dist/runtimes/utils/MessageRepository.d.ts +2 -2
- package/dist/runtimes/utils/MessageRepository.d.ts.map +1 -1
- package/dist/runtimes/utils/MessageRepository.js +1 -5
- package/dist/runtimes/utils/MessageRepository.js.map +1 -1
- package/dist/runtimes/utils/MessageRepository.mjs +1 -5
- package/dist/runtimes/utils/MessageRepository.mjs.map +1 -1
- package/dist/types/AssistantTypes.d.ts +3 -60
- package/dist/types/AssistantTypes.d.ts.map +1 -1
- package/dist/types/AssistantTypes.js.map +1 -1
- package/dist/types/AttachmentTypes.d.ts +3 -3
- package/dist/types/AttachmentTypes.d.ts.map +1 -1
- package/dist/types/AttachmentTypes.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +11 -17
- package/src/api/ThreadRuntime.ts +2 -0
- package/src/cloud/AssistantCloudRuns.tsx +2 -2
- package/src/cloud/auiV0.ts +1 -2
- package/src/index.ts +0 -2
- package/src/internal.ts +1 -1
- package/src/primitives/assistantModal/AssistantModalRoot.tsx +6 -2
- package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +2 -0
- package/src/runtimes/external-store/ThreadMessageLike.tsx +1 -1
- package/src/runtimes/index.ts +4 -2
- package/src/runtimes/local/LocalThreadRuntimeCore.tsx +4 -4
- package/src/runtimes/remote-thread-list/adapter/cloud.tsx +1 -2
- package/src/runtimes/{edge/streams → streams}/toolResultStream.ts +1 -1
- package/src/runtimes/utils/MessageRepository.tsx +3 -7
- package/src/tests/MessageRepository.test.ts +7 -10
- package/src/types/AssistantTypes.ts +3 -81
- package/src/types/AttachmentTypes.ts +3 -3
- package/src/types/index.ts +0 -9
- package/dist/edge.d.ts +0 -2
- package/dist/edge.d.ts.map +0 -1
- package/dist/edge.js +0 -33
- package/dist/edge.js.map +0 -1
- package/dist/edge.mjs +0 -10
- package/dist/edge.mjs.map +0 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts +0 -9
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts.map +0 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +0 -58
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js.map +0 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs +0 -35
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs.map +0 -1
- package/dist/runtimes/dangerous-in-browser/index.d.ts +0 -2
- package/dist/runtimes/dangerous-in-browser/index.d.ts.map +0 -1
- package/dist/runtimes/dangerous-in-browser/index.js +0 -31
- package/dist/runtimes/dangerous-in-browser/index.js.map +0 -1
- package/dist/runtimes/dangerous-in-browser/index.mjs +0 -8
- package/dist/runtimes/dangerous-in-browser/index.mjs.map +0 -1
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts +0 -5
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts.map +0 -1
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js +0 -40
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js.map +0 -1
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.mjs +0 -18
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.mjs.map +0 -1
- package/dist/runtimes/edge/EdgeModelAdapter.d.ts +0 -48
- package/dist/runtimes/edge/EdgeModelAdapter.d.ts.map +0 -1
- package/dist/runtimes/edge/EdgeModelAdapter.js +0 -127
- package/dist/runtimes/edge/EdgeModelAdapter.js.map +0 -1
- package/dist/runtimes/edge/EdgeModelAdapter.mjs +0 -94
- package/dist/runtimes/edge/EdgeModelAdapter.mjs.map +0 -1
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts +0 -345
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts.map +0 -1
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js +0 -106
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js.map +0 -1
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs +0 -84
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs.map +0 -1
- package/dist/runtimes/edge/converters/fromCoreMessage.d.ts +0 -8
- package/dist/runtimes/edge/converters/fromCoreMessage.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/fromCoreMessage.js +0 -89
- package/dist/runtimes/edge/converters/fromCoreMessage.js.map +0 -1
- package/dist/runtimes/edge/converters/fromCoreMessage.mjs +0 -63
- package/dist/runtimes/edge/converters/fromCoreMessage.mjs.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts +0 -8
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.js +0 -149
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.js.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs +0 -124
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelTools.d.ts +0 -4
- package/dist/runtimes/edge/converters/fromLanguageModelTools.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelTools.js +0 -41
- package/dist/runtimes/edge/converters/fromLanguageModelTools.js.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelTools.mjs +0 -16
- package/dist/runtimes/edge/converters/fromLanguageModelTools.mjs.map +0 -1
- package/dist/runtimes/edge/converters/index.d.ts +0 -35
- package/dist/runtimes/edge/converters/index.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/index.js +0 -50
- package/dist/runtimes/edge/converters/index.js.map +0 -1
- package/dist/runtimes/edge/converters/index.mjs +0 -24
- package/dist/runtimes/edge/converters/index.mjs.map +0 -1
- package/dist/runtimes/edge/converters/toCoreMessages.d.ts +0 -12
- package/dist/runtimes/edge/converters/toCoreMessages.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/toCoreMessages.js +0 -74
- package/dist/runtimes/edge/converters/toCoreMessages.js.map +0 -1
- package/dist/runtimes/edge/converters/toCoreMessages.mjs +0 -48
- package/dist/runtimes/edge/converters/toCoreMessages.mjs.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts +0 -6
- package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js +0 -168
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs +0 -143
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelTools.d.ts +0 -4
- package/dist/runtimes/edge/converters/toLanguageModelTools.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelTools.js +0 -50
- package/dist/runtimes/edge/converters/toLanguageModelTools.js.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelTools.mjs +0 -15
- package/dist/runtimes/edge/converters/toLanguageModelTools.mjs.map +0 -1
- package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts +0 -36
- package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts.map +0 -1
- package/dist/runtimes/edge/createEdgeRuntimeAPI.js +0 -179
- package/dist/runtimes/edge/createEdgeRuntimeAPI.js.map +0 -1
- package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs +0 -156
- package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs.map +0 -1
- package/dist/runtimes/edge/index.d.ts +0 -6
- package/dist/runtimes/edge/index.d.ts.map +0 -1
- package/dist/runtimes/edge/index.js +0 -40
- package/dist/runtimes/edge/index.js.map +0 -1
- package/dist/runtimes/edge/index.mjs +0 -11
- package/dist/runtimes/edge/index.mjs.map +0 -1
- package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +0 -1
- package/dist/runtimes/edge/streams/toolResultStream.js.map +0 -1
- package/dist/runtimes/edge/streams/toolResultStream.mjs.map +0 -1
- package/dist/runtimes/edge/useEdgeRuntime.d.ts +0 -5
- package/dist/runtimes/edge/useEdgeRuntime.d.ts.map +0 -1
- package/dist/runtimes/edge/useEdgeRuntime.js +0 -41
- package/dist/runtimes/edge/useEdgeRuntime.js.map +0 -1
- package/dist/runtimes/edge/useEdgeRuntime.mjs +0 -17
- package/dist/runtimes/edge/useEdgeRuntime.mjs.map +0 -1
- package/dist/utils/json/parse-partial-json.d.ts +0 -4
- package/dist/utils/json/parse-partial-json.d.ts.map +0 -1
- package/dist/utils/json/parse-partial-json.js +0 -90
- package/dist/utils/json/parse-partial-json.js.map +0 -1
- package/dist/utils/json/parse-partial-json.mjs +0 -54
- package/dist/utils/json/parse-partial-json.mjs.map +0 -1
- package/edge/README.md +0 -1
- package/edge/package.json +0 -5
- package/src/edge.ts +0 -4
- package/src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts +0 -42
- package/src/runtimes/dangerous-in-browser/index.ts +0 -4
- package/src/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.ts +0 -21
- package/src/runtimes/edge/EdgeModelAdapter.ts +0 -188
- package/src/runtimes/edge/EdgeRuntimeRequestOptions.ts +0 -109
- package/src/runtimes/edge/converters/fromCoreMessage.ts +0 -76
- package/src/runtimes/edge/converters/fromLanguageModelMessages.ts +0 -149
- package/src/runtimes/edge/converters/fromLanguageModelTools.ts +0 -16
- package/src/runtimes/edge/converters/index.ts +0 -41
- package/src/runtimes/edge/converters/toCoreMessages.ts +0 -64
- package/src/runtimes/edge/converters/toLanguageModelMessages.ts +0 -184
- package/src/runtimes/edge/converters/toLanguageModelTools.ts +0 -18
- package/src/runtimes/edge/createEdgeRuntimeAPI.ts +0 -234
- package/src/runtimes/edge/index.ts +0 -7
- package/src/runtimes/edge/useEdgeRuntime.ts +0 -17
- package/src/utils/json/parse-partial-json.ts +0 -74
@@ -1,21 +0,0 @@
|
|
1
|
-
"use client";
|
2
|
-
|
3
|
-
import { LocalRuntimeOptions, useLocalRuntime } from "..";
|
4
|
-
import { useState } from "react";
|
5
|
-
import {
|
6
|
-
DangerousInBrowserAdapter,
|
7
|
-
DangerousInBrowserAdapterOptions,
|
8
|
-
} from "./DangerousInBrowserAdapter";
|
9
|
-
import { splitLocalRuntimeOptions } from "../local/LocalRuntimeOptions";
|
10
|
-
|
11
|
-
export type DangerousInBrowserRuntimeOptions =
|
12
|
-
DangerousInBrowserAdapterOptions & LocalRuntimeOptions;
|
13
|
-
|
14
|
-
export const useDangerousInBrowserRuntime = (
|
15
|
-
options: DangerousInBrowserRuntimeOptions,
|
16
|
-
) => {
|
17
|
-
const { localRuntimeOptions, otherOptions } =
|
18
|
-
splitLocalRuntimeOptions(options);
|
19
|
-
const [adapter] = useState(() => new DangerousInBrowserAdapter(otherOptions));
|
20
|
-
return useLocalRuntime(adapter, localRuntimeOptions);
|
21
|
-
};
|
@@ -1,188 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
ChatModelAdapter,
|
3
|
-
ChatModelRunOptions,
|
4
|
-
} from "../local/ChatModelAdapter";
|
5
|
-
import { toCoreMessages } from "./converters/toCoreMessages";
|
6
|
-
import { toLanguageModelTools } from "./converters/toLanguageModelTools";
|
7
|
-
import { EdgeRuntimeRequestOptions } from "./EdgeRuntimeRequestOptions";
|
8
|
-
import { toolResultStream } from "./streams/toolResultStream";
|
9
|
-
import { toLanguageModelMessages } from "./converters";
|
10
|
-
import { ThreadMessage } from "../../types";
|
11
|
-
import { Tool } from "../../model-context";
|
12
|
-
import { z } from "zod";
|
13
|
-
import zodToJsonSchema from "zod-to-json-schema";
|
14
|
-
import { JSONSchema7 } from "json-schema";
|
15
|
-
import {
|
16
|
-
AssistantMessageAccumulator,
|
17
|
-
DataStreamDecoder,
|
18
|
-
} from "assistant-stream";
|
19
|
-
|
20
|
-
export function asAsyncIterable<T>(
|
21
|
-
source: ReadableStream<T>,
|
22
|
-
): AsyncIterable<T> {
|
23
|
-
return {
|
24
|
-
[Symbol.asyncIterator]: () => {
|
25
|
-
const reader = source.getReader();
|
26
|
-
return {
|
27
|
-
async next(): Promise<IteratorResult<T, undefined>> {
|
28
|
-
const { done, value } = await reader.read();
|
29
|
-
return done
|
30
|
-
? { done: true, value: undefined }
|
31
|
-
: { done: false, value };
|
32
|
-
},
|
33
|
-
};
|
34
|
-
},
|
35
|
-
};
|
36
|
-
}
|
37
|
-
|
38
|
-
type HeadersValue = Record<string, string> | Headers;
|
39
|
-
|
40
|
-
export type EdgeModelAdapterOptions = {
|
41
|
-
api: string;
|
42
|
-
|
43
|
-
// experimental_prepareRequestBody?: (options: {
|
44
|
-
// id: string;
|
45
|
-
// messages: UIMessage[];
|
46
|
-
// requestData?: JSONValue;
|
47
|
-
// requestBody?: object;
|
48
|
-
// }) => unknown;
|
49
|
-
|
50
|
-
// onToolCall?: ({
|
51
|
-
// toolCall,
|
52
|
-
// }: {
|
53
|
-
// toolCall: UIMessageToolInvocation;
|
54
|
-
// }) => void | Promise<unknown> | unknown;
|
55
|
-
|
56
|
-
/**
|
57
|
-
* Callback function to be called when the API response is received.
|
58
|
-
*/
|
59
|
-
onResponse?: (response: Response) => void | Promise<void>;
|
60
|
-
/**
|
61
|
-
* Optional callback function that is called when the assistant message is finished streaming.
|
62
|
-
*/
|
63
|
-
onFinish?: (message: ThreadMessage) => void;
|
64
|
-
/**
|
65
|
-
* Callback function to be called when an error is encountered.
|
66
|
-
*/
|
67
|
-
onError?: (error: Error) => void;
|
68
|
-
|
69
|
-
credentials?: RequestCredentials;
|
70
|
-
|
71
|
-
/**
|
72
|
-
* Headers to be sent with the request.
|
73
|
-
* Can be a static headers object or a function that returns a Promise of headers.
|
74
|
-
*/
|
75
|
-
headers?: HeadersValue | (() => Promise<HeadersValue>);
|
76
|
-
|
77
|
-
body?: object;
|
78
|
-
|
79
|
-
/**
|
80
|
-
* @deprecated Renamed to `sendExtraMessageFields`.
|
81
|
-
*/
|
82
|
-
unstable_sendMessageIds?: boolean;
|
83
|
-
|
84
|
-
/**
|
85
|
-
* When enabled, the adapter will not strip `id` from messages in the messages array.
|
86
|
-
*/
|
87
|
-
sendExtraMessageFields?: boolean;
|
88
|
-
|
89
|
-
/**
|
90
|
-
* When enabled, the adapter will send messages in the format expected by the Vercel AI SDK Core.
|
91
|
-
* This feature will be removed in the future in favor of a better solution.
|
92
|
-
*
|
93
|
-
* `v2` sends frontend tools in a format that can be directly passed to `stremaText`
|
94
|
-
*/
|
95
|
-
unstable_AISDKInterop?: boolean | "v2" | undefined;
|
96
|
-
};
|
97
|
-
|
98
|
-
const toAISDKTools = (tools: Record<string, Tool<any, any>>) => {
|
99
|
-
return Object.fromEntries(
|
100
|
-
Object.entries(tools).map(([name, tool]) => [
|
101
|
-
name,
|
102
|
-
{
|
103
|
-
...(tool.description ? { description: tool.description } : undefined),
|
104
|
-
parameters: (tool.parameters instanceof z.ZodType
|
105
|
-
? zodToJsonSchema(tool.parameters)
|
106
|
-
: tool.parameters) as JSONSchema7,
|
107
|
-
},
|
108
|
-
]),
|
109
|
-
);
|
110
|
-
};
|
111
|
-
|
112
|
-
export class EdgeModelAdapter implements ChatModelAdapter {
|
113
|
-
constructor(private options: EdgeModelAdapterOptions) {}
|
114
|
-
|
115
|
-
async *run({
|
116
|
-
messages,
|
117
|
-
runConfig,
|
118
|
-
abortSignal,
|
119
|
-
context,
|
120
|
-
unstable_assistantMessageId,
|
121
|
-
unstable_getMessage,
|
122
|
-
}: ChatModelRunOptions) {
|
123
|
-
const headersValue =
|
124
|
-
typeof this.options.headers === "function"
|
125
|
-
? await this.options.headers()
|
126
|
-
: this.options.headers;
|
127
|
-
|
128
|
-
const headers = new Headers(headersValue);
|
129
|
-
headers.set("Content-Type", "application/json");
|
130
|
-
|
131
|
-
const result = await fetch(this.options.api, {
|
132
|
-
method: "POST",
|
133
|
-
headers,
|
134
|
-
credentials: this.options.credentials ?? "same-origin",
|
135
|
-
body: JSON.stringify({
|
136
|
-
system: context.system,
|
137
|
-
messages: this.options.unstable_AISDKInterop
|
138
|
-
? (toLanguageModelMessages(messages, {
|
139
|
-
unstable_includeId:
|
140
|
-
this.options.unstable_sendMessageIds ||
|
141
|
-
this.options.sendExtraMessageFields,
|
142
|
-
}) as EdgeRuntimeRequestOptions["messages"]) // TODO figure out a better way to do this
|
143
|
-
: toCoreMessages(messages, {
|
144
|
-
unstable_includeId:
|
145
|
-
this.options.unstable_sendMessageIds ||
|
146
|
-
this.options.sendExtraMessageFields,
|
147
|
-
}),
|
148
|
-
tools: context.tools
|
149
|
-
? this.options.unstable_AISDKInterop === "v2"
|
150
|
-
? (toAISDKTools(context.tools) as any)
|
151
|
-
: toLanguageModelTools(context.tools)
|
152
|
-
: [],
|
153
|
-
unstable_assistantMessageId,
|
154
|
-
runConfig,
|
155
|
-
...context.callSettings,
|
156
|
-
...context.config,
|
157
|
-
|
158
|
-
...this.options.body,
|
159
|
-
} satisfies EdgeRuntimeRequestOptions),
|
160
|
-
signal: abortSignal,
|
161
|
-
});
|
162
|
-
|
163
|
-
await this.options.onResponse?.(result);
|
164
|
-
|
165
|
-
try {
|
166
|
-
if (!result.ok) {
|
167
|
-
throw new Error(`Status ${result.status}: ${await result.text()}`);
|
168
|
-
}
|
169
|
-
if (!result.body) {
|
170
|
-
throw new Error("Response body is null");
|
171
|
-
}
|
172
|
-
|
173
|
-
const stream = result.body
|
174
|
-
.pipeThrough(new DataStreamDecoder())
|
175
|
-
.pipeThrough(toolResultStream(context.tools, abortSignal))
|
176
|
-
.pipeThrough(new AssistantMessageAccumulator());
|
177
|
-
|
178
|
-
for await (const update of asAsyncIterable(stream)) {
|
179
|
-
yield update;
|
180
|
-
}
|
181
|
-
|
182
|
-
this.options.onFinish?.(unstable_getMessage());
|
183
|
-
} catch (error: unknown) {
|
184
|
-
this.options.onError?.(error as Error);
|
185
|
-
throw error;
|
186
|
-
}
|
187
|
-
}
|
188
|
-
}
|
@@ -1,109 +0,0 @@
|
|
1
|
-
import { JSONSchema7 } from "json-schema";
|
2
|
-
import {
|
3
|
-
LanguageModelConfigSchema,
|
4
|
-
LanguageModelV1CallSettingsSchema,
|
5
|
-
} from "../../model-context/ModelContextTypes";
|
6
|
-
import { z } from "zod";
|
7
|
-
import { ReadonlyJSONObject } from "../../utils/json/json-value";
|
8
|
-
|
9
|
-
const LanguageModelV1FunctionToolSchema = z.object({
|
10
|
-
type: z.literal("function"),
|
11
|
-
name: z.string(),
|
12
|
-
description: z.string().optional(),
|
13
|
-
parameters: z.custom<JSONSchema7>(
|
14
|
-
(val) => typeof val === "object" && val !== null,
|
15
|
-
),
|
16
|
-
});
|
17
|
-
|
18
|
-
const TextContentPartSchema = z.object({
|
19
|
-
type: z.literal("text"),
|
20
|
-
text: z.string(),
|
21
|
-
});
|
22
|
-
|
23
|
-
const ImageContentPartSchema = z.object({
|
24
|
-
type: z.literal("image"),
|
25
|
-
image: z.string(),
|
26
|
-
});
|
27
|
-
|
28
|
-
const FileContentPartSchema = z.object({
|
29
|
-
type: z.literal("file"),
|
30
|
-
data: z.string(),
|
31
|
-
mimeType: z.string(),
|
32
|
-
});
|
33
|
-
|
34
|
-
const Unstable_AudioContentPart = z.object({
|
35
|
-
type: z.literal("audio"),
|
36
|
-
audio: z.object({
|
37
|
-
data: z.string(),
|
38
|
-
format: z.union([z.literal("mp3"), z.literal("wav")]),
|
39
|
-
}),
|
40
|
-
});
|
41
|
-
|
42
|
-
const CoreToolCallContentPartSchema = z.object({
|
43
|
-
type: z.literal("tool-call"),
|
44
|
-
toolCallId: z.string(),
|
45
|
-
toolName: z.string(),
|
46
|
-
args: z
|
47
|
-
.record(z.unknown())
|
48
|
-
.refine((c): c is ReadonlyJSONObject => c !== undefined),
|
49
|
-
result: z.unknown().optional(),
|
50
|
-
isError: z.boolean().optional(),
|
51
|
-
});
|
52
|
-
|
53
|
-
const CoreUserMessageSchema = z.object({
|
54
|
-
role: z.literal("user"),
|
55
|
-
content: z
|
56
|
-
.array(
|
57
|
-
z.discriminatedUnion("type", [
|
58
|
-
TextContentPartSchema,
|
59
|
-
ImageContentPartSchema,
|
60
|
-
FileContentPartSchema,
|
61
|
-
Unstable_AudioContentPart,
|
62
|
-
]),
|
63
|
-
)
|
64
|
-
.min(1)
|
65
|
-
.readonly(),
|
66
|
-
});
|
67
|
-
|
68
|
-
const CoreAssistantMessageSchema = z.object({
|
69
|
-
role: z.literal("assistant"),
|
70
|
-
content: z
|
71
|
-
.array(
|
72
|
-
z.discriminatedUnion("type", [
|
73
|
-
TextContentPartSchema,
|
74
|
-
CoreToolCallContentPartSchema,
|
75
|
-
]),
|
76
|
-
)
|
77
|
-
.min(1)
|
78
|
-
.readonly(),
|
79
|
-
});
|
80
|
-
|
81
|
-
const CoreSystemMessageSchema = z.object({
|
82
|
-
role: z.literal("system"),
|
83
|
-
content: z.tuple([TextContentPartSchema]).readonly(),
|
84
|
-
});
|
85
|
-
|
86
|
-
const CoreMessageSchema = z.discriminatedUnion("role", [
|
87
|
-
CoreSystemMessageSchema,
|
88
|
-
CoreUserMessageSchema,
|
89
|
-
CoreAssistantMessageSchema,
|
90
|
-
]);
|
91
|
-
|
92
|
-
export const EdgeRuntimeRequestOptionsSchema = z
|
93
|
-
.object({
|
94
|
-
system: z.string().optional(),
|
95
|
-
messages: z.array(CoreMessageSchema).min(1).readonly(),
|
96
|
-
runConfig: z
|
97
|
-
.object({
|
98
|
-
custom: z.record(z.unknown()).optional(),
|
99
|
-
})
|
100
|
-
.optional(),
|
101
|
-
tools: z.array(LanguageModelV1FunctionToolSchema).readonly().optional(),
|
102
|
-
unstable_assistantMessageId: z.string().optional(),
|
103
|
-
})
|
104
|
-
.merge(LanguageModelV1CallSettingsSchema)
|
105
|
-
.merge(LanguageModelConfigSchema);
|
106
|
-
|
107
|
-
export type EdgeRuntimeRequestOptions = z.infer<
|
108
|
-
typeof EdgeRuntimeRequestOptionsSchema
|
109
|
-
>;
|
@@ -1,76 +0,0 @@
|
|
1
|
-
import { generateId } from "../../../internal";
|
2
|
-
import {
|
3
|
-
ThreadMessage,
|
4
|
-
CoreMessage,
|
5
|
-
ToolCallContentPart,
|
6
|
-
MessageStatus,
|
7
|
-
CompleteAttachment,
|
8
|
-
} from "../../../types";
|
9
|
-
|
10
|
-
export const fromCoreMessages = (
|
11
|
-
message: readonly CoreMessage[],
|
12
|
-
): ThreadMessage[] => {
|
13
|
-
return message.map((message) => fromCoreMessage(message));
|
14
|
-
};
|
15
|
-
|
16
|
-
export const fromCoreMessage = (
|
17
|
-
message: CoreMessage,
|
18
|
-
{
|
19
|
-
id = generateId(),
|
20
|
-
status = { type: "complete", reason: "unknown" } as MessageStatus,
|
21
|
-
attachments = [] as readonly CompleteAttachment[],
|
22
|
-
} = {},
|
23
|
-
): ThreadMessage => {
|
24
|
-
const commonProps = {
|
25
|
-
id,
|
26
|
-
createdAt: new Date(),
|
27
|
-
};
|
28
|
-
|
29
|
-
const role = message.role;
|
30
|
-
switch (role) {
|
31
|
-
case "assistant":
|
32
|
-
return {
|
33
|
-
...commonProps,
|
34
|
-
role,
|
35
|
-
content: message.content.map((part) => {
|
36
|
-
if (part.type === "tool-call") {
|
37
|
-
return {
|
38
|
-
...part,
|
39
|
-
argsText: JSON.stringify(part.args),
|
40
|
-
} satisfies ToolCallContentPart;
|
41
|
-
}
|
42
|
-
return part;
|
43
|
-
}),
|
44
|
-
status,
|
45
|
-
|
46
|
-
metadata: {
|
47
|
-
unstable_annotations: [],
|
48
|
-
unstable_data: [],
|
49
|
-
steps: [],
|
50
|
-
custom: {},
|
51
|
-
},
|
52
|
-
} satisfies ThreadMessage;
|
53
|
-
|
54
|
-
case "user":
|
55
|
-
return {
|
56
|
-
...commonProps,
|
57
|
-
role,
|
58
|
-
content: message.content,
|
59
|
-
attachments,
|
60
|
-
metadata: { custom: {} },
|
61
|
-
} satisfies ThreadMessage;
|
62
|
-
|
63
|
-
case "system":
|
64
|
-
return {
|
65
|
-
...commonProps,
|
66
|
-
role,
|
67
|
-
content: message.content,
|
68
|
-
metadata: { custom: {} },
|
69
|
-
} satisfies ThreadMessage;
|
70
|
-
|
71
|
-
default: {
|
72
|
-
const unsupportedRole: never = role;
|
73
|
-
throw new Error(`Unknown message role: ${unsupportedRole}`);
|
74
|
-
}
|
75
|
-
}
|
76
|
-
};
|
@@ -1,149 +0,0 @@
|
|
1
|
-
import { LanguageModelV1Message } from "@ai-sdk/provider";
|
2
|
-
import { CoreMessage, ToolCallContentPart } from "../../../types";
|
3
|
-
import { Writable } from "stream";
|
4
|
-
import { ReadonlyJSONObject } from "../../../utils/json/json-value";
|
5
|
-
|
6
|
-
type fromLanguageModelMessagesOptions = {
|
7
|
-
mergeSteps?: boolean;
|
8
|
-
};
|
9
|
-
|
10
|
-
export const fromLanguageModelMessages = (
|
11
|
-
lm: LanguageModelV1Message[],
|
12
|
-
{ mergeSteps }: fromLanguageModelMessagesOptions = {},
|
13
|
-
): CoreMessage[] => {
|
14
|
-
const messages: CoreMessage[] = [];
|
15
|
-
|
16
|
-
for (const lmMessage of lm) {
|
17
|
-
const role = lmMessage.role;
|
18
|
-
switch (role) {
|
19
|
-
case "system": {
|
20
|
-
messages.push({
|
21
|
-
role: "system",
|
22
|
-
content: [
|
23
|
-
{
|
24
|
-
type: "text",
|
25
|
-
text: lmMessage.content,
|
26
|
-
},
|
27
|
-
],
|
28
|
-
});
|
29
|
-
break;
|
30
|
-
}
|
31
|
-
case "user": {
|
32
|
-
messages.push({
|
33
|
-
role: "user",
|
34
|
-
content: lmMessage.content.map((part) => {
|
35
|
-
const type = part.type;
|
36
|
-
switch (type) {
|
37
|
-
case "text": {
|
38
|
-
return {
|
39
|
-
type: "text",
|
40
|
-
text: part.text,
|
41
|
-
};
|
42
|
-
}
|
43
|
-
case "image": {
|
44
|
-
if (part.image instanceof URL) {
|
45
|
-
return {
|
46
|
-
type: "image",
|
47
|
-
image: part.image.href,
|
48
|
-
};
|
49
|
-
}
|
50
|
-
throw new Error("Only images with URL data are supported");
|
51
|
-
}
|
52
|
-
case "file": {
|
53
|
-
if (part.data instanceof URL) {
|
54
|
-
return {
|
55
|
-
type: "file",
|
56
|
-
data: part.data.href,
|
57
|
-
mimeType: part.mimeType,
|
58
|
-
};
|
59
|
-
}
|
60
|
-
throw new Error("Only files with URL data are supported");
|
61
|
-
}
|
62
|
-
|
63
|
-
default: {
|
64
|
-
const unhandledType: never = type;
|
65
|
-
throw new Error(`Unknown content part type: ${unhandledType}`);
|
66
|
-
}
|
67
|
-
}
|
68
|
-
}),
|
69
|
-
});
|
70
|
-
break;
|
71
|
-
}
|
72
|
-
case "assistant": {
|
73
|
-
const newContent = lmMessage.content
|
74
|
-
.map((part) => {
|
75
|
-
if (part.type === "tool-call") {
|
76
|
-
return {
|
77
|
-
type: "tool-call",
|
78
|
-
toolCallId: part.toolCallId,
|
79
|
-
toolName: part.toolName,
|
80
|
-
argsText: JSON.stringify(part.args),
|
81
|
-
args: part.args as ReadonlyJSONObject,
|
82
|
-
} satisfies ToolCallContentPart;
|
83
|
-
}
|
84
|
-
// TODO handle these
|
85
|
-
if (
|
86
|
-
part.type === "redacted-reasoning" ||
|
87
|
-
part.type === "file" ||
|
88
|
-
part.type === "reasoning"
|
89
|
-
) {
|
90
|
-
return null;
|
91
|
-
}
|
92
|
-
return part;
|
93
|
-
})
|
94
|
-
.filter((p) => !!p);
|
95
|
-
|
96
|
-
if (mergeSteps) {
|
97
|
-
const previousMessage = messages[messages.length - 1];
|
98
|
-
if (previousMessage?.role === "assistant") {
|
99
|
-
previousMessage.content = [
|
100
|
-
...previousMessage.content,
|
101
|
-
...newContent,
|
102
|
-
];
|
103
|
-
break;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
|
107
|
-
messages.push({
|
108
|
-
role: "assistant",
|
109
|
-
content: newContent,
|
110
|
-
});
|
111
|
-
break;
|
112
|
-
}
|
113
|
-
case "tool": {
|
114
|
-
const previousMessage = messages[messages.length - 1];
|
115
|
-
if (previousMessage?.role !== "assistant")
|
116
|
-
throw new Error(
|
117
|
-
"A tool message must be preceded by an assistant message.",
|
118
|
-
);
|
119
|
-
|
120
|
-
for (const tool of lmMessage.content) {
|
121
|
-
const toolCall = previousMessage.content.find(
|
122
|
-
(c): c is ToolCallContentPart =>
|
123
|
-
c.type === "tool-call" && c.toolCallId === tool.toolCallId,
|
124
|
-
);
|
125
|
-
if (!toolCall)
|
126
|
-
throw new Error("Received tool result for an unknown tool call.");
|
127
|
-
if (toolCall.toolName !== tool.toolName)
|
128
|
-
throw new Error("Tool call name mismatch.");
|
129
|
-
|
130
|
-
type Writable<T> = { -readonly [P in keyof T]: T[P] };
|
131
|
-
const writable = toolCall as Writable<ToolCallContentPart>;
|
132
|
-
writable.result = tool.result;
|
133
|
-
if (tool.isError) {
|
134
|
-
writable.isError = true;
|
135
|
-
}
|
136
|
-
}
|
137
|
-
|
138
|
-
break;
|
139
|
-
}
|
140
|
-
|
141
|
-
default: {
|
142
|
-
const unhandledRole: never = role;
|
143
|
-
throw new Error(`Unknown message role: ${unhandledRole}`);
|
144
|
-
}
|
145
|
-
}
|
146
|
-
}
|
147
|
-
|
148
|
-
return messages;
|
149
|
-
};
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import { LanguageModelV1FunctionTool } from "@ai-sdk/provider";
|
2
|
-
import { Tool } from "../../../model-context/ModelContextTypes";
|
3
|
-
|
4
|
-
export const fromLanguageModelTools = (
|
5
|
-
tools: LanguageModelV1FunctionTool[],
|
6
|
-
): Record<string, Tool<any, any>> => {
|
7
|
-
return Object.fromEntries(
|
8
|
-
tools.map((tool) => [
|
9
|
-
tool.name,
|
10
|
-
{
|
11
|
-
description: tool.description,
|
12
|
-
parameters: tool.parameters,
|
13
|
-
},
|
14
|
-
]),
|
15
|
-
);
|
16
|
-
};
|
@@ -1,41 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @deprecated This is an internal API and may change without notice.
|
3
|
-
*/
|
4
|
-
export { toLanguageModelMessages } from "./toLanguageModelMessages";
|
5
|
-
|
6
|
-
/**
|
7
|
-
* @deprecated This is an internal API and may change without notice.
|
8
|
-
*/
|
9
|
-
export { fromLanguageModelMessages } from "./fromLanguageModelMessages";
|
10
|
-
|
11
|
-
export {
|
12
|
-
/**
|
13
|
-
* @deprecated This is an internal API and may change without notice.
|
14
|
-
*/
|
15
|
-
fromCoreMessages,
|
16
|
-
/**
|
17
|
-
* @deprecated This is an internal API and may change without notice.
|
18
|
-
*/
|
19
|
-
fromCoreMessage,
|
20
|
-
} from "./fromCoreMessage";
|
21
|
-
|
22
|
-
export {
|
23
|
-
/**
|
24
|
-
* @deprecated This is an internal API and may change without notice.
|
25
|
-
*/
|
26
|
-
toCoreMessages,
|
27
|
-
/**
|
28
|
-
* @deprecated This is an internal API and may change without notice.
|
29
|
-
*/
|
30
|
-
toCoreMessage,
|
31
|
-
} from "./toCoreMessages";
|
32
|
-
|
33
|
-
/**
|
34
|
-
* @deprecated This is an internal API and may change without notice.
|
35
|
-
*/
|
36
|
-
export { fromLanguageModelTools } from "./fromLanguageModelTools";
|
37
|
-
|
38
|
-
/**
|
39
|
-
* @deprecated This is an internal API and may change without notice.
|
40
|
-
*/
|
41
|
-
export { toLanguageModelTools } from "./toLanguageModelTools";
|
@@ -1,64 +0,0 @@
|
|
1
|
-
import { ThreadMessage, CoreMessage } from "../../../types";
|
2
|
-
|
3
|
-
type CoreMessageWithConditionalId<T extends boolean> = T extends false
|
4
|
-
? CoreMessage
|
5
|
-
: CoreMessage & { unstable_id?: string };
|
6
|
-
|
7
|
-
export const toCoreMessages = <T extends boolean = false>(
|
8
|
-
messages: readonly ThreadMessage[],
|
9
|
-
options: { unstable_includeId?: T | undefined } = {},
|
10
|
-
): CoreMessageWithConditionalId<T>[] => {
|
11
|
-
return messages.map((message) => toCoreMessage(message, options));
|
12
|
-
};
|
13
|
-
|
14
|
-
export const toCoreMessage = <T extends boolean = false>(
|
15
|
-
message: ThreadMessage,
|
16
|
-
options: { unstable_includeId?: T | undefined } = {},
|
17
|
-
): CoreMessageWithConditionalId<T> => {
|
18
|
-
const includeId = options.unstable_includeId ?? false;
|
19
|
-
const role = message.role;
|
20
|
-
switch (role) {
|
21
|
-
case "assistant":
|
22
|
-
return {
|
23
|
-
role,
|
24
|
-
content: message.content
|
25
|
-
.map((part) => {
|
26
|
-
if (
|
27
|
-
part.type === "reasoning" ||
|
28
|
-
part.type === "source" ||
|
29
|
-
part.type === "file"
|
30
|
-
)
|
31
|
-
return null; // reasoning, source, and file parts are omitted
|
32
|
-
if (part.type === "tool-call") {
|
33
|
-
const { argsText, ...rest } = part;
|
34
|
-
return rest;
|
35
|
-
}
|
36
|
-
return part;
|
37
|
-
})
|
38
|
-
.filter((c) => !!c),
|
39
|
-
...(includeId ? { unstable_id: message.id } : {}),
|
40
|
-
};
|
41
|
-
|
42
|
-
case "user":
|
43
|
-
return {
|
44
|
-
role,
|
45
|
-
content: [
|
46
|
-
...message.content,
|
47
|
-
...message.attachments.map((a) => a.content).flat(),
|
48
|
-
],
|
49
|
-
...(includeId ? { unstable_id: message.id } : {}),
|
50
|
-
};
|
51
|
-
|
52
|
-
case "system":
|
53
|
-
return {
|
54
|
-
role,
|
55
|
-
content: message.content,
|
56
|
-
...(includeId ? { unstable_id: message.id } : {}),
|
57
|
-
};
|
58
|
-
|
59
|
-
default: {
|
60
|
-
const unsupportedRole: never = role;
|
61
|
-
throw new Error(`Unknown message role: ${unsupportedRole}`);
|
62
|
-
}
|
63
|
-
}
|
64
|
-
};
|