@convex-dev/agent 0.6.0-alpha.1 → 0.6.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.
Files changed (181) hide show
  1. package/package.json +1 -1
  2. package/src/UIMessages.ts +135 -0
  3. package/src/client/index.ts +56 -14
  4. package/src/client/search.test.ts +4 -5
  5. package/src/client/search.ts +45 -4
  6. package/src/client/streaming.integration.test.ts +1206 -0
  7. package/src/client/streaming.ts +9 -2
  8. package/src/mapping.test.ts +136 -71
  9. package/src/mapping.ts +81 -28
  10. package/dist/UIMessages.d.ts +0 -46
  11. package/dist/UIMessages.d.ts.map +0 -1
  12. package/dist/UIMessages.js +0 -546
  13. package/dist/UIMessages.js.map +0 -1
  14. package/dist/client/createTool.d.ts +0 -167
  15. package/dist/client/createTool.d.ts.map +0 -1
  16. package/dist/client/createTool.js +0 -116
  17. package/dist/client/createTool.js.map +0 -1
  18. package/dist/client/defaultComponent.d.ts +0 -11
  19. package/dist/client/defaultComponent.d.ts.map +0 -1
  20. package/dist/client/defaultComponent.js +0 -7
  21. package/dist/client/defaultComponent.js.map +0 -1
  22. package/dist/client/definePlaygroundAPI.d.ts +0 -1725
  23. package/dist/client/definePlaygroundAPI.d.ts.map +0 -1
  24. package/dist/client/definePlaygroundAPI.js +0 -271
  25. package/dist/client/definePlaygroundAPI.js.map +0 -1
  26. package/dist/client/files.d.ts +0 -69
  27. package/dist/client/files.d.ts.map +0 -1
  28. package/dist/client/files.js +0 -181
  29. package/dist/client/files.js.map +0 -1
  30. package/dist/client/index.d.ts +0 -2091
  31. package/dist/client/index.d.ts.map +0 -1
  32. package/dist/client/index.js +0 -895
  33. package/dist/client/index.js.map +0 -1
  34. package/dist/client/messages.d.ts +0 -461
  35. package/dist/client/messages.d.ts.map +0 -1
  36. package/dist/client/messages.js +0 -106
  37. package/dist/client/messages.js.map +0 -1
  38. package/dist/client/mockModel.d.ts +0 -42
  39. package/dist/client/mockModel.d.ts.map +0 -1
  40. package/dist/client/mockModel.js +0 -182
  41. package/dist/client/mockModel.js.map +0 -1
  42. package/dist/client/saveInputMessages.d.ts +0 -20
  43. package/dist/client/saveInputMessages.d.ts.map +0 -1
  44. package/dist/client/saveInputMessages.js +0 -58
  45. package/dist/client/saveInputMessages.js.map +0 -1
  46. package/dist/client/search.d.ts +0 -493
  47. package/dist/client/search.d.ts.map +0 -1
  48. package/dist/client/search.js +0 -425
  49. package/dist/client/search.js.map +0 -1
  50. package/dist/client/start.d.ts +0 -84
  51. package/dist/client/start.d.ts.map +0 -1
  52. package/dist/client/start.js +0 -185
  53. package/dist/client/start.js.map +0 -1
  54. package/dist/client/streamText.d.ts +0 -46
  55. package/dist/client/streamText.d.ts.map +0 -1
  56. package/dist/client/streamText.js +0 -117
  57. package/dist/client/streamText.js.map +0 -1
  58. package/dist/client/streaming.d.ts +0 -3778
  59. package/dist/client/streaming.d.ts.map +0 -1
  60. package/dist/client/streaming.js +0 -314
  61. package/dist/client/streaming.js.map +0 -1
  62. package/dist/client/threads.d.ts +0 -46
  63. package/dist/client/threads.d.ts.map +0 -1
  64. package/dist/client/threads.js +0 -49
  65. package/dist/client/threads.js.map +0 -1
  66. package/dist/client/types.d.ts +0 -461
  67. package/dist/client/types.d.ts.map +0 -1
  68. package/dist/client/types.js +0 -2
  69. package/dist/client/types.js.map +0 -1
  70. package/dist/client/utils.d.ts +0 -4
  71. package/dist/client/utils.d.ts.map +0 -1
  72. package/dist/client/utils.js +0 -21
  73. package/dist/client/utils.js.map +0 -1
  74. package/dist/component/_generated/api.d.ts +0 -48
  75. package/dist/component/_generated/api.d.ts.map +0 -1
  76. package/dist/component/_generated/api.js +0 -31
  77. package/dist/component/_generated/api.js.map +0 -1
  78. package/dist/component/_generated/component.d.ts +0 -3120
  79. package/dist/component/_generated/component.d.ts.map +0 -1
  80. package/dist/component/_generated/component.js +0 -11
  81. package/dist/component/_generated/component.js.map +0 -1
  82. package/dist/component/_generated/dataModel.d.ts +0 -46
  83. package/dist/component/_generated/dataModel.d.ts.map +0 -1
  84. package/dist/component/_generated/dataModel.js +0 -11
  85. package/dist/component/_generated/dataModel.js.map +0 -1
  86. package/dist/component/_generated/server.d.ts +0 -121
  87. package/dist/component/_generated/server.d.ts.map +0 -1
  88. package/dist/component/_generated/server.js +0 -78
  89. package/dist/component/_generated/server.js.map +0 -1
  90. package/dist/component/apiKeys.d.ts +0 -11
  91. package/dist/component/apiKeys.d.ts.map +0 -1
  92. package/dist/component/apiKeys.js +0 -69
  93. package/dist/component/apiKeys.js.map +0 -1
  94. package/dist/component/convex.config.d.ts +0 -3
  95. package/dist/component/convex.config.d.ts.map +0 -1
  96. package/dist/component/convex.config.js +0 -3
  97. package/dist/component/convex.config.js.map +0 -1
  98. package/dist/component/files.d.ts +0 -97
  99. package/dist/component/files.d.ts.map +0 -1
  100. package/dist/component/files.js +0 -190
  101. package/dist/component/files.js.map +0 -1
  102. package/dist/component/messages.d.ts +0 -3851
  103. package/dist/component/messages.d.ts.map +0 -1
  104. package/dist/component/messages.js +0 -757
  105. package/dist/component/messages.js.map +0 -1
  106. package/dist/component/schema.d.ts +0 -8026
  107. package/dist/component/schema.d.ts.map +0 -1
  108. package/dist/component/schema.js +0 -147
  109. package/dist/component/schema.js.map +0 -1
  110. package/dist/component/streams.d.ts +0 -128
  111. package/dist/component/streams.d.ts.map +0 -1
  112. package/dist/component/streams.js +0 -413
  113. package/dist/component/streams.js.map +0 -1
  114. package/dist/component/threads.d.ts +0 -115
  115. package/dist/component/threads.d.ts.map +0 -1
  116. package/dist/component/threads.js +0 -208
  117. package/dist/component/threads.js.map +0 -1
  118. package/dist/component/users.d.ts +0 -52
  119. package/dist/component/users.d.ts.map +0 -1
  120. package/dist/component/users.js +0 -229
  121. package/dist/component/users.js.map +0 -1
  122. package/dist/component/vector/index.d.ts +0 -61
  123. package/dist/component/vector/index.d.ts.map +0 -1
  124. package/dist/component/vector/index.js +0 -146
  125. package/dist/component/vector/index.js.map +0 -1
  126. package/dist/component/vector/tables.d.ts +0 -58
  127. package/dist/component/vector/tables.d.ts.map +0 -1
  128. package/dist/component/vector/tables.js +0 -56
  129. package/dist/component/vector/tables.js.map +0 -1
  130. package/dist/deltas.d.ts +0 -43
  131. package/dist/deltas.d.ts.map +0 -1
  132. package/dist/deltas.js +0 -446
  133. package/dist/deltas.js.map +0 -1
  134. package/dist/mapping.d.ts +0 -72
  135. package/dist/mapping.d.ts.map +0 -1
  136. package/dist/mapping.js +0 -677
  137. package/dist/mapping.js.map +0 -1
  138. package/dist/react/SmoothText.d.ts +0 -5
  139. package/dist/react/SmoothText.d.ts.map +0 -1
  140. package/dist/react/SmoothText.js +0 -6
  141. package/dist/react/SmoothText.js.map +0 -1
  142. package/dist/react/index.d.ts +0 -25
  143. package/dist/react/index.d.ts.map +0 -1
  144. package/dist/react/index.js +0 -70
  145. package/dist/react/index.js.map +0 -1
  146. package/dist/react/optimisticallySendMessage.d.ts +0 -42
  147. package/dist/react/optimisticallySendMessage.d.ts.map +0 -1
  148. package/dist/react/optimisticallySendMessage.js +0 -74
  149. package/dist/react/optimisticallySendMessage.js.map +0 -1
  150. package/dist/react/types.d.ts +0 -12
  151. package/dist/react/types.d.ts.map +0 -1
  152. package/dist/react/types.js +0 -2
  153. package/dist/react/types.js.map +0 -1
  154. package/dist/react/useDeltaStreams.d.ts +0 -10
  155. package/dist/react/useDeltaStreams.d.ts.map +0 -1
  156. package/dist/react/useDeltaStreams.js +0 -106
  157. package/dist/react/useDeltaStreams.js.map +0 -1
  158. package/dist/react/useSmoothText.d.ts +0 -27
  159. package/dist/react/useSmoothText.d.ts.map +0 -1
  160. package/dist/react/useSmoothText.js +0 -68
  161. package/dist/react/useSmoothText.js.map +0 -1
  162. package/dist/react/useStreamingUIMessages.d.ts +0 -22
  163. package/dist/react/useStreamingUIMessages.d.ts.map +0 -1
  164. package/dist/react/useStreamingUIMessages.js +0 -92
  165. package/dist/react/useStreamingUIMessages.js.map +0 -1
  166. package/dist/react/useThreadMessages.d.ts +0 -104
  167. package/dist/react/useThreadMessages.d.ts.map +0 -1
  168. package/dist/react/useThreadMessages.js +0 -148
  169. package/dist/react/useThreadMessages.js.map +0 -1
  170. package/dist/react/useUIMessages.d.ts +0 -96
  171. package/dist/react/useUIMessages.d.ts.map +0 -1
  172. package/dist/react/useUIMessages.js +0 -108
  173. package/dist/react/useUIMessages.js.map +0 -1
  174. package/dist/shared.d.ts +0 -26
  175. package/dist/shared.d.ts.map +0 -1
  176. package/dist/shared.js +0 -67
  177. package/dist/shared.js.map +0 -1
  178. package/dist/validators.d.ts +0 -24516
  179. package/dist/validators.d.ts.map +0 -1
  180. package/dist/validators.js +0 -475
  181. package/dist/validators.js.map +0 -1
