@convex-dev/agent 0.6.3 → 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/apiKeys.js +5 -5
- package/dist/component/apiKeys.js.map +1 -1
- package/dist/component/files.d.ts.map +1 -1
- package/dist/component/files.js +13 -11
- package/dist/component/files.js.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 +83 -47
- 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 +46 -47
- package/dist/component/streams.js.map +1 -1
- package/dist/component/threads.d.ts.map +1 -1
- package/dist/component/threads.js +8 -9
- package/dist/component/threads.js.map +1 -1
- package/dist/component/users.js +2 -2
- package/dist/component/users.js.map +1 -1
- package/dist/component/vector/index.d.ts.map +1 -1
- package/dist/component/vector/index.js +14 -8
- package/dist/component/vector/index.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 +593 -134
- package/dist/{client → vercel/client}/definePlaygroundAPI.d.ts.map +1 -1
- package/dist/{client → vercel/client}/definePlaygroundAPI.js +13 -9
- 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/vercel/deltas.d.ts +31 -0
- package/dist/vercel/deltas.d.ts.map +1 -0
- package/dist/vercel/deltas.js +525 -0
- package/dist/vercel/deltas.js.map +1 -0
- package/dist/{client → vercel}/index.d.ts +484 -97
- package/dist/vercel/index.d.ts.map +1 -0
- package/dist/{client → vercel}/index.js +65 -38
- package/dist/vercel/index.js.map +1 -0
- package/dist/{mapping.d.ts → vercel/mapping.d.ts} +5 -13
- package/dist/vercel/mapping.d.ts.map +1 -0
- package/dist/{mapping.js → vercel/mapping.js} +411 -112
- 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/vercel/react/useStreamingUIMessages.js +112 -0
- 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 +2 -1
- package/dist/vercel/react/useUIMessages.d.ts.map +1 -0
- package/dist/{react → vercel/react}/useUIMessages.js +8 -4
- package/dist/vercel/react/useUIMessages.js.map +1 -0
- package/package.json +30 -22
- package/src/client/messages.ts +5 -107
- package/src/client/types.ts +0 -621
- package/src/component/_generated/component.ts +1089 -48
- package/src/component/apiKeys.ts +5 -5
- package/src/component/files.test.ts +1 -1
- package/src/component/files.ts +14 -12
- package/src/component/messages.test.ts +273 -1
- package/src/component/messages.ts +99 -57
- package/src/component/streams.ts +80 -64
- package/src/component/threads.ts +12 -9
- package/src/component/users.ts +2 -2
- package/src/component/vector/index.ts +14 -7
- 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} +96 -5
- package/src/{client → vercel/client}/approval.test.ts +48 -19
- package/src/{client → vercel/client}/createTool.ts +63 -23
- package/src/{client → vercel/client}/definePlaygroundAPI.ts +44 -29
- package/src/{client → vercel/client}/files.ts +2 -2
- package/src/{client → vercel/client}/index.test.ts +162 -3
- 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 +7 -4
- 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 +40 -115
- 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/vercel/deltas.test.ts +898 -0
- package/src/vercel/deltas.ts +633 -0
- package/src/{fromUIMessages.test.ts → vercel/fromUIMessages.test.ts} +17 -1
- package/src/{client → vercel}/index.ts +169 -62
- package/src/vercel/mapping.test.ts +965 -0
- package/src/{mapping.ts → vercel/mapping.ts} +501 -131
- 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 +67 -35
- package/src/{react → vercel/react}/useThreadMessages.ts +2 -2
- package/src/{react → vercel/react}/useUIMessages.test.ts +80 -1
- package/src/{react → vercel/react}/useUIMessages.ts +13 -5
- 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 +0 -43
- package/dist/deltas.d.ts.map +0 -1
- package/dist/deltas.js +0 -446
- 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 +0 -92
- 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/src/deltas.test.ts +0 -626
- package/src/deltas.ts +0 -569
- package/src/mapping.test.ts +0 -402
- /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
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
5
|
-
import type
|
|
6
|
-
|
|
1
|
+
import { type GenerateObjectResult, type IdGenerator, type LanguageModel, type Instructions, type ModelMessage, type StepResult, type StopCondition, type ToolSet } from "ai";
|
|
2
|
+
import type { Context } from "@ai-sdk/provider-utils";
|
|
3
|
+
import type { ActionCtx, AgentCallSettings, AgentComponent, Config, Options } from "./types.js";
|
|
4
|
+
import type { Message, MessageDoc } from "../../validators.js";
|
|
5
|
+
import { type ModelOrMetadata } from "../../shared.js";
|
|
6
|
+
import type { Agent } from "../index.js";
|
|
7
|
+
export declare function resolveUsageModel(toSave: {
|
|
8
|
+
step: {
|
|
9
|
+
model?: ModelOrMetadata;
|
|
10
|
+
};
|
|
11
|
+
} | {
|
|
12
|
+
object: unknown;
|
|
13
|
+
}, activeModel: ModelOrMetadata): ModelOrMetadata;
|
|
14
|
+
export declare function startGeneration<T, Tools extends ToolSet = ToolSet, CustomCtx extends object = object, RUNTIME_CONTEXT extends Context = Context>(ctx: ActionCtx & CustomCtx, component: AgentComponent,
|
|
7
15
|
/**
|
|
8
16
|
* These are the arguments you'll pass to the LLM call such as
|
|
9
17
|
* `generateText` or `streamText`. This function will look up the context
|
|
@@ -44,13 +52,18 @@ args: T & {
|
|
|
44
52
|
* the promptMessageId message, if provided.
|
|
45
53
|
*/
|
|
46
54
|
messages?: (ModelMessage | Message)[];
|
|
55
|
+
instructions?: Instructions;
|
|
56
|
+
/** @deprecated Use instructions. */
|
|
57
|
+
system?: Instructions;
|
|
58
|
+
allowSystemInMessages?: boolean;
|
|
47
59
|
/**
|
|
48
60
|
* The abort signal to be passed to the LLM call. If triggered, it will
|
|
49
61
|
* mark the pending message as failed. If the generation is asynchronously
|
|
50
62
|
* aborted, it will trigger this signal when detected.
|
|
51
63
|
*/
|
|
52
64
|
abortSignal?: AbortSignal;
|
|
53
|
-
|
|
65
|
+
runtimeContext?: RUNTIME_CONTEXT;
|
|
66
|
+
stopWhen?: StopCondition<Tools, RUNTIME_CONTEXT> | Array<StopCondition<Tools, RUNTIME_CONTEXT>>;
|
|
54
67
|
_internal?: {
|
|
55
68
|
generateId?: IdGenerator;
|
|
56
69
|
};
|
|
@@ -60,21 +73,23 @@ args: T & {
|
|
|
60
73
|
languageModel?: LanguageModel;
|
|
61
74
|
agentName: string;
|
|
62
75
|
agentForToolCtx?: Agent;
|
|
63
|
-
}): Promise<{
|
|
76
|
+
}, _operation?: "generateText" | "streamText" | "generateObject" | "streamObject"): Promise<{
|
|
64
77
|
args: T & {
|
|
65
|
-
|
|
78
|
+
instructions?: Instructions;
|
|
66
79
|
model: LanguageModel;
|
|
67
80
|
messages: ModelMessage[];
|
|
68
81
|
prompt?: never;
|
|
69
82
|
tools?: Tools;
|
|
70
|
-
|
|
83
|
+
runtimeContext?: RUNTIME_CONTEXT;
|
|
84
|
+
} & AgentCallSettings;
|
|
71
85
|
order: number;
|
|
72
86
|
stepOrder: number;
|
|
73
87
|
userId: string | undefined;
|
|
74
88
|
promptMessageId: string | undefined;
|
|
75
89
|
updateModel: (model: ModelOrMetadata | undefined) => void;
|
|
76
90
|
save: <TOOLS extends ToolSet>(toSave: {
|
|
77
|
-
step: StepResult<TOOLS>;
|
|
91
|
+
step: StepResult<TOOLS, RUNTIME_CONTEXT>;
|
|
92
|
+
responseMessages?: ModelMessage[];
|
|
78
93
|
} | {
|
|
79
94
|
object: GenerateObjectResult<unknown>;
|
|
80
95
|
}, createPendingMessage?: boolean, finishStreamId?: string) => Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/vercel/client/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isStepCount, } from "ai";
|
|
2
2
|
import { serializeResponseMessages, serializeObjectResult, } from "../mapping.js";
|
|
3
3
|
import { embedMessages, fetchContextWithPrompt } from "./search.js";
|
|
4
|
-
import { getModelName, getProviderName, } from "
|
|
4
|
+
import { getModelName, getProviderName, } from "../../shared.js";
|
|
5
5
|
import { wrapTools } from "./createTool.js";
|
|
6
6
|
import { assert, omit } from "convex-helpers";
|
|
7
7
|
import { saveInputMessages } from "./saveInputMessages.js";
|
|
8
|
+
export function resolveUsageModel(toSave, activeModel) {
|
|
9
|
+
return "step" in toSave ? (toSave.step.model ?? activeModel) : activeModel;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The raw handler promises request and, for non-streaming calls, response
|
|
13
|
+
* bodies. Preserve explicit caller choices while opting in to those bodies.
|
|
14
|
+
*/
|
|
15
|
+
function rawRequestResponseInclude(args, enabled, operation) {
|
|
16
|
+
if (!enabled)
|
|
17
|
+
return undefined;
|
|
18
|
+
const requested = {
|
|
19
|
+
...args.experimental_include,
|
|
20
|
+
...args.include,
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
...requested,
|
|
24
|
+
requestBody: requested.requestBody ?? true,
|
|
25
|
+
...((operation === "generateText" || operation === "generateObject")
|
|
26
|
+
? { responseBody: requested.responseBody ?? true }
|
|
27
|
+
: {}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
8
30
|
export async function startGeneration(ctx, component,
|
|
9
31
|
/**
|
|
10
32
|
* These are the arguments you'll pass to the LLM call such as
|
|
@@ -13,7 +35,7 @@ export async function startGeneration(ctx, component,
|
|
|
13
35
|
* The type of the arguments returned infers from the type of the arguments
|
|
14
36
|
* you pass here.
|
|
15
37
|
*/
|
|
16
|
-
args, { threadId, ...opts }) {
|
|
38
|
+
args, { threadId, ...opts }, _operation) {
|
|
17
39
|
const userId = opts.userId ??
|
|
18
40
|
(threadId &&
|
|
19
41
|
(await ctx.runQuery(component.threads.getThread, { threadId }))
|
|
@@ -27,6 +49,11 @@ args, { threadId, ...opts }) {
|
|
|
27
49
|
prompt: args.prompt,
|
|
28
50
|
promptMessageId: args.promptMessageId,
|
|
29
51
|
});
|
|
52
|
+
const allowSystemInMessages = args.allowSystemInMessages ?? true;
|
|
53
|
+
if (!allowSystemInMessages &&
|
|
54
|
+
context.messages.some((message) => message.role === "system")) {
|
|
55
|
+
throw new Error("System messages in assembled message history require allowSystemInMessages: true. Use instructions for top-level system guidance.");
|
|
56
|
+
}
|
|
30
57
|
const saveMessages = opts.storageOptions?.saveMessages ?? "promptAndOutput";
|
|
31
58
|
const { promptMessageId, pendingMessage, savedMessages } = threadId && saveMessages !== "none"
|
|
32
59
|
? await saveInputMessages(ctx, component, {
|
|
@@ -49,13 +76,23 @@ args, { threadId, ...opts }) {
|
|
|
49
76
|
const model = args.model ?? opts.languageModel;
|
|
50
77
|
assert(model, "model is required");
|
|
51
78
|
let activeModel = model;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
79
|
+
// Both the caller's AbortSignal listener and AI SDK's onAbort can report
|
|
80
|
+
// the same cancellation. Share the one finalization instead of racing two
|
|
81
|
+
// mutations for the pending message.
|
|
82
|
+
let pendingMessageFailure;
|
|
83
|
+
const fail = (reason) => {
|
|
84
|
+
if (!pendingMessageId)
|
|
85
|
+
return Promise.resolve();
|
|
86
|
+
if (!pendingMessageFailure) {
|
|
87
|
+
const messageId = pendingMessageId;
|
|
88
|
+
pendingMessageFailure = ctx
|
|
89
|
+
.runMutation(component.messages.finalizeMessage, {
|
|
90
|
+
messageId,
|
|
56
91
|
result: { status: "failed", error: reason },
|
|
57
|
-
})
|
|
92
|
+
})
|
|
93
|
+
.then(() => undefined);
|
|
58
94
|
}
|
|
95
|
+
return pendingMessageFailure;
|
|
59
96
|
};
|
|
60
97
|
if (args.abortSignal) {
|
|
61
98
|
const abortSignal = args.abortSignal;
|
|
@@ -71,26 +108,26 @@ args, { threadId, ...opts }) {
|
|
|
71
108
|
agent: opts.agentForToolCtx,
|
|
72
109
|
};
|
|
73
110
|
const tools = wrapTools(toolCtx, args.tools);
|
|
111
|
+
const argsWithoutSystem = omit(args, ["system"]);
|
|
112
|
+
const { promptMessageId: _promptMessageId, messages: _messages, prompt: _prompt, instructions: _instructions, onStepFinish: _onStepFinish, ...aiCallArgs } = argsWithoutSystem;
|
|
113
|
+
const include = rawRequestResponseInclude(aiCallArgs, Boolean(opts.rawRequestResponseHandler), _operation);
|
|
74
114
|
const aiArgs = {
|
|
75
115
|
...opts.callSettings,
|
|
76
116
|
providerOptions: opts.providerOptions,
|
|
77
|
-
...
|
|
117
|
+
...aiCallArgs,
|
|
78
118
|
model,
|
|
79
119
|
messages: context.messages,
|
|
80
|
-
|
|
120
|
+
instructions: args.instructions ?? args.system,
|
|
121
|
+
allowSystemInMessages,
|
|
122
|
+
stopWhen: args.stopWhen ?? (opts.maxSteps ? isStepCount(opts.maxSteps) : undefined),
|
|
81
123
|
tools,
|
|
124
|
+
...(include ? { include } : {}),
|
|
82
125
|
};
|
|
83
126
|
// NOTE: We intentionally do NOT override _internal.generateId here.
|
|
84
127
|
// The AI SDK uses generateId() for many internal IDs (approval IDs,
|
|
85
128
|
// tool execution IDs, message IDs, etc.) and they must be unique.
|
|
86
129
|
// The pending message is linked via the explicit `pendingMessageId`
|
|
87
130
|
// parameter passed to addMessages in the save closure.
|
|
88
|
-
// Track how many response messages we've already saved across steps.
|
|
89
|
-
// step.response.messages is cumulative — each step appends to it.
|
|
90
|
-
// We need to know which messages are new in each step to serialize
|
|
91
|
-
// only the new ones (important for tool approval flows where the SDK
|
|
92
|
-
// may add extra messages like approval tool-results).
|
|
93
|
-
let previousResponseMessageCount = 0;
|
|
94
131
|
return {
|
|
95
132
|
args: aiArgs,
|
|
96
133
|
order: order ?? 0,
|
|
@@ -116,10 +153,13 @@ args, { threadId, ...opts }) {
|
|
|
116
153
|
serialized = await serializeObjectResult(ctx, component, toSave.object, activeModel);
|
|
117
154
|
}
|
|
118
155
|
else {
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
156
|
+
const newResponseMessages = toSave.responseMessages ?? toSave.step.response.messages;
|
|
157
|
+
// Even an empty completed step needs a durable assistant result so
|
|
158
|
+
// the pending message can be finalized at the storage boundary.
|
|
159
|
+
const responseMessagesToSave = newResponseMessages.length > 0
|
|
160
|
+
? newResponseMessages
|
|
161
|
+
: [{ role: "assistant", content: [] }];
|
|
162
|
+
serialized = await serializeResponseMessages(ctx, component, toSave.step, activeModel, responseMessagesToSave);
|
|
123
163
|
}
|
|
124
164
|
const embeddings = await embedMessages(ctx, { threadId, ...opts, userId }, serialized.messages.map((m) => m.message));
|
|
125
165
|
if (createPendingMessage) {
|
|
@@ -150,6 +190,7 @@ args, { threadId, ...opts }) {
|
|
|
150
190
|
}
|
|
151
191
|
else {
|
|
152
192
|
pendingMessageId = lastMessage._id;
|
|
193
|
+
pendingMessageFailure = undefined;
|
|
153
194
|
savedMessages.push(...saved.messages.slice(0, -1));
|
|
154
195
|
}
|
|
155
196
|
}
|
|
@@ -169,12 +210,13 @@ args, { threadId, ...opts }) {
|
|
|
169
210
|
});
|
|
170
211
|
}
|
|
171
212
|
if (opts.usageHandler && output.usage) {
|
|
213
|
+
const usageModel = resolveUsageModel(toSave, activeModel);
|
|
172
214
|
await opts.usageHandler(ctx, {
|
|
173
215
|
userId,
|
|
174
216
|
threadId,
|
|
175
217
|
agentName: opts.agentName,
|
|
176
|
-
model: getModelName(
|
|
177
|
-
provider: getProviderName(
|
|
218
|
+
model: getModelName(usageModel),
|
|
219
|
+
provider: getProviderName(usageModel),
|
|
178
220
|
usage: output.usage,
|
|
179
221
|
providerMetadata: output.providerMetadata,
|
|
180
222
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/vercel/client/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import type { StreamTextResult, ToolSet } from "ai";
|
|
2
|
-
import {
|
|
2
|
+
import type { Context } from "@ai-sdk/provider-utils";
|
|
3
3
|
import { type StreamingOptions } from "./streaming.js";
|
|
4
|
-
import type { ActionCtx, AgentComponent,
|
|
5
|
-
import type {
|
|
4
|
+
import type { ActionCtx, AgentComponent, GenerationOutputMetadata, Options, StreamingTextArgs } from "./types.js";
|
|
5
|
+
import type { Output as AISDKOutput } from "ai";
|
|
6
|
+
import type { Agent } from "../index.js";
|
|
7
|
+
/** Finish every abort cleanup path before surfacing an internal failure. */
|
|
8
|
+
export declare function runAbortCleanup(cleanup: {
|
|
9
|
+
failCall: () => Promise<void>;
|
|
10
|
+
failStreamer: () => Promise<void>;
|
|
11
|
+
onAbort?: () => PromiseLike<void> | void;
|
|
12
|
+
}): Promise<void>;
|
|
6
13
|
/**
|
|
7
14
|
* This behaves like {@link streamText} from the "ai" package except that
|
|
8
15
|
* it add context based on the userId and threadId and saves the input and
|
|
@@ -10,18 +17,12 @@ import type { Agent } from "./index.js";
|
|
|
10
17
|
* Use {@link continueThread} to get a version of this function already scoped
|
|
11
18
|
* to a thread (and optionally userId).
|
|
12
19
|
*/
|
|
13
|
-
export declare function streamText<TOOLS extends ToolSet, OUTPUT extends Output<any, any, any> = never>(ctx: ActionCtx, component: AgentComponent,
|
|
20
|
+
export declare function streamText<AgentTools extends ToolSet, TOOLS extends ToolSet | undefined = undefined, OUTPUT extends AISDKOutput.Output<any, any, any> = AISDKOutput.Output<string, string, never>, RUNTIME_CONTEXT extends Context = Context>(ctx: ActionCtx, component: AgentComponent,
|
|
14
21
|
/**
|
|
15
22
|
* The arguments to the streamText function, similar to the ai sdk's
|
|
16
23
|
* {@link streamText} function, along with Agent prompt options.
|
|
17
24
|
*/
|
|
18
|
-
streamTextArgs:
|
|
19
|
-
/**
|
|
20
|
-
* The tools to use for the tool calls. This will override tools specified
|
|
21
|
-
* in the Agent constructor or createThread / continueThread.
|
|
22
|
-
*/
|
|
23
|
-
tools?: TOOLS;
|
|
24
|
-
},
|
|
25
|
+
streamTextArgs: StreamingTextArgs<AgentTools, TOOLS, OUTPUT, RUNTIME_CONTEXT>,
|
|
25
26
|
/**
|
|
26
27
|
* The {@link ContextOptions} and {@link StorageOptions}
|
|
27
28
|
* options to use for fetching contextual messages and saving input/output messages.
|
|
@@ -42,5 +43,5 @@ options: Options & {
|
|
|
42
43
|
*/
|
|
43
44
|
saveStreamDeltas?: boolean | StreamingOptions;
|
|
44
45
|
agentForToolCtx?: Agent;
|
|
45
|
-
}): Promise<StreamTextResult<TOOLS, OUTPUT> & GenerationOutputMetadata>;
|
|
46
|
+
}): Promise<StreamTextResult<TOOLS extends undefined ? AgentTools : TOOLS, RUNTIME_CONTEXT, OUTPUT> & GenerationOutputMetadata>;
|
|
46
47
|
//# sourceMappingURL=streamText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamText.d.ts","sourceRoot":"","sources":["../../../src/vercel/client/streamText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,gBAAgB,EAChB,OAAO,EAER,MAAM,IAAI,CAAC;AACZ,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,wBAAwB,EACxB,OAAO,EACP,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,IAAI,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,4EAA4E;AAC5E,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1C,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,UAAU,SAAS,OAAO,EAC1B,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAC7C,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CACnE,MAAM,EACN,MAAM,EACN,KAAK,CACN,EACD,eAAe,SAAS,OAAO,GAAG,OAAO,EAEzC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,cAAc;AACzB;;;GAGG;AACH,cAAc,EAAE,iBAAiB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC;AAC7E;;;GAGG;AACH,OAAO,EAAE,OAAO,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAC9C,eAAe,CAAC,EAAE,KAAK,CAAC;CACzB,GACA,OAAO,CACR,gBAAgB,CACd,KAAK,SAAS,SAAS,GAAG,UAAU,GAAG,KAAK,EAC5C,eAAe,EACf,MAAM,CACP,GACC,wBAAwB,CAC3B,CA4LA"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { streamText as streamTextAi } from "ai";
|
|
2
2
|
import { compressUIMessageChunks, DeltaStreamer, mergeTransforms, } from "./streaming.js";
|
|
3
3
|
import { startGeneration } from "./start.js";
|
|
4
|
-
import { getModelName, getProviderName } from "
|
|
4
|
+
import { getModelName, getProviderName } from "../../shared.js";
|
|
5
5
|
import { errorToString, willContinue } from "./utils.js";
|
|
6
|
+
/** Finish every abort cleanup path before surfacing an internal failure. */
|
|
7
|
+
export async function runAbortCleanup(cleanup) {
|
|
8
|
+
const results = await Promise.allSettled([
|
|
9
|
+
cleanup.failCall(),
|
|
10
|
+
cleanup.failStreamer(),
|
|
11
|
+
]);
|
|
12
|
+
await cleanup.onAbort?.();
|
|
13
|
+
const failure = results.find((result) => result.status === "rejected");
|
|
14
|
+
if (failure)
|
|
15
|
+
throw failure.reason;
|
|
16
|
+
}
|
|
6
17
|
/**
|
|
7
18
|
* This behaves like {@link streamText} from the "ai" package except that
|
|
8
19
|
* it add context based on the userId and threadId and saves the input and
|
|
@@ -22,8 +33,14 @@ streamTextArgs,
|
|
|
22
33
|
*/
|
|
23
34
|
options) {
|
|
24
35
|
const { threadId } = options ?? {};
|
|
25
|
-
const { args, userId, order, stepOrder, promptMessageId, ...call } = await startGeneration(ctx, component, streamTextArgs, options);
|
|
36
|
+
const { args, userId, order, stepOrder, promptMessageId, ...call } = await startGeneration(ctx, component, streamTextArgs, options, "streamText");
|
|
26
37
|
const steps = [];
|
|
38
|
+
let initialResponseMessages = [];
|
|
39
|
+
let initialResponseMessagesSaved = false;
|
|
40
|
+
const responseMessagesForStep = (step) => [
|
|
41
|
+
...(initialResponseMessagesSaved ? [] : initialResponseMessages),
|
|
42
|
+
...step.response.messages,
|
|
43
|
+
];
|
|
27
44
|
// Track the final step for atomic save with stream finish (issue #181).
|
|
28
45
|
// Only used when streamText awaits stream consumption itself; the
|
|
29
46
|
// `returnImmediately` path saves inline instead (see onStepFinish below).
|
|
@@ -66,7 +83,19 @@ options) {
|
|
|
66
83
|
await streamer?.fail(errorToString(error.error));
|
|
67
84
|
return streamTextArgs.onError?.(error);
|
|
68
85
|
},
|
|
86
|
+
onAbort: async (event) => {
|
|
87
|
+
const reason = args.abortSignal?.reason
|
|
88
|
+
? errorToString(args.abortSignal.reason)
|
|
89
|
+
: "streamText aborted";
|
|
90
|
+
await runAbortCleanup({
|
|
91
|
+
failCall: () => call.fail(reason),
|
|
92
|
+
failStreamer: async () => streamer?.fail(reason),
|
|
93
|
+
onAbort: () => streamTextArgs.onAbort?.(event),
|
|
94
|
+
});
|
|
95
|
+
},
|
|
69
96
|
prepareStep: async (options) => {
|
|
97
|
+
if (options.stepNumber === 0)
|
|
98
|
+
initialResponseMessages = [...options.responseMessages];
|
|
70
99
|
const result = await streamTextArgs.prepareStep?.(options);
|
|
71
100
|
if (result) {
|
|
72
101
|
const model = result.model ?? options.model;
|
|
@@ -80,7 +109,7 @@ options) {
|
|
|
80
109
|
}
|
|
81
110
|
return undefined;
|
|
82
111
|
},
|
|
83
|
-
|
|
112
|
+
onStepEnd: async (step) => {
|
|
84
113
|
steps.push(step);
|
|
85
114
|
const createPendingMessage = await willContinue(steps, args.stopWhen);
|
|
86
115
|
if (!createPendingMessage && streamer) {
|
|
@@ -89,20 +118,25 @@ options) {
|
|
|
89
118
|
if (willAwaitStream) {
|
|
90
119
|
// We're about to `await stream` below — defer the save so it
|
|
91
120
|
// happens atomically with stream finish (issue #181).
|
|
92
|
-
pendingFinalStep =
|
|
121
|
+
pendingFinalStep = {
|
|
122
|
+
step,
|
|
123
|
+
responseMessages: responseMessagesForStep(step),
|
|
124
|
+
};
|
|
93
125
|
}
|
|
94
126
|
else {
|
|
95
127
|
// returnImmediately path: streamText is about to return without
|
|
96
128
|
// awaiting consumption, so the deferred-save block below won't
|
|
97
129
|
// see this step. Save inline now (issue #265).
|
|
98
130
|
const finishStreamId = await streamer.getOrCreateStreamId();
|
|
99
|
-
await call.save({ step }, false, finishStreamId);
|
|
131
|
+
await call.save({ step, responseMessages: responseMessagesForStep(step) }, false, finishStreamId);
|
|
132
|
+
initialResponseMessagesSaved = true;
|
|
100
133
|
}
|
|
101
134
|
}
|
|
102
135
|
else {
|
|
103
|
-
await call.save({ step }, createPendingMessage);
|
|
136
|
+
await call.save({ step, responseMessages: responseMessagesForStep(step) }, createPendingMessage);
|
|
137
|
+
initialResponseMessagesSaved = true;
|
|
104
138
|
}
|
|
105
|
-
return
|
|
139
|
+
return (streamTextArgs.onStepEnd ?? streamTextArgs.onStepFinish)?.(step);
|
|
106
140
|
},
|
|
107
141
|
});
|
|
108
142
|
const stream = streamer?.consumeStream(result.toUIMessageStream());
|
|
@@ -119,7 +153,7 @@ options) {
|
|
|
119
153
|
// Save the deferred final step if it was already generated but not yet persisted
|
|
120
154
|
if (pendingFinalStep) {
|
|
121
155
|
try {
|
|
122
|
-
await call.save(
|
|
156
|
+
await call.save(pendingFinalStep, false);
|
|
123
157
|
}
|
|
124
158
|
catch (saveError) {
|
|
125
159
|
console.error("Failed to save deferred final step:", saveError);
|
|
@@ -132,7 +166,7 @@ options) {
|
|
|
132
166
|
// If we deferred the final step save, do it now with atomic stream finish.
|
|
133
167
|
if (pendingFinalStep && streamer) {
|
|
134
168
|
const finishStreamId = await streamer.getOrCreateStreamId();
|
|
135
|
-
await call.save(
|
|
169
|
+
await call.save(pendingFinalStep, false, finishStreamId);
|
|
136
170
|
}
|
|
137
171
|
const metadata = {
|
|
138
172
|
promptMessageId,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamText.js","sourceRoot":"","sources":["../../../src/vercel/client/streamText.ts"],"names":[],"mappings":"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"}
|