@convex-dev/agent 0.6.4 → 0.7.0-alpha.0
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/MIGRATION.md +60 -116
- package/dist/client/messages.d.ts +1 -398
- package/dist/client/messages.d.ts.map +1 -1
- package/dist/client/messages.js +3 -47
- package/dist/client/messages.js.map +1 -1
- package/dist/client/types.d.ts +1 -455
- package/dist/client/types.d.ts.map +1 -1
- package/dist/component/_generated/component.d.ts +805 -45
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/messages.d.ts +1252 -201
- package/dist/component/messages.d.ts.map +1 -1
- package/dist/component/messages.js +49 -23
- package/dist/component/messages.js.map +1 -1
- package/dist/component/schema.d.ts +2593 -332
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/streams.d.ts +7 -1
- package/dist/component/streams.d.ts.map +1 -1
- package/dist/component/streams.js +24 -30
- package/dist/component/streams.js.map +1 -1
- package/dist/component/threads.d.ts.map +1 -1
- package/dist/component/threads.js +1 -2
- package/dist/component/threads.js.map +1 -1
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +5 -5
- package/dist/react/index.js.map +1 -1
- package/dist/shared.d.ts +19 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +4 -4
- package/dist/shared.js.map +1 -1
- package/dist/streaming/materializePersistedUIMessageChunks.d.ts +16 -0
- package/dist/streaming/materializePersistedUIMessageChunks.d.ts.map +1 -0
- package/dist/streaming/materializePersistedUIMessageChunks.js +302 -0
- package/dist/streaming/materializePersistedUIMessageChunks.js.map +1 -0
- package/dist/streaming/persistedUIMessageChunks.d.ts +106 -0
- package/dist/streaming/persistedUIMessageChunks.d.ts.map +1 -0
- package/dist/streaming/persistedUIMessageChunks.js +475 -0
- package/dist/streaming/persistedUIMessageChunks.js.map +1 -0
- package/dist/validators.d.ts +10026 -1055
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +71 -9
- package/dist/validators.js.map +1 -1
- package/dist/{UIMessages.d.ts → vercel/UIMessages.d.ts} +1 -1
- package/dist/vercel/UIMessages.d.ts.map +1 -0
- package/dist/{UIMessages.js → vercel/UIMessages.js} +63 -1
- package/dist/vercel/UIMessages.js.map +1 -0
- package/dist/{client → vercel/client}/createTool.d.ts +23 -16
- package/dist/vercel/client/createTool.d.ts.map +1 -0
- package/dist/{client → vercel/client}/createTool.js +2 -0
- package/dist/vercel/client/createTool.js.map +1 -0
- package/dist/{client → vercel/client}/definePlaygroundAPI.d.ts +533 -79
- package/dist/{client → vercel/client}/definePlaygroundAPI.d.ts.map +1 -1
- package/dist/{client → vercel/client}/definePlaygroundAPI.js +8 -7
- package/dist/vercel/client/definePlaygroundAPI.js.map +1 -0
- package/dist/{client → vercel/client}/files.d.ts +2 -2
- package/dist/vercel/client/files.d.ts.map +1 -0
- package/dist/vercel/client/files.js.map +1 -0
- package/dist/vercel/client/messages.d.ts +542 -0
- package/dist/vercel/client/messages.d.ts.map +1 -0
- package/dist/vercel/client/messages.js +66 -0
- package/dist/vercel/client/messages.js.map +1 -0
- package/dist/{client → vercel/client}/mockModel.d.ts +17 -17
- package/dist/vercel/client/mockModel.d.ts.map +1 -0
- package/dist/{client → vercel/client}/mockModel.js +12 -13
- package/dist/vercel/client/mockModel.js.map +1 -0
- package/dist/{client → vercel/client}/saveInputMessages.d.ts +2 -2
- package/dist/vercel/client/saveInputMessages.d.ts.map +1 -0
- package/dist/vercel/client/saveInputMessages.js.map +1 -0
- package/dist/{client → vercel/client}/search.d.ts +119 -22
- package/dist/vercel/client/search.d.ts.map +1 -0
- package/dist/{client → vercel/client}/search.js +2 -2
- package/dist/vercel/client/search.js.map +1 -0
- package/dist/{client → vercel/client}/start.d.ts +26 -11
- package/dist/vercel/client/start.d.ts.map +1 -0
- package/dist/{client → vercel/client}/start.js +64 -22
- package/dist/vercel/client/start.js.map +1 -0
- package/dist/{client → vercel/client}/streamText.d.ts +13 -12
- package/dist/vercel/client/streamText.d.ts.map +1 -0
- package/dist/{client → vercel/client}/streamText.js +43 -9
- package/dist/vercel/client/streamText.js.map +1 -0
- package/dist/{client → vercel/client}/streaming.d.ts +1410 -183
- package/dist/vercel/client/streaming.d.ts.map +1 -0
- package/dist/{client → vercel/client}/streaming.js +120 -52
- package/dist/vercel/client/streaming.js.map +1 -0
- package/dist/vercel/client/types.d.ts +456 -0
- package/dist/vercel/client/types.d.ts.map +1 -0
- package/dist/vercel/client/types.js +3 -0
- package/dist/vercel/client/types.js.map +1 -0
- package/dist/{client → vercel/client}/utils.d.ts +3 -2
- package/dist/vercel/client/utils.d.ts.map +1 -0
- package/dist/{client → vercel/client}/utils.js +2 -2
- package/dist/vercel/client/utils.js.map +1 -0
- package/dist/{deltas.d.ts → vercel/deltas.d.ts} +3 -4
- package/dist/vercel/deltas.d.ts.map +1 -0
- package/dist/{deltas.js → vercel/deltas.js} +195 -99
- package/dist/vercel/deltas.js.map +1 -0
- package/dist/{client → vercel}/index.d.ts +482 -106
- package/dist/vercel/index.d.ts.map +1 -0
- package/dist/{client → vercel}/index.js +64 -46
- package/dist/vercel/index.js.map +1 -0
- package/dist/{mapping.d.ts → vercel/mapping.d.ts} +5 -19
- package/dist/vercel/mapping.d.ts.map +1 -0
- package/dist/{mapping.js → vercel/mapping.js} +411 -114
- package/dist/vercel/mapping.js.map +1 -0
- package/dist/{react → vercel/react}/optimisticallySendMessage.d.ts +2 -2
- package/dist/vercel/react/optimisticallySendMessage.d.ts.map +1 -0
- package/dist/vercel/react/optimisticallySendMessage.js.map +1 -0
- package/dist/{react → vercel/react}/types.d.ts +1 -1
- package/dist/vercel/react/types.d.ts.map +1 -0
- package/dist/{react → vercel/react}/types.js.map +1 -1
- package/dist/{react → vercel/react}/useDeltaStreams.d.ts +1 -1
- package/dist/vercel/react/useDeltaStreams.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useDeltaStreams.js +1 -1
- package/dist/vercel/react/useDeltaStreams.js.map +1 -0
- package/dist/{react → vercel/react}/useStreamingUIMessages.d.ts +1 -1
- package/dist/vercel/react/useStreamingUIMessages.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useStreamingUIMessages.js +7 -3
- package/dist/vercel/react/useStreamingUIMessages.js.map +1 -0
- package/dist/{react → vercel/react}/useThreadMessages.d.ts +1 -1
- package/dist/vercel/react/useThreadMessages.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useThreadMessages.js +1 -1
- package/dist/vercel/react/useThreadMessages.js.map +1 -0
- package/dist/{react → vercel/react}/useUIMessages.d.ts +1 -1
- package/dist/vercel/react/useUIMessages.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useUIMessages.js +1 -1
- package/dist/vercel/react/useUIMessages.js.map +1 -0
- package/package.json +29 -22
- package/src/client/messages.ts +5 -107
- package/src/client/types.ts +0 -608
- package/src/component/_generated/component.ts +1089 -48
- package/src/component/messages.test.ts +273 -1
- package/src/component/messages.ts +62 -32
- package/src/component/streams.ts +47 -47
- package/src/component/threads.ts +5 -2
- package/src/eslintConfig.test.ts +44 -0
- package/src/react/index.ts +8 -5
- package/src/shared.ts +26 -36
- package/src/streaming/materializePersistedUIMessageChunks.test.ts +513 -0
- package/src/streaming/materializePersistedUIMessageChunks.ts +398 -0
- package/src/streaming/persistedUIMessageChunks.test.ts +205 -0
- package/src/streaming/persistedUIMessageChunks.ts +658 -0
- package/src/validators.test.ts +4 -1
- package/src/validators.ts +89 -8
- package/src/{UIMessages.combineUIMessages.test.ts → vercel/UIMessages.combineUIMessages.test.ts} +4 -1
- package/src/{UIMessages.ts → vercel/UIMessages.ts} +95 -3
- package/src/{client → vercel/client}/approval.test.ts +23 -13
- package/src/{client → vercel/client}/createTool.ts +62 -22
- package/src/{client → vercel/client}/definePlaygroundAPI.ts +15 -16
- package/src/{client → vercel/client}/files.ts +2 -2
- package/src/{client → vercel/client}/index.test.ts +99 -31
- package/src/vercel/client/messages.ts +182 -0
- package/src/{client → vercel/client}/mockModel.ts +38 -39
- package/src/{client → vercel/client}/saveInputMessages.test.ts +1 -1
- package/src/{client → vercel/client}/saveInputMessages.ts +3 -3
- package/src/{client → vercel/client}/search.test.ts +3 -3
- package/src/{client → vercel/client}/search.ts +4 -4
- package/src/{client → vercel/client}/setup.test.ts +6 -3
- package/src/vercel/client/start.test.ts +14 -0
- package/src/{client → vercel/client}/start.ts +147 -36
- package/src/vercel/client/streamText.test.ts +223 -0
- package/src/{client → vercel/client}/streamText.ts +102 -31
- package/src/{client → vercel/client}/streaming.integration.test.ts +6 -3
- package/src/{client → vercel/client}/streaming.test.ts +178 -4
- package/src/{client → vercel/client}/streaming.ts +114 -52
- package/src/vercel/client/types.test.ts +13 -0
- package/src/vercel/client/types.ts +679 -0
- package/src/{client → vercel/client}/utils.ts +13 -7
- package/src/{deltas.test.ts → vercel/deltas.test.ts} +384 -93
- package/src/{deltas.ts → vercel/deltas.ts} +218 -115
- package/src/{fromUIMessages.test.ts → vercel/fromUIMessages.test.ts} +17 -1
- package/src/{client → vercel}/index.ts +167 -84
- package/src/{mapping.test.ts → vercel/mapping.test.ts} +377 -92
- package/src/{mapping.ts → vercel/mapping.ts} +501 -137
- package/src/{react → vercel/react}/optimisticallySendMessage.ts +2 -2
- package/src/{react → vercel/react}/types.ts +1 -1
- package/src/{react → vercel/react}/useDeltaStreams.ts +6 -2
- package/src/{react → vercel/react}/useStreamingUIMessages.ts +7 -3
- package/src/{react → vercel/react}/useThreadMessages.ts +2 -2
- package/src/{react → vercel/react}/useUIMessages.ts +2 -2
- package/src/{toUIMessages.test.ts → vercel/toUIMessages.test.ts} +49 -2
- package/dist/UIMessages.d.ts.map +0 -1
- package/dist/UIMessages.js.map +0 -1
- package/dist/client/createTool.d.ts.map +0 -1
- package/dist/client/createTool.js.map +0 -1
- package/dist/client/definePlaygroundAPI.js.map +0 -1
- package/dist/client/files.d.ts.map +0 -1
- package/dist/client/files.js.map +0 -1
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/mockModel.d.ts.map +0 -1
- package/dist/client/mockModel.js.map +0 -1
- package/dist/client/saveInputMessages.d.ts.map +0 -1
- package/dist/client/saveInputMessages.js.map +0 -1
- package/dist/client/search.d.ts.map +0 -1
- package/dist/client/search.js.map +0 -1
- package/dist/client/start.d.ts.map +0 -1
- package/dist/client/start.js.map +0 -1
- package/dist/client/streamText.d.ts.map +0 -1
- package/dist/client/streamText.js.map +0 -1
- package/dist/client/streaming.d.ts.map +0 -1
- package/dist/client/streaming.js.map +0 -1
- package/dist/client/utils.d.ts.map +0 -1
- package/dist/client/utils.js.map +0 -1
- package/dist/deltas.d.ts.map +0 -1
- package/dist/deltas.js.map +0 -1
- package/dist/mapping.d.ts.map +0 -1
- package/dist/mapping.js.map +0 -1
- package/dist/react/optimisticallySendMessage.d.ts.map +0 -1
- package/dist/react/optimisticallySendMessage.js.map +0 -1
- package/dist/react/types.d.ts.map +0 -1
- package/dist/react/useDeltaStreams.d.ts.map +0 -1
- package/dist/react/useDeltaStreams.js.map +0 -1
- package/dist/react/useStreamingUIMessages.d.ts.map +0 -1
- package/dist/react/useStreamingUIMessages.js.map +0 -1
- package/dist/react/useThreadMessages.d.ts.map +0 -1
- package/dist/react/useThreadMessages.js.map +0 -1
- package/dist/react/useUIMessages.d.ts.map +0 -1
- package/dist/react/useUIMessages.js.map +0 -1
- package/src/client/streamText.test.ts +0 -102
- /package/dist/{client → vercel/client}/files.js +0 -0
- /package/dist/{client → vercel/client}/saveInputMessages.js +0 -0
- /package/dist/{react → vercel/react}/optimisticallySendMessage.js +0 -0
- /package/dist/{react → vercel/react}/types.js +0 -0
- /package/src/{UIMessages.test.ts → vercel/UIMessages.test.ts} +0 -0
- /package/src/{react → vercel/react}/useUIMessages.test.ts +0 -0
|
@@ -1,23 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal AI SDK implementation for the Agent API.
|
|
3
|
+
*
|
|
4
|
+
* Consumers continue to import this API from `@convex-dev/agent`. A public
|
|
5
|
+
* `@convex-dev/agent/vercel` entry point is intentionally deferred until its
|
|
6
|
+
* provider-adapter API is defined.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
import type { JSONValue } from "@ai-sdk/provider";
|
|
2
10
|
import type {
|
|
11
|
+
Context,
|
|
3
12
|
FlexibleSchema,
|
|
4
13
|
IdGenerator,
|
|
5
14
|
InferSchema,
|
|
6
15
|
} from "@ai-sdk/provider-utils";
|
|
7
16
|
import type {
|
|
8
|
-
CallSettings,
|
|
9
17
|
EmbeddingModel,
|
|
10
18
|
GenerateObjectResult,
|
|
11
19
|
GenerateTextResult,
|
|
12
20
|
LanguageModel,
|
|
21
|
+
Instructions,
|
|
13
22
|
ModelMessage,
|
|
23
|
+
Output as AISDKOutput,
|
|
14
24
|
StepResult,
|
|
15
25
|
StopCondition,
|
|
16
26
|
StreamTextResult,
|
|
17
27
|
ToolChoice,
|
|
18
28
|
ToolSet,
|
|
19
29
|
} from "ai";
|
|
20
|
-
import { generateObject, generateText,
|
|
30
|
+
import { generateObject, generateText, isStepCount, streamObject } from "ai";
|
|
21
31
|
|
|
22
32
|
const MIGRATION_URL = "node_modules/@convex-dev/agent/MIGRATION.md";
|
|
23
33
|
const warnedDeprecations = new Set<string>();
|
|
@@ -43,9 +53,9 @@ import { type VectorDimension } from "../component/vector/tables.js";
|
|
|
43
53
|
import {
|
|
44
54
|
toModelMessage,
|
|
45
55
|
serializeMessage,
|
|
46
|
-
|
|
56
|
+
serializeResponseMessages,
|
|
47
57
|
serializeObjectResult,
|
|
48
|
-
} from "
|
|
58
|
+
} from "./mapping.js";
|
|
49
59
|
import { getModelName, getProviderName } from "../shared.js";
|
|
50
60
|
import {
|
|
51
61
|
vMessageEmbeddings,
|
|
@@ -65,16 +75,16 @@ import {
|
|
|
65
75
|
saveMessages,
|
|
66
76
|
type SaveMessageArgs,
|
|
67
77
|
type SaveMessagesArgs,
|
|
68
|
-
} from "./messages.js";
|
|
78
|
+
} from "./client/messages.js";
|
|
69
79
|
import {
|
|
70
80
|
embedMany,
|
|
71
81
|
embedMessages,
|
|
72
82
|
fetchContextMessages,
|
|
73
83
|
generateAndSaveEmbeddings,
|
|
74
|
-
} from "./search.js";
|
|
75
|
-
import { startGeneration } from "./start.js";
|
|
76
|
-
import { syncStreams, type StreamingOptions } from "./streaming.js";
|
|
77
|
-
import { createThread, getThreadMetadata } from "
|
|
84
|
+
} from "./client/search.js";
|
|
85
|
+
import { startGeneration } from "./client/start.js";
|
|
86
|
+
import { syncStreams, type StreamingOptions } from "./client/streaming.js";
|
|
87
|
+
import { createThread, getThreadMetadata } from "../client/threads.js";
|
|
78
88
|
import type {
|
|
79
89
|
ActionCtx,
|
|
80
90
|
AgentComponent,
|
|
@@ -96,12 +106,16 @@ import type {
|
|
|
96
106
|
UsageHandler,
|
|
97
107
|
QueryCtx,
|
|
98
108
|
AgentPrompt,
|
|
99
|
-
|
|
100
|
-
} from "./types.js";
|
|
101
|
-
import { streamText } from "./streamText.js";
|
|
102
|
-
import {
|
|
109
|
+
AgentCallSettings,
|
|
110
|
+
} from "./client/types.js";
|
|
111
|
+
import { streamText } from "./client/streamText.js";
|
|
112
|
+
import {
|
|
113
|
+
errorToString,
|
|
114
|
+
hasSuccessfulToolCall,
|
|
115
|
+
willContinue,
|
|
116
|
+
} from "./client/utils.js";
|
|
103
117
|
|
|
104
|
-
export { stepCountIs } from "ai";
|
|
118
|
+
export { isStepCount, stepCountIs } from "ai";
|
|
105
119
|
export { hasSuccessfulToolCall };
|
|
106
120
|
export {
|
|
107
121
|
docsToModelMessages,
|
|
@@ -112,7 +126,7 @@ export {
|
|
|
112
126
|
serializeDataOrUrl,
|
|
113
127
|
serializeMessage,
|
|
114
128
|
toUIFilePart,
|
|
115
|
-
} from "
|
|
129
|
+
} from "./mapping.js";
|
|
116
130
|
// NOTE: these are also exported via @convex-dev/agent/validators
|
|
117
131
|
// a future version may put them all here or move these over there
|
|
118
132
|
export { extractText, isTool, sorted } from "../shared.js";
|
|
@@ -138,13 +152,13 @@ export {
|
|
|
138
152
|
type ThreadDoc,
|
|
139
153
|
type Usage,
|
|
140
154
|
} from "../validators.js";
|
|
141
|
-
export { createTool, type ToolCtx } from "./createTool.js";
|
|
155
|
+
export { createTool, type ToolCtx } from "./client/createTool.js";
|
|
142
156
|
export {
|
|
143
157
|
definePlaygroundAPI,
|
|
144
158
|
type AgentsFn,
|
|
145
159
|
type PlaygroundAPI,
|
|
146
|
-
} from "./definePlaygroundAPI.js";
|
|
147
|
-
export { getFile, storeFile } from "./files.js";
|
|
160
|
+
} from "./client/definePlaygroundAPI.js";
|
|
161
|
+
export { getFile, storeFile } from "./client/files.js";
|
|
148
162
|
export {
|
|
149
163
|
listMessages,
|
|
150
164
|
listUIMessages,
|
|
@@ -152,8 +166,8 @@ export {
|
|
|
152
166
|
saveMessages,
|
|
153
167
|
type SaveMessageArgs,
|
|
154
168
|
type SaveMessagesArgs,
|
|
155
|
-
} from "./messages.js";
|
|
156
|
-
export { mockModel } from "./mockModel.js";
|
|
169
|
+
} from "./client/messages.js";
|
|
170
|
+
export { mockModel } from "./client/mockModel.js";
|
|
157
171
|
export {
|
|
158
172
|
fetchContextMessages,
|
|
159
173
|
filterOutOrphanedToolMessages,
|
|
@@ -161,8 +175,8 @@ export {
|
|
|
161
175
|
generateAndSaveEmbeddings,
|
|
162
176
|
embedMessages,
|
|
163
177
|
embedMany,
|
|
164
|
-
} from "./search.js";
|
|
165
|
-
export { startGeneration } from "./start.js";
|
|
178
|
+
} from "./client/search.js";
|
|
179
|
+
export { startGeneration } from "./client/start.js";
|
|
166
180
|
export {
|
|
167
181
|
DEFAULT_STREAMING_OPTIONS,
|
|
168
182
|
DeltaStreamer,
|
|
@@ -171,16 +185,15 @@ export {
|
|
|
171
185
|
listStreams,
|
|
172
186
|
syncStreams,
|
|
173
187
|
vStreamMessagesReturnValue,
|
|
174
|
-
} from "./streaming.js";
|
|
188
|
+
} from "./client/streaming.js";
|
|
175
189
|
export {
|
|
176
190
|
createThread,
|
|
177
191
|
getThreadMetadata,
|
|
178
192
|
searchThreadTitles,
|
|
179
193
|
updateThreadMetadata,
|
|
180
|
-
} from "
|
|
181
|
-
export type { ContextHandler } from "./types.js";
|
|
182
|
-
export { toUIMessages, fromUIMessages, type UIMessage } from "
|
|
183
|
-
|
|
194
|
+
} from "../client/threads.js";
|
|
195
|
+
export type { ContextHandler } from "./client/types.js";
|
|
196
|
+
export { toUIMessages, fromUIMessages, type UIMessage } from "./UIMessages.js";
|
|
184
197
|
export type {
|
|
185
198
|
AgentComponent,
|
|
186
199
|
Config,
|
|
@@ -237,7 +250,7 @@ export class Agent<
|
|
|
237
250
|
* The default system prompt to put in each request.
|
|
238
251
|
* Override per-prompt by passing the "system" parameter.
|
|
239
252
|
*/
|
|
240
|
-
instructions?:
|
|
253
|
+
instructions?: Instructions;
|
|
241
254
|
/**
|
|
242
255
|
* Tools that the agent can call out to and get responses from.
|
|
243
256
|
* They can be AI SDK tools (import {tool} from "ai")
|
|
@@ -386,6 +399,7 @@ export class Agent<
|
|
|
386
399
|
T extends {
|
|
387
400
|
_internal?: { generateId?: IdGenerator };
|
|
388
401
|
},
|
|
402
|
+
RUNTIME_CONTEXT extends Context = Context,
|
|
389
403
|
>(
|
|
390
404
|
ctx: ActionCtx & CustomCtx,
|
|
391
405
|
/**
|
|
@@ -408,19 +422,34 @@ export class Agent<
|
|
|
408
422
|
* aborted, it will trigger this signal when detected.
|
|
409
423
|
*/
|
|
410
424
|
abortSignal?: AbortSignal;
|
|
425
|
+
runtimeContext?: RUNTIME_CONTEXT;
|
|
411
426
|
stopWhen?:
|
|
412
|
-
| StopCondition<
|
|
413
|
-
|
|
427
|
+
| StopCondition<
|
|
428
|
+
TOOLS extends undefined ? AgentTools : TOOLS,
|
|
429
|
+
RUNTIME_CONTEXT
|
|
430
|
+
>
|
|
431
|
+
| Array<
|
|
432
|
+
StopCondition<
|
|
433
|
+
TOOLS extends undefined ? AgentTools : TOOLS,
|
|
434
|
+
RUNTIME_CONTEXT
|
|
435
|
+
>
|
|
436
|
+
>;
|
|
414
437
|
},
|
|
415
438
|
options?: Options & { userId?: string | null; threadId?: string },
|
|
439
|
+
operation?:
|
|
440
|
+
| "generateText"
|
|
441
|
+
| "streamText"
|
|
442
|
+
| "generateObject"
|
|
443
|
+
| "streamObject",
|
|
416
444
|
): Promise<{
|
|
417
445
|
args: T & {
|
|
418
|
-
|
|
446
|
+
instructions?: Instructions;
|
|
419
447
|
model: LanguageModel;
|
|
420
448
|
prompt?: never;
|
|
421
449
|
messages: ModelMessage[];
|
|
450
|
+
runtimeContext?: RUNTIME_CONTEXT;
|
|
422
451
|
tools?: TOOLS extends undefined ? AgentTools : TOOLS;
|
|
423
|
-
} &
|
|
452
|
+
} & AgentCallSettings;
|
|
424
453
|
order: number;
|
|
425
454
|
stepOrder: number;
|
|
426
455
|
userId: string | undefined;
|
|
@@ -428,7 +457,10 @@ export class Agent<
|
|
|
428
457
|
updateModel: (model: LanguageModel | undefined) => void;
|
|
429
458
|
save: <TOOLS extends ToolSet>(
|
|
430
459
|
toSave:
|
|
431
|
-
| {
|
|
460
|
+
| {
|
|
461
|
+
step: StepResult<TOOLS, RUNTIME_CONTEXT>;
|
|
462
|
+
responseMessages?: ModelMessage[];
|
|
463
|
+
}
|
|
432
464
|
| { object: GenerateObjectResult<unknown> },
|
|
433
465
|
createPendingMessage?: boolean,
|
|
434
466
|
) => Promise<void>;
|
|
@@ -436,13 +468,14 @@ export class Agent<
|
|
|
436
468
|
getSavedMessages: () => MessageDoc[];
|
|
437
469
|
}> {
|
|
438
470
|
type Tools = TOOLS extends undefined ? AgentTools : TOOLS;
|
|
439
|
-
return startGeneration<T, Tools, CustomCtx>(
|
|
471
|
+
return startGeneration<T, Tools, CustomCtx, RUNTIME_CONTEXT>(
|
|
440
472
|
ctx,
|
|
441
473
|
this.component,
|
|
442
474
|
{
|
|
443
475
|
...args,
|
|
444
476
|
tools: (args.tools ?? this.options.tools) as Tools,
|
|
445
|
-
|
|
477
|
+
instructions:
|
|
478
|
+
args.instructions ?? args.system ?? this.options.instructions,
|
|
446
479
|
stopWhen: (args.stopWhen ?? this.options.stopWhen) as any,
|
|
447
480
|
},
|
|
448
481
|
{
|
|
@@ -451,6 +484,7 @@ export class Agent<
|
|
|
451
484
|
agentName: this.options.name,
|
|
452
485
|
agentForToolCtx: this,
|
|
453
486
|
},
|
|
487
|
+
operation,
|
|
454
488
|
);
|
|
455
489
|
}
|
|
456
490
|
|
|
@@ -469,7 +503,11 @@ export class Agent<
|
|
|
469
503
|
*/
|
|
470
504
|
async generateText<
|
|
471
505
|
TOOLS extends ToolSet | undefined = undefined,
|
|
472
|
-
OUTPUT extends Output<any, any, any> =
|
|
506
|
+
OUTPUT extends AISDKOutput.Output<any, any, any> = AISDKOutput.Output<
|
|
507
|
+
string,
|
|
508
|
+
string
|
|
509
|
+
>,
|
|
510
|
+
RUNTIME_CONTEXT extends Context = Context,
|
|
473
511
|
>(
|
|
474
512
|
ctx: ActionCtx & CustomCtx,
|
|
475
513
|
threadOpts: { userId?: string | null; threadId?: string },
|
|
@@ -477,34 +515,56 @@ export class Agent<
|
|
|
477
515
|
* The arguments to the generateText function, similar to the ai sdk's
|
|
478
516
|
* {@link generateText} function, along with Agent prompt options.
|
|
479
517
|
*/
|
|
480
|
-
generateTextArgs:
|
|
518
|
+
generateTextArgs: TextArgs<AgentTools, TOOLS, OUTPUT, RUNTIME_CONTEXT>,
|
|
481
519
|
options?: Options,
|
|
482
520
|
): Promise<
|
|
483
|
-
GenerateTextResult<
|
|
521
|
+
GenerateTextResult<
|
|
522
|
+
TOOLS extends undefined ? AgentTools : TOOLS,
|
|
523
|
+
RUNTIME_CONTEXT,
|
|
524
|
+
OUTPUT
|
|
525
|
+
> &
|
|
484
526
|
GenerationOutputMetadata
|
|
485
527
|
> {
|
|
486
528
|
const { args, promptMessageId, order, ...call } = await this.start(
|
|
487
529
|
ctx,
|
|
488
530
|
generateTextArgs,
|
|
489
531
|
{ ...threadOpts, ...options },
|
|
532
|
+
"generateText",
|
|
490
533
|
);
|
|
491
534
|
|
|
492
535
|
type Tools = TOOLS extends undefined ? AgentTools : TOOLS;
|
|
493
|
-
const steps: StepResult<Tools>[] = [];
|
|
536
|
+
const steps: StepResult<Tools, RUNTIME_CONTEXT>[] = [];
|
|
537
|
+
let initialResponseMessages: ModelMessage[] = [];
|
|
538
|
+
let initialResponseMessagesSaved = false;
|
|
494
539
|
try {
|
|
495
|
-
const result = (await generateText<Tools, OUTPUT>({
|
|
540
|
+
const result = (await generateText<Tools, RUNTIME_CONTEXT, OUTPUT>({
|
|
496
541
|
...args,
|
|
497
542
|
prepareStep: async (options) => {
|
|
543
|
+
if (options.stepNumber === 0) {
|
|
544
|
+
initialResponseMessages = [...options.responseMessages];
|
|
545
|
+
}
|
|
498
546
|
const result = await generateTextArgs.prepareStep?.(options);
|
|
499
547
|
call.updateModel(result?.model ?? options.model);
|
|
500
548
|
return result;
|
|
501
549
|
},
|
|
502
|
-
|
|
550
|
+
onStepEnd: async (step) => {
|
|
503
551
|
steps.push(step);
|
|
504
|
-
await call.save(
|
|
505
|
-
|
|
552
|
+
await call.save(
|
|
553
|
+
{
|
|
554
|
+
step,
|
|
555
|
+
responseMessages: [
|
|
556
|
+
...(initialResponseMessagesSaved ? [] : initialResponseMessages),
|
|
557
|
+
...step.response.messages,
|
|
558
|
+
],
|
|
559
|
+
},
|
|
560
|
+
await willContinue(steps, args.stopWhen),
|
|
561
|
+
);
|
|
562
|
+
initialResponseMessagesSaved = true;
|
|
563
|
+
return (
|
|
564
|
+
generateTextArgs.onStepEnd ?? generateTextArgs.onStepFinish
|
|
565
|
+
)?.(step);
|
|
506
566
|
},
|
|
507
|
-
})) as GenerateTextResult<Tools, OUTPUT>;
|
|
567
|
+
})) as GenerateTextResult<Tools, RUNTIME_CONTEXT, OUTPUT>;
|
|
508
568
|
const metadata: GenerationOutputMetadata = {
|
|
509
569
|
promptMessageId,
|
|
510
570
|
order,
|
|
@@ -527,7 +587,12 @@ export class Agent<
|
|
|
527
587
|
*/
|
|
528
588
|
async streamText<
|
|
529
589
|
TOOLS extends ToolSet | undefined = undefined,
|
|
530
|
-
OUTPUT extends Output<any, any, any> =
|
|
590
|
+
OUTPUT extends AISDKOutput.Output<any, any, any> = AISDKOutput.Output<
|
|
591
|
+
string,
|
|
592
|
+
string,
|
|
593
|
+
never
|
|
594
|
+
>,
|
|
595
|
+
RUNTIME_CONTEXT extends Context = Context,
|
|
531
596
|
>(
|
|
532
597
|
ctx: ActionCtx & CustomCtx,
|
|
533
598
|
threadOpts: { userId?: string | null; threadId?: string },
|
|
@@ -535,7 +600,12 @@ export class Agent<
|
|
|
535
600
|
* The arguments to the streamText function, similar to the ai sdk's
|
|
536
601
|
* {@link streamText} function, along with Agent prompt options.
|
|
537
602
|
*/
|
|
538
|
-
streamTextArgs:
|
|
603
|
+
streamTextArgs: StreamingTextArgs<
|
|
604
|
+
AgentTools,
|
|
605
|
+
TOOLS,
|
|
606
|
+
OUTPUT,
|
|
607
|
+
RUNTIME_CONTEXT
|
|
608
|
+
>,
|
|
539
609
|
/**
|
|
540
610
|
* The {@link ContextOptions} and {@link StorageOptions}
|
|
541
611
|
* options to use for fetching contextual messages and saving input/output messages.
|
|
@@ -554,18 +624,25 @@ export class Agent<
|
|
|
554
624
|
saveStreamDeltas?: boolean | StreamingOptions;
|
|
555
625
|
},
|
|
556
626
|
): Promise<
|
|
557
|
-
StreamTextResult<
|
|
627
|
+
StreamTextResult<
|
|
628
|
+
TOOLS extends undefined ? AgentTools : TOOLS,
|
|
629
|
+
RUNTIME_CONTEXT,
|
|
630
|
+
OUTPUT
|
|
631
|
+
> &
|
|
558
632
|
GenerationOutputMetadata
|
|
559
633
|
> {
|
|
560
634
|
type Tools = TOOLS extends undefined ? AgentTools : TOOLS;
|
|
561
|
-
return streamText<
|
|
635
|
+
return streamText<AgentTools, TOOLS, OUTPUT, RUNTIME_CONTEXT>(
|
|
562
636
|
ctx,
|
|
563
637
|
this.component,
|
|
564
638
|
{
|
|
565
639
|
...streamTextArgs,
|
|
566
640
|
model: streamTextArgs.model ?? this.options.languageModel,
|
|
567
641
|
tools: (streamTextArgs.tools ?? this.options.tools) as Tools,
|
|
568
|
-
|
|
642
|
+
instructions:
|
|
643
|
+
streamTextArgs.instructions ??
|
|
644
|
+
streamTextArgs.system ??
|
|
645
|
+
this.options.instructions,
|
|
569
646
|
stopWhen: (streamTextArgs.stopWhen ?? this.options.stopWhen) as any,
|
|
570
647
|
},
|
|
571
648
|
{
|
|
@@ -600,8 +677,7 @@ export class Agent<
|
|
|
600
677
|
* The arguments to the generateObject function, similar to the ai sdk's
|
|
601
678
|
* {@link generateObject} function, along with Agent prompt options.
|
|
602
679
|
*/
|
|
603
|
-
generateObjectArgs:
|
|
604
|
-
GenerateObjectArgs<SCHEMA, OUTPUT, RESULT>,
|
|
680
|
+
generateObjectArgs: GenerateObjectArgs<SCHEMA, OUTPUT, RESULT>,
|
|
605
681
|
/**
|
|
606
682
|
* The {@link ContextOptions} and {@link StorageOptions}
|
|
607
683
|
* options to use for fetching contextual messages and saving input/output messages.
|
|
@@ -609,7 +685,12 @@ export class Agent<
|
|
|
609
685
|
options?: Options,
|
|
610
686
|
): Promise<GenerateObjectResult<RESULT> & GenerationOutputMetadata> {
|
|
611
687
|
const { args, promptMessageId, order, fail, save, getSavedMessages } =
|
|
612
|
-
await this.start(
|
|
688
|
+
await this.start(
|
|
689
|
+
ctx,
|
|
690
|
+
generateObjectArgs,
|
|
691
|
+
{ ...threadOpts, ...options },
|
|
692
|
+
"generateObject",
|
|
693
|
+
);
|
|
613
694
|
|
|
614
695
|
try {
|
|
615
696
|
const result = (await generateObject(
|
|
@@ -652,7 +733,7 @@ export class Agent<
|
|
|
652
733
|
* The arguments to the streamObject function, similar to the ai sdk's
|
|
653
734
|
* {@link streamObject} function, along with Agent prompt options.
|
|
654
735
|
*/
|
|
655
|
-
streamObjectArgs:
|
|
736
|
+
streamObjectArgs: StreamObjectArgs<SCHEMA, OUTPUT, RESULT>,
|
|
656
737
|
/**
|
|
657
738
|
* The {@link ContextOptions} and {@link StorageOptions}
|
|
658
739
|
* options to use for fetching contextual messages and saving input/output messages.
|
|
@@ -663,7 +744,12 @@ export class Agent<
|
|
|
663
744
|
GenerationOutputMetadata
|
|
664
745
|
> {
|
|
665
746
|
const { args, promptMessageId, order, fail, save, getSavedMessages } =
|
|
666
|
-
await this.start(
|
|
747
|
+
await this.start(
|
|
748
|
+
ctx,
|
|
749
|
+
streamObjectArgs,
|
|
750
|
+
{ ...threadOpts, ...options },
|
|
751
|
+
"streamObject",
|
|
752
|
+
);
|
|
667
753
|
|
|
668
754
|
const stream = streamObject<SCHEMA, OUTPUT, RESULT>({
|
|
669
755
|
...(args as any),
|
|
@@ -1183,8 +1269,7 @@ export class Agent<
|
|
|
1183
1269
|
|
|
1184
1270
|
/**
|
|
1185
1271
|
* Explicitly save a "step" created by the AI SDK. For multi-step generation
|
|
1186
|
-
* loops,
|
|
1187
|
-
* see the arg JSDoc for why.
|
|
1272
|
+
* loops, each SDK 7 step already owns its response messages.
|
|
1188
1273
|
* @param ctx The ctx argument to a mutation or action.
|
|
1189
1274
|
* @param args The Step generated by the AI SDK.
|
|
1190
1275
|
*/
|
|
@@ -1201,14 +1286,7 @@ export class Agent<
|
|
|
1201
1286
|
* The step to save, possibly including multiple tool calls.
|
|
1202
1287
|
*/
|
|
1203
1288
|
step: StepResult<TOOLS>;
|
|
1204
|
-
/**
|
|
1205
|
-
* The previous step in the same generation loop, if any. Pass it so we
|
|
1206
|
-
* can compute how many of `step.response.messages` are already saved.
|
|
1207
|
-
* Omit for the first step. AI SDK v6's `step.response.messages` is
|
|
1208
|
-
* cumulative across steps; without this, multi-step callers duplicate
|
|
1209
|
-
* every prior message on every save — the exact failure mode this fix
|
|
1210
|
-
* addresses, just at the public-API layer.
|
|
1211
|
-
*/
|
|
1289
|
+
/** @deprecated SDK 7 response messages are step-local. */
|
|
1212
1290
|
previousStep?: StepResult<TOOLS>;
|
|
1213
1291
|
/**
|
|
1214
1292
|
* The model used to generate the step.
|
|
@@ -1222,19 +1300,7 @@ export class Agent<
|
|
|
1222
1300
|
provider?: string;
|
|
1223
1301
|
},
|
|
1224
1302
|
): Promise<{ messages: MessageDoc[] }> {
|
|
1225
|
-
const
|
|
1226
|
-
args.previousStep?.response.messages.length ?? 0;
|
|
1227
|
-
if (
|
|
1228
|
-
args.previousStep !== undefined &&
|
|
1229
|
-
args.step.response.messages.length < previousResponseMessageCount
|
|
1230
|
-
) {
|
|
1231
|
-
throw new Error(
|
|
1232
|
-
`saveStep: step.response.messages length (${args.step.response.messages.length}) is less than ` +
|
|
1233
|
-
`previousStep.response.messages length (${previousResponseMessageCount}). ` +
|
|
1234
|
-
`Ensure previousStep is from the immediately preceding step in the same generation loop.`,
|
|
1235
|
-
);
|
|
1236
|
-
}
|
|
1237
|
-
const { messages } = await serializeNewMessagesInStep(
|
|
1303
|
+
const { messages } = await serializeResponseMessages(
|
|
1238
1304
|
ctx,
|
|
1239
1305
|
this.component,
|
|
1240
1306
|
args.step,
|
|
@@ -1242,7 +1308,9 @@ export class Agent<
|
|
|
1242
1308
|
provider: args.provider ?? getProviderName(this.options.languageModel),
|
|
1243
1309
|
model: args.model ?? getModelName(this.options.languageModel),
|
|
1244
1310
|
},
|
|
1245
|
-
|
|
1311
|
+
args.step.response.messages.length > 0
|
|
1312
|
+
? args.step.response.messages
|
|
1313
|
+
: [{ role: "assistant", content: [] }],
|
|
1246
1314
|
);
|
|
1247
1315
|
const embeddings = await this.generateEmbeddings(
|
|
1248
1316
|
ctx,
|
|
@@ -1557,25 +1625,34 @@ export class Agent<
|
|
|
1557
1625
|
*/
|
|
1558
1626
|
stopWhen?: StopCondition<AgentTools> | Array<StopCondition<AgentTools>>;
|
|
1559
1627
|
} & Options,
|
|
1560
|
-
overrides?:
|
|
1628
|
+
overrides?: AgentCallSettings,
|
|
1561
1629
|
) {
|
|
1562
1630
|
return internalActionGeneric({
|
|
1563
1631
|
args: vTextArgs,
|
|
1564
1632
|
handler: async (ctx_, args) => {
|
|
1565
1633
|
const stream =
|
|
1566
1634
|
args.stream === true ? spec?.stream || true : (spec?.stream ?? false);
|
|
1567
|
-
const {
|
|
1635
|
+
const {
|
|
1636
|
+
userId,
|
|
1637
|
+
threadId,
|
|
1638
|
+
prompt,
|
|
1639
|
+
messages,
|
|
1640
|
+
maxSteps,
|
|
1641
|
+
system,
|
|
1642
|
+
...rest
|
|
1643
|
+
} = args;
|
|
1568
1644
|
const targetArgs = { userId, threadId };
|
|
1569
1645
|
const llmArgs = {
|
|
1570
1646
|
stopWhen: spec?.stopWhen,
|
|
1571
1647
|
...overrides,
|
|
1572
1648
|
...omit(rest, ["storageOptions", "contextOptions", "stream"]),
|
|
1649
|
+
instructions: system,
|
|
1573
1650
|
messages: messages?.map(toModelMessage),
|
|
1574
1651
|
prompt: Array.isArray(prompt) ? prompt.map(toModelMessage) : prompt,
|
|
1575
1652
|
toolChoice: args.toolChoice as ToolChoice<AgentTools>,
|
|
1576
|
-
}
|
|
1653
|
+
} as any;
|
|
1577
1654
|
if (maxSteps) {
|
|
1578
|
-
llmArgs.stopWhen =
|
|
1655
|
+
llmArgs.stopWhen = isStepCount(maxSteps);
|
|
1579
1656
|
}
|
|
1580
1657
|
const opts = {
|
|
1581
1658
|
...pick(spec, ["contextOptions", "storageOptions"]),
|
|
@@ -1636,13 +1713,19 @@ export class Agent<
|
|
|
1636
1713
|
return internalActionGeneric({
|
|
1637
1714
|
args: vSafeObjectArgs,
|
|
1638
1715
|
handler: async (ctx_, args) => {
|
|
1639
|
-
const { userId, threadId, callSettings, ...rest } = args;
|
|
1716
|
+
const { userId, threadId, callSettings, system, ...rest } = args;
|
|
1717
|
+
const {
|
|
1718
|
+
instructions: configuredInstructions,
|
|
1719
|
+
system: configuredSystem,
|
|
1720
|
+
...configuredObjectArgs
|
|
1721
|
+
} = objectArgs;
|
|
1640
1722
|
const overrides = pick(rest, ["contextOptions", "storageOptions"]);
|
|
1641
1723
|
const targetArgs = { userId, threadId };
|
|
1642
1724
|
const llmArgs = {
|
|
1643
|
-
...
|
|
1725
|
+
...configuredObjectArgs,
|
|
1644
1726
|
...callSettings,
|
|
1645
1727
|
...omit(rest, ["storageOptions", "contextOptions"]),
|
|
1728
|
+
instructions: system ?? configuredInstructions ?? configuredSystem,
|
|
1646
1729
|
messages: args.messages?.map(toModelMessage),
|
|
1647
1730
|
prompt: Array.isArray(args.prompt)
|
|
1648
1731
|
? args.prompt.map(toModelMessage)
|