@@ -1,185 +0,0 @@
1
- import { stepCountIs, } from "ai";
2
- import { serializeNewMessagesInStep, serializeObjectResult, } from "../mapping.js";
3
- import { embedMessages, fetchContextWithPrompt } from "./search.js";
4
- import { getModelName, getProviderName, } from "../shared.js";
5
- import { wrapTools } from "./createTool.js";
6
- import { assert, omit } from "convex-helpers";
7
- import { saveInputMessages } from "./saveInputMessages.js";
8
- export async function startGeneration(ctx, component,
9
- /**
10
- * These are the arguments you'll pass to the LLM call such as
11
- * `generateText` or `streamText`. This function will look up the context
12
- * and provide functions to save the steps, abort the generation, and more.
13
- * The type of the arguments returned infers from the type of the arguments
14
- * you pass here.
15
- */
16
- args, { threadId, ...opts }) {
17
- const userId = opts.userId ??
18
- (threadId &&
19
- (await ctx.runQuery(component.threads.getThread, { threadId }))
20
- ?.userId) ??
21
- undefined;
22
- const context = await fetchContextWithPrompt(ctx, component, {
23
- ...opts,
24
- userId,
25
- threadId,
26
- messages: args.messages,
27
- prompt: args.prompt,
28
- promptMessageId: args.promptMessageId,
29
- });
30
- const saveMessages = opts.storageOptions?.saveMessages ?? "promptAndOutput";
31
- const { promptMessageId, pendingMessage, savedMessages } = threadId && saveMessages !== "none"
32
- ? await saveInputMessages(ctx, component, {
33
- ...opts,
34
- userId,
35
- threadId,
36
- prompt: args.prompt,
37
- messages: args.messages,
38
- promptMessageId: args.promptMessageId,
39
- storageOptions: { saveMessages },
40
- })
41
- : {
42
- promptMessageId: args.promptMessageId,
43
- pendingMessage: undefined,
44
- savedMessages: [],
45
- };
46
- const order = pendingMessage?.order ?? context.order;
47
- const stepOrder = pendingMessage?.stepOrder ?? context.stepOrder;
48
- let pendingMessageId = pendingMessage?._id;
49
- const model = args.model ?? opts.languageModel;
50
- assert(model, "model is required");
51
- let activeModel = model;
52
- const fail = async (reason) => {
53
- if (pendingMessageId) {
54
- await ctx.runMutation(component.messages.finalizeMessage, {
55
- messageId: pendingMessageId,
56
- result: { status: "failed", error: reason },
57
- });
58
- }
59
- };
60
- if (args.abortSignal) {
61
- const abortSignal = args.abortSignal;
62
- abortSignal.addEventListener("abort", async () => {
63
- await fail(abortSignal.reason?.toString() ?? "abortSignal");
64
- }, { once: true });
65
- }
66
- const toolCtx = {
67
- ...ctx,
68
- userId,
69
- threadId,
70
- promptMessageId,
71
- agent: opts.agentForToolCtx,
72
- };
73
- const tools = wrapTools(toolCtx, args.tools);
74
- const aiArgs = {
75
- ...opts.callSettings,
76
- providerOptions: opts.providerOptions,
77
- ...omit(args, ["promptMessageId", "messages", "prompt"]),
78
- model,
79
- messages: context.messages,
80
- stopWhen: args.stopWhen ?? (opts.maxSteps ? stepCountIs(opts.maxSteps) : undefined),
81
- tools,
82
- };
83
- // NOTE: We intentionally do NOT override _internal.generateId here.
84
- // The AI SDK uses generateId() for many internal IDs (approval IDs,
85
- // tool execution IDs, message IDs, etc.) and they must be unique.
86
- // The pending message is linked via the explicit `pendingMessageId`
87
- // 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
- return {
95
- args: aiArgs,
96
- order: order ?? 0,
97
- stepOrder: stepOrder ?? 0,
98
- userId,
99
- promptMessageId,
100
- getSavedMessages: () => savedMessages,
101
- updateModel: (model) => {
102
- if (model) {
103
- activeModel = model;
104
- }
105
- },
106
- fail,
107
- save: async (toSave, createPendingMessage,
108
- /**
109
- * If provided, finish this stream atomically with the message save.
110
- * This prevents UI flickering from separate mutations (issue #181).
111
- */
112
- finishStreamId) => {
113
- if (threadId && saveMessages !== "none") {
114
- let serialized;
115
- if ("object" in toSave) {
116
- serialized = await serializeObjectResult(ctx, component, toSave.object, activeModel);
117
- }
118
- else {
119
- const allResponseMessages = toSave.step.response.messages;
120
- const newResponseMessages = allResponseMessages.slice(previousResponseMessageCount);
121
- previousResponseMessageCount = allResponseMessages.length;
122
- serialized = await serializeNewMessagesInStep(ctx, component, toSave.step, activeModel, newResponseMessages);
123
- }
124
- const embeddings = await embedMessages(ctx, { threadId, ...opts, userId }, serialized.messages.map((m) => m.message));
125
- if (createPendingMessage) {
126
- serialized.messages.push({
127
- message: { role: "assistant", content: [] },
128
- status: "pending",
129
- });
130
- embeddings?.vectors.push(null);
131
- }
132
- const saved = await ctx.runMutation(component.messages.addMessages, {
133
- userId,
134
- threadId,
135
- agentName: opts.agentName,
136
- promptMessageId,
137
- pendingMessageId,
138
- messages: serialized.messages,
139
- embeddings,
140
- failPendingSteps: false,
141
- finishStreamId,
142
- });
143
- const lastMessage = saved.messages.at(-1);
144
- if (createPendingMessage) {
145
- if (lastMessage.status === "failed") {
146
- pendingMessageId = undefined;
147
- savedMessages.push(...saved.messages);
148
- await fail(lastMessage.error ??
149
- "Aborting - the pending message was marked as failed");
150
- }
151
- else {
152
- pendingMessageId = lastMessage._id;
153
- savedMessages.push(...saved.messages.slice(0, -1));
154
- }
155
- }
156
- else {
157
- pendingMessageId = undefined;
158
- savedMessages.push(...saved.messages);
159
- }
160
- }
161
- const output = "object" in toSave ? toSave.object : toSave.step;
162
- if (opts.rawRequestResponseHandler) {
163
- await opts.rawRequestResponseHandler(ctx, {
164
- userId,
165
- threadId,
166
- agentName: opts.agentName,
167
- request: output.request,
168
- response: output.response,
169
- });
170
- }
171
- if (opts.usageHandler && output.usage) {
172
- await opts.usageHandler(ctx, {
173
- userId,
174
- threadId,
175
- agentName: opts.agentName,
176
- model: getModelName(activeModel),
177
- provider: getProviderName(activeModel),
178
- usage: output.usage,
179
- providerMetadata: output.providerMetadata,
180
- });
181
- }
182
- },
183
- };
184
- }
185
- //# sourceMappingURL=start.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/client/start.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import type { StreamTextResult, ToolSet } from "ai";
2
- import { streamText as streamTextAi } from "ai";
3
- import { type StreamingOptions } from "./streaming.js";
4
- import type { ActionCtx, AgentComponent, AgentPrompt, GenerationOutputMetadata, Options, Output } from "./types.js";
5
- import type { Agent } from "./index.js";
6
- /**
7
- * This behaves like {@link streamText} from the "ai" package except that
8
- * it add context based on the userId and threadId and saves the input and
9
- * resulting messages to the thread, if specified.
10
- * Use {@link continueThread} to get a version of this function already scoped
11
- * to a thread (and optionally userId).
12
- */
13
- export declare function streamText<TOOLS extends ToolSet, OUTPUT extends Output<any, any, any> = never>(ctx: ActionCtx, component: AgentComponent,
14
- /**
15
- * The arguments to the streamText function, similar to the ai sdk's
16
- * {@link streamText} function, along with Agent prompt options.
17
- */
18
- streamTextArgs: AgentPrompt & Omit<Parameters<typeof streamTextAi<TOOLS, OUTPUT>>[0], "model" | "prompt" | "messages"> & {
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
- /**
26
- * The {@link ContextOptions} and {@link StorageOptions}
27
- * options to use for fetching contextual messages and saving input/output messages.
28
- */
29
- options: Options & {
30
- agentName: string;
31
- userId?: string | null;
32
- threadId?: string;
33
- /**
34
- * Whether to save incremental data (deltas) from streaming responses.
35
- * Defaults to false.
36
- * If false, it will not save any deltas to the database.
37
- * If true, it will save deltas with {@link DEFAULT_STREAMING_OPTIONS}.
38
- *
39
- * Regardless of this option, when streaming you are able to use this
40
- * `streamText` function as you would with the "ai" package's version:
41
- * iterating over the text, streaming it over HTTP, etc.
42
- */
43
- saveStreamDeltas?: boolean | StreamingOptions;
44
- agentForToolCtx?: Agent;
45
- }): Promise<StreamTextResult<TOOLS, OUTPUT> & GenerationOutputMetadata>;
46
- //# sourceMappingURL=streamText.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streamText.d.ts","sourceRoot":"","sources":["../../src/client/streamText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,OAAO,EAER,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,wBAAwB,EACxB,OAAO,EACP,MAAM,EACP,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,KAAK,SAAS,OAAO,EACrB,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,EAE5C,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,cAAc;AACzB;;;GAGG;AACH,cAAc,EAAE,WAAW,GACzB,IAAI,CACF,UAAU,CAAC,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,OAAO,GAAG,QAAQ,GAAG,UAAU,CAChC,GAAG;IACF;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AACH;;;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,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,wBAAwB,CAAC,CA+GrE"}
@@ -1,117 +0,0 @@
1
- import { streamText as streamTextAi } from "ai";
2
- import { compressUIMessageChunks, DeltaStreamer, mergeTransforms, } from "./streaming.js";
3
- import { startGeneration } from "./start.js";
4
- import { getModelName, getProviderName } from "../shared.js";
5
- import { errorToString, willContinue } from "./utils.js";
6
- /**
7
- * This behaves like {@link streamText} from the "ai" package except that
8
- * it add context based on the userId and threadId and saves the input and
9
- * resulting messages to the thread, if specified.
10
- * Use {@link continueThread} to get a version of this function already scoped
11
- * to a thread (and optionally userId).
12
- */
13
- export async function streamText(ctx, component,
14
- /**
15
- * The arguments to the streamText function, similar to the ai sdk's
16
- * {@link streamText} function, along with Agent prompt options.
17
- */
18
- streamTextArgs,
19
- /**
20
- * The {@link ContextOptions} and {@link StorageOptions}
21
- * options to use for fetching contextual messages and saving input/output messages.
22
- */
23
- options) {
24
- const { threadId } = options ?? {};
25
- const { args, userId, order, stepOrder, promptMessageId, ...call } = await startGeneration(ctx, component, streamTextArgs, options);
26
- const steps = [];
27
- // Track the final step for atomic save with stream finish (issue #181)
28
- let pendingFinalStep;
29
- const streamer = threadId && options.saveStreamDeltas
30
- ? new DeltaStreamer(component, ctx, {
31
- throttleMs: typeof options.saveStreamDeltas === "object"
32
- ? options.saveStreamDeltas.throttleMs
33
- : undefined,
34
- onAsyncAbort: call.fail,
35
- compress: compressUIMessageChunks,
36
- abortSignal: args.abortSignal,
37
- }, {
38
- threadId,
39
- userId,
40
- agentName: options?.agentName,
41
- model: getModelName(args.model),
42
- provider: getProviderName(args.model),
43
- providerOptions: args.providerOptions,
44
- format: "UIMessageChunk",
45
- order,
46
- stepOrder,
47
- })
48
- : undefined;
49
- const result = streamTextAi({
50
- ...args,
51
- abortSignal: streamer?.abortController.signal ?? args.abortSignal,
52
- experimental_transform: mergeTransforms(options?.saveStreamDeltas, streamTextArgs.experimental_transform),
53
- onError: async (error) => {
54
- console.error("onError", error);
55
- await call.fail(errorToString(error.error));
56
- await streamer?.fail(errorToString(error.error));
57
- return streamTextArgs.onError?.(error);
58
- },
59
- prepareStep: async (options) => {
60
- const result = await streamTextArgs.prepareStep?.(options);
61
- if (result) {
62
- const model = result.model ?? options.model;
63
- call.updateModel(model);
64
- // streamer?.updateMetadata({
65
- // model: getModelName(model),
66
- // provider: getProviderName(model),
67
- // providerOptions: options.messages.at(-1)?.providerOptions,
68
- // });
69
- return result;
70
- }
71
- return undefined;
72
- },
73
- onStepFinish: async (step) => {
74
- steps.push(step);
75
- const createPendingMessage = await willContinue(steps, args.stopWhen);
76
- if (!createPendingMessage && streamer) {
77
- // This is the final step with streaming enabled.
78
- // Defer saving until stream consumption completes for atomic finish (issue #181).
79
- streamer.markFinishedExternally();
80
- pendingFinalStep = step;
81
- }
82
- else {
83
- await call.save({ step }, createPendingMessage);
84
- }
85
- return args.onStepFinish?.(step);
86
- },
87
- });
88
- const stream = streamer?.consumeStream(result.toUIMessageStream());
89
- if ((typeof options?.saveStreamDeltas === "object" &&
90
- !options.saveStreamDeltas.returnImmediately) ||
91
- options?.saveStreamDeltas === true) {
92
- try {
93
- await stream;
94
- await result.consumeStream();
95
- }
96
- catch (e) {
97
- // If the stream errored (e.g. onStepFinish threw), the DeltaStreamer's
98
- // finish() was never called, leaving the streaming message stuck in
99
- // "streaming" state. Clean it up by marking it as aborted.
100
- await streamer?.fail(e instanceof Error ? e.message : String(e));
101
- throw e;
102
- }
103
- }
104
- // If we deferred the final step save, do it now with atomic stream finish.
105
- if (pendingFinalStep && streamer) {
106
- const finishStreamId = await streamer.getOrCreateStreamId();
107
- await call.save({ step: pendingFinalStep }, false, finishStreamId);
108
- }
109
- const metadata = {
110
- promptMessageId,
111
- order,
112
- savedMessages: call.getSavedMessages(),
113
- messageId: promptMessageId,
114
- };
115
- return Object.assign(result, metadata);
116
- }
117
- //# sourceMappingURL=streamText.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streamText.js","sourceRoot":"","sources":["../../src/client/streamText.ts"],"names":[],"mappings":"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"}