@trigger.dev/sdk 0.0.0-prerelease-20260304181730 → 0.0.0-prerelease-20260305142821
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/v3/ai.d.ts +118 -16
- package/dist/commonjs/v3/ai.js +212 -33
- package/dist/commonjs/v3/ai.js.map +1 -1
- package/dist/commonjs/v3/chat-react.d.ts +3 -0
- package/dist/commonjs/v3/chat-react.js +8 -0
- package/dist/commonjs/v3/chat-react.js.map +1 -1
- package/dist/commonjs/v3/chat.d.ts +85 -0
- package/dist/commonjs/v3/chat.js +76 -3
- package/dist/commonjs/v3/chat.js.map +1 -1
- package/dist/commonjs/v3/chat.test.js +325 -72
- package/dist/commonjs/v3/chat.test.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/ai.d.ts +118 -16
- package/dist/esm/v3/ai.js +212 -33
- package/dist/esm/v3/ai.js.map +1 -1
- package/dist/esm/v3/chat-react.d.ts +3 -0
- package/dist/esm/v3/chat-react.js +9 -1
- package/dist/esm/v3/chat-react.js.map +1 -1
- package/dist/esm/v3/chat.d.ts +85 -0
- package/dist/esm/v3/chat.js +76 -3
- package/dist/esm/v3/chat.js.map +1 -1
- package/dist/esm/v3/chat.test.js +325 -72
- package/dist/esm/v3/chat.test.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +2 -2
package/dist/esm/v3/ai.js
CHANGED
|
@@ -90,28 +90,6 @@ export { CHAT_MESSAGES_STREAM_ID, CHAT_STOP_STREAM_ID };
|
|
|
90
90
|
// Input streams for bidirectional chat communication
|
|
91
91
|
const messagesInput = streams.input({ id: CHAT_MESSAGES_STREAM_ID });
|
|
92
92
|
const stopInput = streams.input({ id: CHAT_STOP_STREAM_ID });
|
|
93
|
-
/**
|
|
94
|
-
* Strips provider-specific IDs from message parts so that partial/stopped
|
|
95
|
-
* assistant responses don't cause 404s when sent back to the provider
|
|
96
|
-
* (e.g. OpenAI Responses API message IDs).
|
|
97
|
-
* @internal
|
|
98
|
-
*/
|
|
99
|
-
function sanitizeMessages(messages) {
|
|
100
|
-
return messages.map((msg) => {
|
|
101
|
-
if (msg.role !== "assistant" || !msg.parts)
|
|
102
|
-
return msg;
|
|
103
|
-
return {
|
|
104
|
-
...msg,
|
|
105
|
-
parts: msg.parts.map((part) => {
|
|
106
|
-
// Strip provider-specific metadata (e.g. OpenAI Responses API itemId)
|
|
107
|
-
// and streaming state from assistant message parts. These cause 404s
|
|
108
|
-
// when partial/stopped responses are sent back to the provider.
|
|
109
|
-
const { providerMetadata, state, id, ...rest } = part;
|
|
110
|
-
return rest;
|
|
111
|
-
}),
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
93
|
/**
|
|
116
94
|
* Tracks how many times `pipeChat` has been called in the current `chatTask` run.
|
|
117
95
|
* Used to prevent double-piping when a user both calls `pipeChat()` manually
|
|
@@ -225,7 +203,7 @@ async function pipeChat(source, options) {
|
|
|
225
203
|
* ```
|
|
226
204
|
*/
|
|
227
205
|
function chatTask(options) {
|
|
228
|
-
const { run: userRun, maxTurns = 100, turnTimeout = "1h", warmTimeoutInSeconds = 30, ...restOptions } = options;
|
|
206
|
+
const { run: userRun, onChatStart, onTurnComplete, maxTurns = 100, turnTimeout = "1h", warmTimeoutInSeconds = 30, ...restOptions } = options;
|
|
229
207
|
return createTask({
|
|
230
208
|
...restOptions,
|
|
231
209
|
run: async (payload, { signal: runSignal }) => {
|
|
@@ -235,6 +213,13 @@ function chatTask(options) {
|
|
|
235
213
|
activeSpan.setAttribute("gen_ai.conversation.id", payload.chatId);
|
|
236
214
|
}
|
|
237
215
|
let currentWirePayload = payload;
|
|
216
|
+
// Accumulated model messages across turns. Turn 1 initialises from the
|
|
217
|
+
// full history the frontend sends; subsequent turns append only the new
|
|
218
|
+
// user message(s) and the captured assistant response.
|
|
219
|
+
let accumulatedMessages = [];
|
|
220
|
+
// Accumulated UI messages for persistence. Mirrors the model accumulator
|
|
221
|
+
// but in frontend-friendly UIMessage format (with parts, id, etc.).
|
|
222
|
+
let accumulatedUIMessages = [];
|
|
238
223
|
// Mutable reference to the current turn's stop controller so the
|
|
239
224
|
// stop input stream listener (registered once) can abort the right turn.
|
|
240
225
|
let currentStopController;
|
|
@@ -284,23 +269,75 @@ function chatTask(options) {
|
|
|
284
269
|
const msgSub = messagesInput.on((msg) => {
|
|
285
270
|
pendingMessages.push(msg);
|
|
286
271
|
});
|
|
287
|
-
// Convert
|
|
288
|
-
|
|
289
|
-
|
|
272
|
+
// Convert the incoming UIMessages to model messages and update the accumulator.
|
|
273
|
+
// Turn 1: full history from the frontend → replaces the accumulator.
|
|
274
|
+
// Turn 2+: only the new message(s) → appended to the accumulator.
|
|
275
|
+
const incomingModelMessages = await convertToModelMessages(uiMessages);
|
|
276
|
+
// Track new messages for this turn (user input + assistant response).
|
|
277
|
+
const turnNewModelMessages = [];
|
|
278
|
+
const turnNewUIMessages = [];
|
|
279
|
+
if (turn === 0) {
|
|
280
|
+
accumulatedMessages = incomingModelMessages;
|
|
281
|
+
accumulatedUIMessages = [...uiMessages];
|
|
282
|
+
// On first turn, the "new" messages are just the last user message
|
|
283
|
+
// (the rest is history). We'll add the response after streaming.
|
|
284
|
+
if (uiMessages.length > 0) {
|
|
285
|
+
turnNewUIMessages.push(uiMessages[uiMessages.length - 1]);
|
|
286
|
+
const lastModel = incomingModelMessages[incomingModelMessages.length - 1];
|
|
287
|
+
if (lastModel)
|
|
288
|
+
turnNewModelMessages.push(lastModel);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else if (currentWirePayload.trigger === "regenerate-message") {
|
|
292
|
+
// Regenerate: frontend sent full history with last assistant message
|
|
293
|
+
// removed. Reset the accumulator to match.
|
|
294
|
+
accumulatedMessages = incomingModelMessages;
|
|
295
|
+
accumulatedUIMessages = [...uiMessages];
|
|
296
|
+
// No new user messages for regenerate — just the response (added below)
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
// Submit: frontend sent only the new user message(s). Append to accumulator.
|
|
300
|
+
accumulatedMessages.push(...incomingModelMessages);
|
|
301
|
+
accumulatedUIMessages.push(...uiMessages);
|
|
302
|
+
turnNewModelMessages.push(...incomingModelMessages);
|
|
303
|
+
turnNewUIMessages.push(...uiMessages);
|
|
304
|
+
}
|
|
305
|
+
// Fire onChatStart on the first turn
|
|
306
|
+
if (turn === 0 && onChatStart) {
|
|
307
|
+
await tracer.startActiveSpan("onChatStart()", async () => {
|
|
308
|
+
await onChatStart({
|
|
309
|
+
chatId: currentWirePayload.chatId,
|
|
310
|
+
messages: accumulatedMessages,
|
|
311
|
+
clientData: wireMetadata,
|
|
312
|
+
});
|
|
313
|
+
}, {
|
|
314
|
+
attributes: {
|
|
315
|
+
[SemanticInternalAttributes.STYLE_ICON]: "task-hook-onStart",
|
|
316
|
+
[SemanticInternalAttributes.COLLAPSED]: true,
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
// Captured by the onFinish callback below — works even on abort/stop.
|
|
321
|
+
let capturedResponseMessage;
|
|
290
322
|
try {
|
|
291
323
|
const result = await userRun({
|
|
292
324
|
...restWire,
|
|
293
|
-
messages:
|
|
294
|
-
uiMessages: sanitized,
|
|
325
|
+
messages: accumulatedMessages,
|
|
295
326
|
clientData: wireMetadata,
|
|
296
327
|
signal: combinedSignal,
|
|
297
328
|
cancelSignal,
|
|
298
329
|
stopSignal,
|
|
299
330
|
});
|
|
300
331
|
// Auto-pipe if the run function returned a StreamTextResult or similar,
|
|
301
|
-
// but only if pipeChat() wasn't already called manually during this turn
|
|
332
|
+
// but only if pipeChat() wasn't already called manually during this turn.
|
|
333
|
+
// We call toUIMessageStream ourselves to attach onFinish for response capture.
|
|
302
334
|
if (_chatPipeCount === 0 && isUIMessageStreamable(result)) {
|
|
303
|
-
|
|
335
|
+
const uiStream = result.toUIMessageStream({
|
|
336
|
+
onFinish: ({ responseMessage }) => {
|
|
337
|
+
capturedResponseMessage = responseMessage;
|
|
338
|
+
},
|
|
339
|
+
});
|
|
340
|
+
await pipeChat(uiStream, { signal: combinedSignal, spanName: "stream response" });
|
|
304
341
|
}
|
|
305
342
|
}
|
|
306
343
|
catch (error) {
|
|
@@ -318,8 +355,48 @@ function chatTask(options) {
|
|
|
318
355
|
finally {
|
|
319
356
|
msgSub.off();
|
|
320
357
|
}
|
|
358
|
+
// Append the assistant's response (partial or complete) to the accumulator.
|
|
359
|
+
// The onFinish callback fires even on abort/stop, so partial responses
|
|
360
|
+
// from stopped generation are captured correctly.
|
|
361
|
+
if (capturedResponseMessage) {
|
|
362
|
+
accumulatedUIMessages.push(capturedResponseMessage);
|
|
363
|
+
turnNewUIMessages.push(capturedResponseMessage);
|
|
364
|
+
try {
|
|
365
|
+
const responseModelMessages = await convertToModelMessages([
|
|
366
|
+
stripProviderMetadata(capturedResponseMessage),
|
|
367
|
+
]);
|
|
368
|
+
accumulatedMessages.push(...responseModelMessages);
|
|
369
|
+
turnNewModelMessages.push(...responseModelMessages);
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
// Conversion failed — skip accumulation for this turn
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// TODO: When the user calls `pipeChat` manually instead of returning a
|
|
376
|
+
// StreamTextResult, we don't have access to onFinish. A future iteration
|
|
377
|
+
// should let manual-mode users report back response messages for
|
|
378
|
+
// accumulation (e.g. via a `chat.addMessages()` helper).
|
|
321
379
|
if (runSignal.aborted)
|
|
322
380
|
return "exit";
|
|
381
|
+
// Fire onTurnComplete after response capture
|
|
382
|
+
if (onTurnComplete) {
|
|
383
|
+
await tracer.startActiveSpan("onTurnComplete()", async () => {
|
|
384
|
+
await onTurnComplete({
|
|
385
|
+
chatId: currentWirePayload.chatId,
|
|
386
|
+
messages: accumulatedMessages,
|
|
387
|
+
uiMessages: accumulatedUIMessages,
|
|
388
|
+
newMessages: turnNewModelMessages,
|
|
389
|
+
newUIMessages: turnNewUIMessages,
|
|
390
|
+
responseMessage: capturedResponseMessage,
|
|
391
|
+
turn,
|
|
392
|
+
});
|
|
393
|
+
}, {
|
|
394
|
+
attributes: {
|
|
395
|
+
[SemanticInternalAttributes.STYLE_ICON]: "task-hook-onComplete",
|
|
396
|
+
[SemanticInternalAttributes.COLLAPSED]: true,
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
}
|
|
323
400
|
// Write turn-complete control chunk so frontend closes its stream
|
|
324
401
|
await writeTurnCompleteChunk(currentWirePayload.chatId);
|
|
325
402
|
// If messages arrived during streaming, use the first one immediately
|
|
@@ -329,9 +406,10 @@ function chatTask(options) {
|
|
|
329
406
|
}
|
|
330
407
|
// Phase 1: Keep the run warm for quick response to the next message.
|
|
331
408
|
// The run stays active (using compute) during this window.
|
|
332
|
-
|
|
409
|
+
const effectiveWarmTimeout = metadata.get(WARM_TIMEOUT_METADATA_KEY) ?? warmTimeoutInSeconds;
|
|
410
|
+
if (effectiveWarmTimeout > 0) {
|
|
333
411
|
const warm = await messagesInput.once({
|
|
334
|
-
timeoutMs:
|
|
412
|
+
timeoutMs: effectiveWarmTimeout * 1000,
|
|
335
413
|
spanName: "waiting (warm)",
|
|
336
414
|
});
|
|
337
415
|
if (warm.ok) {
|
|
@@ -341,8 +419,9 @@ function chatTask(options) {
|
|
|
341
419
|
}
|
|
342
420
|
}
|
|
343
421
|
// Phase 2: Suspend the task (frees compute) until the next message arrives
|
|
422
|
+
const effectiveTurnTimeout = metadata.get(TURN_TIMEOUT_METADATA_KEY) ?? turnTimeout;
|
|
344
423
|
const next = await messagesInput.wait({
|
|
345
|
-
timeout:
|
|
424
|
+
timeout: effectiveTurnTimeout,
|
|
346
425
|
spanName: "waiting (suspended)",
|
|
347
426
|
});
|
|
348
427
|
if (!next.ok) {
|
|
@@ -387,6 +466,69 @@ function chatTask(options) {
|
|
|
387
466
|
* const token = await chat.createAccessToken("my-chat");
|
|
388
467
|
* ```
|
|
389
468
|
*/
|
|
469
|
+
// ---------------------------------------------------------------------------
|
|
470
|
+
// Runtime configuration helpers
|
|
471
|
+
// ---------------------------------------------------------------------------
|
|
472
|
+
const TURN_TIMEOUT_METADATA_KEY = "chat.turnTimeout";
|
|
473
|
+
const WARM_TIMEOUT_METADATA_KEY = "chat.warmTimeout";
|
|
474
|
+
/**
|
|
475
|
+
* Override the turn timeout for subsequent turns in the current run.
|
|
476
|
+
*
|
|
477
|
+
* The turn timeout controls how long the run stays suspended (freeing compute)
|
|
478
|
+
* waiting for the next user message. When it expires, the run completes
|
|
479
|
+
* gracefully and the next message starts a fresh run.
|
|
480
|
+
*
|
|
481
|
+
* Call from inside a `chatTask` run function to adjust based on context.
|
|
482
|
+
*
|
|
483
|
+
* @param duration - A duration string (e.g. `"5m"`, `"1h"`, `"30s"`)
|
|
484
|
+
*
|
|
485
|
+
* @example
|
|
486
|
+
* ```ts
|
|
487
|
+
* run: async ({ messages, signal }) => {
|
|
488
|
+
* chat.setTurnTimeout("2h");
|
|
489
|
+
* return streamText({ model, messages, abortSignal: signal });
|
|
490
|
+
* }
|
|
491
|
+
* ```
|
|
492
|
+
*/
|
|
493
|
+
function setTurnTimeout(duration) {
|
|
494
|
+
metadata.set(TURN_TIMEOUT_METADATA_KEY, duration);
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Override the turn timeout in seconds for subsequent turns in the current run.
|
|
498
|
+
*
|
|
499
|
+
* @param seconds - Number of seconds to wait for the next message before ending the run
|
|
500
|
+
*
|
|
501
|
+
* @example
|
|
502
|
+
* ```ts
|
|
503
|
+
* run: async ({ messages, signal }) => {
|
|
504
|
+
* chat.setTurnTimeoutInSeconds(3600); // 1 hour
|
|
505
|
+
* return streamText({ model, messages, abortSignal: signal });
|
|
506
|
+
* }
|
|
507
|
+
* ```
|
|
508
|
+
*/
|
|
509
|
+
function setTurnTimeoutInSeconds(seconds) {
|
|
510
|
+
metadata.set(TURN_TIMEOUT_METADATA_KEY, `${seconds}s`);
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Override the warm timeout for subsequent turns in the current run.
|
|
514
|
+
*
|
|
515
|
+
* The warm timeout controls how long the run stays active (using compute)
|
|
516
|
+
* after each turn, waiting for the next message. During this window,
|
|
517
|
+
* responses are instant. After it expires, the run suspends.
|
|
518
|
+
*
|
|
519
|
+
* @param seconds - Number of seconds to stay warm (0 to suspend immediately)
|
|
520
|
+
*
|
|
521
|
+
* @example
|
|
522
|
+
* ```ts
|
|
523
|
+
* run: async ({ messages, signal }) => {
|
|
524
|
+
* chat.setWarmTimeoutInSeconds(60);
|
|
525
|
+
* return streamText({ model, messages, abortSignal: signal });
|
|
526
|
+
* }
|
|
527
|
+
* ```
|
|
528
|
+
*/
|
|
529
|
+
function setWarmTimeoutInSeconds(seconds) {
|
|
530
|
+
metadata.set(WARM_TIMEOUT_METADATA_KEY, seconds);
|
|
531
|
+
}
|
|
390
532
|
export const chat = {
|
|
391
533
|
/** Create a chat task. See {@link chatTask}. */
|
|
392
534
|
task: chatTask,
|
|
@@ -394,6 +536,12 @@ export const chat = {
|
|
|
394
536
|
pipe: pipeChat,
|
|
395
537
|
/** Create a public access token for a chat task. See {@link createChatAccessToken}. */
|
|
396
538
|
createAccessToken: createChatAccessToken,
|
|
539
|
+
/** Override the turn timeout at runtime (duration string). See {@link setTurnTimeout}. */
|
|
540
|
+
setTurnTimeout,
|
|
541
|
+
/** Override the turn timeout at runtime (seconds). See {@link setTurnTimeoutInSeconds}. */
|
|
542
|
+
setTurnTimeoutInSeconds,
|
|
543
|
+
/** Override the warm timeout at runtime. See {@link setWarmTimeoutInSeconds}. */
|
|
544
|
+
setWarmTimeoutInSeconds,
|
|
397
545
|
};
|
|
398
546
|
/**
|
|
399
547
|
* Writes a turn-complete control chunk to the chat output stream.
|
|
@@ -433,4 +581,35 @@ function extractLastUserMessageText(messages) {
|
|
|
433
581
|
}
|
|
434
582
|
return undefined;
|
|
435
583
|
}
|
|
584
|
+
/**
|
|
585
|
+
* Strips ephemeral OpenAI Responses API `itemId` from a UIMessage's parts.
|
|
586
|
+
*
|
|
587
|
+
* The OpenAI Responses provider attaches `itemId` to message parts via
|
|
588
|
+
* `providerMetadata.openai.itemId`. These IDs are ephemeral — sending them
|
|
589
|
+
* back in a subsequent `streamText` call causes 404s because the provider
|
|
590
|
+
* can't find the referenced item (especially for stopped/partial responses).
|
|
591
|
+
*
|
|
592
|
+
* @internal
|
|
593
|
+
*/
|
|
594
|
+
function stripProviderMetadata(message) {
|
|
595
|
+
if (!message.parts)
|
|
596
|
+
return message;
|
|
597
|
+
return {
|
|
598
|
+
...message,
|
|
599
|
+
parts: message.parts.map((part) => {
|
|
600
|
+
const openai = part.providerMetadata?.openai;
|
|
601
|
+
if (!openai?.itemId)
|
|
602
|
+
return part;
|
|
603
|
+
const { itemId, ...restOpenai } = openai;
|
|
604
|
+
const { openai: _, ...restProviders } = part.providerMetadata;
|
|
605
|
+
return {
|
|
606
|
+
...part,
|
|
607
|
+
providerMetadata: {
|
|
608
|
+
...restProviders,
|
|
609
|
+
...(Object.keys(restOpenai).length > 0 ? { openai: restOpenai } : {}),
|
|
610
|
+
},
|
|
611
|
+
};
|
|
612
|
+
}),
|
|
613
|
+
};
|
|
614
|
+
}
|
|
436
615
|
//# sourceMappingURL=ai.js.map
|
package/dist/esm/v3/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/v3/ai.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../src/v3/ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,9 @@ export type UseTriggerChatTransportOptions<TTask extends AnyTask = AnyTask> = Om
|
|
|
23
23
|
* For dynamic access tokens, pass a function — it will be called on each
|
|
24
24
|
* request without needing to recreate the transport.
|
|
25
25
|
*
|
|
26
|
+
* The `onSessionChange` callback is kept in a ref so the transport always
|
|
27
|
+
* calls the latest version without needing to be recreated.
|
|
28
|
+
*
|
|
26
29
|
* @example
|
|
27
30
|
* ```tsx
|
|
28
31
|
* import { useChat } from "@ai-sdk/react";
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* }
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
-
import { useRef } from "react";
|
|
24
|
+
import { useEffect, useRef } from "react";
|
|
25
25
|
import { TriggerChatTransport, } from "./chat.js";
|
|
26
26
|
/**
|
|
27
27
|
* React hook that creates and memoizes a `TriggerChatTransport` instance.
|
|
@@ -34,6 +34,9 @@ import { TriggerChatTransport, } from "./chat.js";
|
|
|
34
34
|
* For dynamic access tokens, pass a function — it will be called on each
|
|
35
35
|
* request without needing to recreate the transport.
|
|
36
36
|
*
|
|
37
|
+
* The `onSessionChange` callback is kept in a ref so the transport always
|
|
38
|
+
* calls the latest version without needing to be recreated.
|
|
39
|
+
*
|
|
37
40
|
* @example
|
|
38
41
|
* ```tsx
|
|
39
42
|
* import { useChat } from "@ai-sdk/react";
|
|
@@ -55,6 +58,11 @@ export function useTriggerChatTransport(options) {
|
|
|
55
58
|
if (ref.current === null) {
|
|
56
59
|
ref.current = new TriggerChatTransport(options);
|
|
57
60
|
}
|
|
61
|
+
// Keep onSessionChange up to date without recreating the transport
|
|
62
|
+
const { onSessionChange } = options;
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
ref.current?.setOnSessionChange(onSessionChange);
|
|
65
|
+
}, [onSessionChange]);
|
|
58
66
|
return ref.current;
|
|
59
67
|
}
|
|
60
68
|
//# sourceMappingURL=chat-react.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-react.js","sourceRoot":"","sources":["../../../src/v3/chat-react.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-react.js","sourceRoot":"","sources":["../../../src/v3/chat-react.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EACL,oBAAoB,GAErB,MAAM,WAAW,CAAC;AAmBnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAA8C;IAE9C,MAAM,GAAG,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzB,GAAG,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,mEAAmE;IACnE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC"}
|
package/dist/esm/v3/chat.d.ts
CHANGED
|
@@ -84,6 +84,60 @@ export type TriggerChatTransportOptions = {
|
|
|
84
84
|
* ```
|
|
85
85
|
*/
|
|
86
86
|
metadata?: Record<string, unknown>;
|
|
87
|
+
/**
|
|
88
|
+
* Restore active chat sessions from external storage (e.g. localStorage).
|
|
89
|
+
*
|
|
90
|
+
* After a page refresh, pass previously persisted sessions here so the
|
|
91
|
+
* transport can reconnect to existing runs instead of starting new ones.
|
|
92
|
+
* Use `getSession()` to retrieve session state for persistence.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* new TriggerChatTransport({
|
|
97
|
+
* task: "my-chat",
|
|
98
|
+
* accessToken,
|
|
99
|
+
* sessions: {
|
|
100
|
+
* "chat-abc": { runId: "run_123", publicAccessToken: "...", lastEventId: "42" },
|
|
101
|
+
* },
|
|
102
|
+
* });
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
sessions?: Record<string, {
|
|
106
|
+
runId: string;
|
|
107
|
+
publicAccessToken: string;
|
|
108
|
+
lastEventId?: string;
|
|
109
|
+
}>;
|
|
110
|
+
/**
|
|
111
|
+
* Called whenever a chat session's state changes.
|
|
112
|
+
*
|
|
113
|
+
* Fires when:
|
|
114
|
+
* - A new session is created (after triggering a task)
|
|
115
|
+
* - A turn completes (lastEventId updated)
|
|
116
|
+
* - A session is removed (run ended or input stream send failed) — `session` will be `null`
|
|
117
|
+
*
|
|
118
|
+
* Use this to persist session state for reconnection after page refreshes,
|
|
119
|
+
* without needing to call `getSession()` manually.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* new TriggerChatTransport({
|
|
124
|
+
* task: "my-chat",
|
|
125
|
+
* accessToken,
|
|
126
|
+
* onSessionChange: (chatId, session) => {
|
|
127
|
+
* if (session) {
|
|
128
|
+
* localStorage.setItem(`session:${chatId}`, JSON.stringify(session));
|
|
129
|
+
* } else {
|
|
130
|
+
* localStorage.removeItem(`session:${chatId}`);
|
|
131
|
+
* }
|
|
132
|
+
* },
|
|
133
|
+
* });
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
onSessionChange?: (chatId: string, session: {
|
|
137
|
+
runId: string;
|
|
138
|
+
publicAccessToken: string;
|
|
139
|
+
lastEventId?: string;
|
|
140
|
+
} | null) => void;
|
|
87
141
|
};
|
|
88
142
|
/**
|
|
89
143
|
* A custom AI SDK `ChatTransport` that runs chat completions as durable Trigger.dev tasks.
|
|
@@ -121,6 +175,7 @@ export declare class TriggerChatTransport implements ChatTransport<UIMessage> {
|
|
|
121
175
|
private readonly extraHeaders;
|
|
122
176
|
private readonly streamTimeoutSeconds;
|
|
123
177
|
private readonly defaultMetadata;
|
|
178
|
+
private _onSessionChange;
|
|
124
179
|
private sessions;
|
|
125
180
|
constructor(options: TriggerChatTransportOptions);
|
|
126
181
|
sendMessages: (options: {
|
|
@@ -133,6 +188,36 @@ export declare class TriggerChatTransport implements ChatTransport<UIMessage> {
|
|
|
133
188
|
reconnectToStream: (options: {
|
|
134
189
|
chatId: string;
|
|
135
190
|
} & ChatRequestOptions) => Promise<ReadableStream<UIMessageChunk> | null>;
|
|
191
|
+
/**
|
|
192
|
+
* Get the current session state for a chat, suitable for external persistence.
|
|
193
|
+
*
|
|
194
|
+
* Returns `undefined` if no active session exists for this chatId.
|
|
195
|
+
* Persist the returned value to localStorage so it can be restored
|
|
196
|
+
* after a page refresh via `restoreSession()`.
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```ts
|
|
200
|
+
* const session = transport.getSession(chatId);
|
|
201
|
+
* if (session) {
|
|
202
|
+
* localStorage.setItem(`session:${chatId}`, JSON.stringify(session));
|
|
203
|
+
* }
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
getSession: (chatId: string) => {
|
|
207
|
+
runId: string;
|
|
208
|
+
publicAccessToken: string;
|
|
209
|
+
lastEventId?: string;
|
|
210
|
+
} | undefined;
|
|
211
|
+
/**
|
|
212
|
+
* Update the `onSessionChange` callback.
|
|
213
|
+
* Useful for React hooks that need to update the callback without recreating the transport.
|
|
214
|
+
*/
|
|
215
|
+
setOnSessionChange(callback: ((chatId: string, session: {
|
|
216
|
+
runId: string;
|
|
217
|
+
publicAccessToken: string;
|
|
218
|
+
lastEventId?: string;
|
|
219
|
+
} | null) => void) | undefined): void;
|
|
220
|
+
private notifySessionChange;
|
|
136
221
|
private subscribeToStream;
|
|
137
222
|
}
|
|
138
223
|
/**
|
package/dist/esm/v3/chat.js
CHANGED
|
@@ -62,6 +62,7 @@ export class TriggerChatTransport {
|
|
|
62
62
|
extraHeaders;
|
|
63
63
|
streamTimeoutSeconds;
|
|
64
64
|
defaultMetadata;
|
|
65
|
+
_onSessionChange;
|
|
65
66
|
sessions = new Map();
|
|
66
67
|
constructor(options) {
|
|
67
68
|
this.taskId = options.task;
|
|
@@ -74,6 +75,17 @@ export class TriggerChatTransport {
|
|
|
74
75
|
this.extraHeaders = options.headers ?? {};
|
|
75
76
|
this.streamTimeoutSeconds = options.streamTimeoutSeconds ?? DEFAULT_STREAM_TIMEOUT_SECONDS;
|
|
76
77
|
this.defaultMetadata = options.metadata;
|
|
78
|
+
this._onSessionChange = options.onSessionChange;
|
|
79
|
+
// Restore sessions from external storage
|
|
80
|
+
if (options.sessions) {
|
|
81
|
+
for (const [chatId, session] of Object.entries(options.sessions)) {
|
|
82
|
+
this.sessions.set(chatId, {
|
|
83
|
+
runId: session.runId,
|
|
84
|
+
publicAccessToken: session.publicAccessToken,
|
|
85
|
+
lastEventId: session.lastEventId,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
77
89
|
}
|
|
78
90
|
sendMessages = async (options) => {
|
|
79
91
|
const { trigger, chatId, messageId, messages, abortSignal, body, metadata } = options;
|
|
@@ -93,13 +105,21 @@ export class TriggerChatTransport {
|
|
|
93
105
|
// to resume the conversation in the same run.
|
|
94
106
|
if (session?.runId) {
|
|
95
107
|
try {
|
|
108
|
+
// Keep wire payloads minimal — the backend accumulates the full history.
|
|
109
|
+
// For submit-message: only send the new user message (always the last one).
|
|
110
|
+
// For regenerate-message: send full history so the backend can reset its accumulator.
|
|
111
|
+
const minimalPayload = {
|
|
112
|
+
...payload,
|
|
113
|
+
messages: trigger === "submit-message" ? messages.slice(-1) : messages,
|
|
114
|
+
};
|
|
96
115
|
const apiClient = new ApiClient(this.baseURL, session.publicAccessToken);
|
|
97
|
-
await apiClient.sendInputStream(session.runId, CHAT_MESSAGES_STREAM_ID,
|
|
116
|
+
await apiClient.sendInputStream(session.runId, CHAT_MESSAGES_STREAM_ID, minimalPayload);
|
|
98
117
|
return this.subscribeToStream(session.runId, session.publicAccessToken, abortSignal, chatId);
|
|
99
118
|
}
|
|
100
119
|
catch {
|
|
101
120
|
// If sending fails (run died, etc.), fall through to trigger a new run.
|
|
102
121
|
this.sessions.delete(chatId);
|
|
122
|
+
this.notifySessionChange(chatId, null);
|
|
103
123
|
}
|
|
104
124
|
}
|
|
105
125
|
// First message or run has ended — trigger a new run
|
|
@@ -115,10 +135,12 @@ export class TriggerChatTransport {
|
|
|
115
135
|
const publicAccessToken = "publicAccessToken" in triggerResponse
|
|
116
136
|
? triggerResponse.publicAccessToken
|
|
117
137
|
: undefined;
|
|
118
|
-
|
|
138
|
+
const newSession = {
|
|
119
139
|
runId,
|
|
120
140
|
publicAccessToken: publicAccessToken ?? currentToken,
|
|
121
|
-
}
|
|
141
|
+
};
|
|
142
|
+
this.sessions.set(chatId, newSession);
|
|
143
|
+
this.notifySessionChange(chatId, newSession);
|
|
122
144
|
return this.subscribeToStream(runId, publicAccessToken ?? currentToken, abortSignal, chatId);
|
|
123
145
|
};
|
|
124
146
|
reconnectToStream = async (options) => {
|
|
@@ -128,6 +150,52 @@ export class TriggerChatTransport {
|
|
|
128
150
|
}
|
|
129
151
|
return this.subscribeToStream(session.runId, session.publicAccessToken, undefined, options.chatId);
|
|
130
152
|
};
|
|
153
|
+
/**
|
|
154
|
+
* Get the current session state for a chat, suitable for external persistence.
|
|
155
|
+
*
|
|
156
|
+
* Returns `undefined` if no active session exists for this chatId.
|
|
157
|
+
* Persist the returned value to localStorage so it can be restored
|
|
158
|
+
* after a page refresh via `restoreSession()`.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```ts
|
|
162
|
+
* const session = transport.getSession(chatId);
|
|
163
|
+
* if (session) {
|
|
164
|
+
* localStorage.setItem(`session:${chatId}`, JSON.stringify(session));
|
|
165
|
+
* }
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
getSession = (chatId) => {
|
|
169
|
+
const session = this.sessions.get(chatId);
|
|
170
|
+
if (!session)
|
|
171
|
+
return undefined;
|
|
172
|
+
return {
|
|
173
|
+
runId: session.runId,
|
|
174
|
+
publicAccessToken: session.publicAccessToken,
|
|
175
|
+
lastEventId: session.lastEventId,
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Update the `onSessionChange` callback.
|
|
180
|
+
* Useful for React hooks that need to update the callback without recreating the transport.
|
|
181
|
+
*/
|
|
182
|
+
setOnSessionChange(callback) {
|
|
183
|
+
this._onSessionChange = callback;
|
|
184
|
+
}
|
|
185
|
+
notifySessionChange(chatId, session) {
|
|
186
|
+
if (!this._onSessionChange)
|
|
187
|
+
return;
|
|
188
|
+
if (session) {
|
|
189
|
+
this._onSessionChange(chatId, {
|
|
190
|
+
runId: session.runId,
|
|
191
|
+
publicAccessToken: session.publicAccessToken,
|
|
192
|
+
lastEventId: session.lastEventId,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this._onSessionChange(chatId, null);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
131
199
|
subscribeToStream(runId, accessToken, abortSignal, chatId) {
|
|
132
200
|
const headers = {
|
|
133
201
|
Authorization: `Bearer ${accessToken}`,
|
|
@@ -179,6 +247,7 @@ export class TriggerChatTransport {
|
|
|
179
247
|
// the next message via input streams.
|
|
180
248
|
if (chatId && !combinedSignal.aborted) {
|
|
181
249
|
this.sessions.delete(chatId);
|
|
250
|
+
this.notifySessionChange(chatId, null);
|
|
182
251
|
}
|
|
183
252
|
controller.close();
|
|
184
253
|
return;
|
|
@@ -206,6 +275,10 @@ export class TriggerChatTransport {
|
|
|
206
275
|
continue;
|
|
207
276
|
}
|
|
208
277
|
if (chunk.type === "__trigger_turn_complete" && chatId) {
|
|
278
|
+
// Notify with updated lastEventId before closing
|
|
279
|
+
if (session) {
|
|
280
|
+
this.notifySessionChange(chatId, session);
|
|
281
|
+
}
|
|
209
282
|
internalAbort.abort();
|
|
210
283
|
try {
|
|
211
284
|
controller.close();
|