@tanstack/ai 0.42.0 → 0.43.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/README.md +15 -1
- package/dist/esm/activities/chat/adapter.js +23 -16
- package/dist/esm/activities/chat/adapter.js.map +1 -1
- package/dist/esm/activities/chat/agent-loop-strategies.d.ts +5 -36
- package/dist/esm/activities/chat/agent-loop-strategies.js +75 -21
- package/dist/esm/activities/chat/agent-loop-strategies.js.map +1 -1
- package/dist/esm/activities/chat/cancel.d.ts +40 -0
- package/dist/esm/activities/chat/cancel.js +54 -0
- package/dist/esm/activities/chat/cancel.js.map +1 -0
- package/dist/esm/activities/chat/index.d.ts +28 -21
- package/dist/esm/activities/chat/index.js +2100 -1813
- package/dist/esm/activities/chat/index.js.map +1 -1
- package/dist/esm/activities/chat/mcp/manager.d.ts +2 -2
- package/dist/esm/activities/chat/mcp/manager.js +90 -77
- package/dist/esm/activities/chat/mcp/manager.js.map +1 -1
- package/dist/esm/activities/chat/mcp/types.d.ts +2 -2
- package/dist/esm/activities/chat/messages.js +397 -346
- package/dist/esm/activities/chat/messages.js.map +1 -1
- package/dist/esm/activities/chat/middleware/builder.js +17 -15
- package/dist/esm/activities/chat/middleware/builder.js.map +1 -1
- package/dist/esm/activities/chat/middleware/capabilities.js +78 -43
- package/dist/esm/activities/chat/middleware/capabilities.js.map +1 -1
- package/dist/esm/activities/chat/middleware/compose.d.ts +94 -1
- package/dist/esm/activities/chat/middleware/compose.js +623 -531
- package/dist/esm/activities/chat/middleware/compose.js.map +1 -1
- package/dist/esm/activities/chat/middleware/define.js +12 -5
- package/dist/esm/activities/chat/middleware/define.js.map +1 -1
- package/dist/esm/activities/chat/middleware/index.d.ts +5 -1
- package/dist/esm/activities/chat/middleware/locks.d.ts +50 -0
- package/dist/esm/activities/chat/middleware/locks.js +71 -0
- package/dist/esm/activities/chat/middleware/locks.js.map +1 -0
- package/dist/esm/activities/chat/middleware/pending-turn.d.ts +15 -0
- package/dist/esm/activities/chat/middleware/pending-turn.js +35 -0
- package/dist/esm/activities/chat/middleware/pending-turn.js.map +1 -0
- package/dist/esm/activities/chat/middleware/run-disconnect.d.ts +23 -0
- package/dist/esm/activities/chat/middleware/run-disconnect.js +42 -0
- package/dist/esm/activities/chat/middleware/run-disconnect.js.map +1 -0
- package/dist/esm/activities/chat/middleware/run-store.d.ts +283 -0
- package/dist/esm/activities/chat/middleware/run-store.js +176 -0
- package/dist/esm/activities/chat/middleware/run-store.js.map +1 -0
- package/dist/esm/activities/chat/middleware/sandbox-runtime.js +14 -8
- package/dist/esm/activities/chat/middleware/sandbox-runtime.js.map +1 -1
- package/dist/esm/activities/chat/middleware/tool-cache-middleware.js +79 -70
- package/dist/esm/activities/chat/middleware/tool-cache-middleware.js.map +1 -1
- package/dist/esm/activities/chat/middleware/types.d.ts +59 -2
- package/dist/esm/activities/chat/middleware/validate.js +23 -28
- package/dist/esm/activities/chat/middleware/validate.js.map +1 -1
- package/dist/esm/activities/chat/stream/json-parser.js +39 -25
- package/dist/esm/activities/chat/stream/json-parser.js.map +1 -1
- package/dist/esm/activities/chat/stream/message-updaters.js +275 -234
- package/dist/esm/activities/chat/stream/message-updaters.js.map +1 -1
- package/dist/esm/activities/chat/stream/processor.d.ts +24 -4
- package/dist/esm/activities/chat/stream/processor.js +1341 -1542
- package/dist/esm/activities/chat/stream/processor.js.map +1 -1
- package/dist/esm/activities/chat/stream/strategies.js +69 -53
- package/dist/esm/activities/chat/stream/strategies.js.map +1 -1
- package/dist/esm/activities/chat/tools/approval-schema.d.ts +19 -0
- package/dist/esm/activities/chat/tools/approval-schema.js +117 -0
- package/dist/esm/activities/chat/tools/approval-schema.js.map +1 -0
- package/dist/esm/activities/chat/tools/lazy-tool-manager.js +164 -191
- package/dist/esm/activities/chat/tools/lazy-tool-manager.js.map +1 -1
- package/dist/esm/activities/chat/tools/lazy-tools.js +24 -12
- package/dist/esm/activities/chat/tools/lazy-tools.js.map +1 -1
- package/dist/esm/activities/chat/tools/schema-converter.js +293 -146
- package/dist/esm/activities/chat/tools/schema-converter.js.map +1 -1
- package/dist/esm/activities/chat/tools/tool-calls.d.ts +18 -2
- package/dist/esm/activities/chat/tools/tool-calls.js +522 -531
- package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
- package/dist/esm/activities/chat/tools/tool-definition.d.ts +75 -16
- package/dist/esm/activities/chat/tools/tool-definition.js +95 -23
- package/dist/esm/activities/chat/tools/tool-definition.js.map +1 -1
- package/dist/esm/activities/error-payload.js +85 -47
- package/dist/esm/activities/error-payload.js.map +1 -1
- package/dist/esm/activities/generateAudio/adapter.js +22 -15
- package/dist/esm/activities/generateAudio/adapter.js.map +1 -1
- package/dist/esm/activities/generateAudio/index.d.ts +4 -0
- package/dist/esm/activities/generateAudio/index.js +141 -105
- package/dist/esm/activities/generateAudio/index.js.map +1 -1
- package/dist/esm/activities/generateImage/adapter.js +22 -15
- package/dist/esm/activities/generateImage/adapter.js.map +1 -1
- package/dist/esm/activities/generateImage/index.d.ts +4 -0
- package/dist/esm/activities/generateImage/index.js +155 -111
- package/dist/esm/activities/generateImage/index.js.map +1 -1
- package/dist/esm/activities/generateSpeech/adapter.js +22 -15
- package/dist/esm/activities/generateSpeech/adapter.js.map +1 -1
- package/dist/esm/activities/generateSpeech/index.d.ts +4 -0
- package/dist/esm/activities/generateSpeech/index.js +159 -110
- package/dist/esm/activities/generateSpeech/index.js.map +1 -1
- package/dist/esm/activities/generateTranscription/adapter.js +22 -15
- package/dist/esm/activities/generateTranscription/adapter.js.map +1 -1
- package/dist/esm/activities/generateTranscription/index.d.ts +4 -0
- package/dist/esm/activities/generateTranscription/index.js +159 -100
- package/dist/esm/activities/generateTranscription/index.js.map +1 -1
- package/dist/esm/activities/generateVideo/adapter.js +36 -29
- package/dist/esm/activities/generateVideo/adapter.js.map +1 -1
- package/dist/esm/activities/generateVideo/index.d.ts +143 -19
- package/dist/esm/activities/generateVideo/index.js +456 -279
- package/dist/esm/activities/generateVideo/index.js.map +1 -1
- package/dist/esm/activities/generateVideo/snap.js +60 -48
- package/dist/esm/activities/generateVideo/snap.js.map +1 -1
- package/dist/esm/activities/index.js +8 -34
- package/dist/esm/activities/middleware/index.d.ts +1 -1
- package/dist/esm/activities/middleware/run.d.ts +10 -0
- package/dist/esm/activities/middleware/run.js +53 -29
- package/dist/esm/activities/middleware/run.js.map +1 -1
- package/dist/esm/activities/middleware/types.d.ts +44 -6
- package/dist/esm/activities/stream-generation-result.d.ts +4 -1
- package/dist/esm/activities/stream-generation-result.js +79 -44
- package/dist/esm/activities/stream-generation-result.js.map +1 -1
- package/dist/esm/activities/summarize/adapter.js +22 -15
- package/dist/esm/activities/summarize/adapter.js.map +1 -1
- package/dist/esm/activities/summarize/chat-stream-summarize.js +252 -202
- package/dist/esm/activities/summarize/chat-stream-summarize.js.map +1 -1
- package/dist/esm/activities/summarize/index.d.ts +27 -0
- package/dist/esm/activities/summarize/index.js +268 -102
- package/dist/esm/activities/summarize/index.js.map +1 -1
- package/dist/esm/adapter-internals.d.ts +2 -1
- package/dist/esm/adapter-internals.js +4 -11
- package/dist/esm/client.d.ts +25 -3
- package/dist/esm/client.js +131 -64
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/custom-events.d.ts +76 -0
- package/dist/esm/custom-events.js +37 -0
- package/dist/esm/custom-events.js.map +1 -0
- package/dist/esm/delivery-detach.d.ts +50 -0
- package/dist/esm/delivery-detach.js +71 -0
- package/dist/esm/delivery-detach.js.map +1 -0
- package/dist/esm/delivery-disconnect.d.ts +62 -0
- package/dist/esm/delivery-disconnect.js +81 -0
- package/dist/esm/delivery-disconnect.js.map +1 -0
- package/dist/esm/extend-adapter.js +19 -17
- package/dist/esm/extend-adapter.js.map +1 -1
- package/dist/esm/index.d.ts +24 -6
- package/dist/esm/index.js +30 -98
- package/dist/esm/interrupt-resume.d.ts +71 -0
- package/dist/esm/interrupt-resume.js +438 -0
- package/dist/esm/interrupt-resume.js.map +1 -0
- package/dist/esm/interrupt-serialization.d.ts +12 -0
- package/dist/esm/interrupt-serialization.js +178 -0
- package/dist/esm/interrupt-serialization.js.map +1 -0
- package/dist/esm/interrupts.d.ts +84 -0
- package/dist/esm/interrupts.js +31 -0
- package/dist/esm/interrupts.js.map +1 -0
- package/dist/esm/locks.d.ts +10 -0
- package/dist/esm/locks.js +2 -0
- package/dist/esm/logger/console-logger.js +101 -78
- package/dist/esm/logger/console-logger.js.map +1 -1
- package/dist/esm/logger/internal-logger.js +104 -89
- package/dist/esm/logger/internal-logger.js.map +1 -1
- package/dist/esm/logger/resolve.js +54 -49
- package/dist/esm/logger/resolve.js.map +1 -1
- package/dist/esm/logger/types.d.ts +1 -1
- package/dist/esm/middlewares/content-guard.js +142 -148
- package/dist/esm/middlewares/content-guard.js.map +1 -1
- package/dist/esm/middlewares/index.js +2 -6
- package/dist/esm/middlewares/otel.js +598 -732
- package/dist/esm/middlewares/otel.js.map +1 -1
- package/dist/esm/middlewares/usage-attributes.js +47 -40
- package/dist/esm/middlewares/usage-attributes.js.map +1 -1
- package/dist/esm/realtime/event-emitter.js +24 -25
- package/dist/esm/realtime/event-emitter.js.map +1 -1
- package/dist/esm/realtime/index.d.ts +5 -9
- package/dist/esm/realtime/index.js +29 -6
- package/dist/esm/realtime/index.js.map +1 -1
- package/dist/esm/scope.d.ts +47 -0
- package/dist/esm/stream-durability.d.ts +171 -0
- package/dist/esm/stream-durability.js +295 -0
- package/dist/esm/stream-durability.js.map +1 -0
- package/dist/esm/stream-to-response.d.ts +178 -13
- package/dist/esm/stream-to-response.js +663 -115
- package/dist/esm/stream-to-response.js.map +1 -1
- package/dist/esm/strip-to-spec-middleware.js +30 -16
- package/dist/esm/strip-to-spec-middleware.js.map +1 -1
- package/dist/esm/system-prompts.js +27 -21
- package/dist/esm/system-prompts.js.map +1 -1
- package/dist/esm/tool-registry.js +72 -45
- package/dist/esm/tool-registry.js.map +1 -1
- package/dist/esm/tools/provider-tool.js +14 -5
- package/dist/esm/tools/provider-tool.js.map +1 -1
- package/dist/esm/types.d.ts +321 -42
- package/dist/esm/types.js +2 -0
- package/dist/esm/utilities/ag-ui-wire.js +79 -93
- package/dist/esm/utilities/ag-ui-wire.js.map +1 -1
- package/dist/esm/utilities/chat-params.d.ts +26 -4
- package/dist/esm/utilities/chat-params.js +218 -92
- package/dist/esm/utilities/chat-params.js.map +1 -1
- package/dist/esm/utilities/errors.js +28 -18
- package/dist/esm/utilities/errors.js.map +1 -1
- package/dist/esm/utilities/media-prompt.js +46 -41
- package/dist/esm/utilities/media-prompt.js.map +1 -1
- package/dist/esm/utilities/numbers.js +13 -10
- package/dist/esm/utilities/numbers.js.map +1 -1
- package/dist/esm/utilities/provider-executed.js +20 -11
- package/dist/esm/utilities/provider-executed.js.map +1 -1
- package/dist/esm/utilities/sampling-keys.js +31 -19
- package/dist/esm/utilities/sampling-keys.js.map +1 -1
- package/dist/esm/utilities/tool-result.js +42 -30
- package/dist/esm/utilities/tool-result.js.map +1 -1
- package/dist/esm/utilities/usage.js +27 -9
- package/dist/esm/utilities/usage.js.map +1 -1
- package/dist/esm/utils.js +26 -18
- package/dist/esm/utils.js.map +1 -1
- package/package.json +10 -6
- package/skills/ai-core/SKILL.md +69 -18
- package/skills/ai-core/adapter-configuration/SKILL.md +44 -21
- package/skills/ai-core/adapter-configuration/references/anthropic-adapter.md +1 -3
- package/skills/ai-core/adapter-configuration/references/byteplus-adapter.md +148 -0
- package/skills/ai-core/adapter-configuration/references/gemini-adapter.md +2 -6
- package/skills/ai-core/adapter-configuration/references/groq-adapter.md +2 -6
- package/skills/ai-core/adapter-configuration/references/openai-adapter.md +1 -3
- package/skills/ai-core/ag-ui-protocol/SKILL.md +1 -1
- package/skills/ai-core/chat-experience/SKILL.md +98 -11
- package/skills/ai-core/client-persistence/SKILL.md +277 -0
- package/skills/ai-core/custom-backend-integration/SKILL.md +1 -1
- package/skills/ai-core/debug-logging/SKILL.md +1 -1
- package/skills/ai-core/locks/SKILL.md +143 -0
- package/skills/ai-core/media-generation/SKILL.md +144 -12
- package/skills/ai-core/middleware/SKILL.md +258 -33
- package/skills/ai-core/structured-outputs/SKILL.md +1 -1
- package/skills/ai-core/tool-calling/SKILL.md +54 -61
- package/src/activities/chat/agent-loop-strategies.ts +5 -39
- package/src/activities/chat/cancel.ts +81 -0
- package/src/activities/chat/index.ts +1091 -200
- package/src/activities/chat/mcp/manager.ts +4 -4
- package/src/activities/chat/mcp/types.ts +2 -2
- package/src/activities/chat/messages.ts +5 -3
- package/src/activities/chat/middleware/builder.ts +1 -1
- package/src/activities/chat/middleware/compose.ts +186 -9
- package/src/activities/chat/middleware/index.ts +26 -0
- package/src/activities/chat/middleware/locks.ts +102 -0
- package/src/activities/chat/middleware/pending-turn.ts +47 -0
- package/src/activities/chat/middleware/run-disconnect.ts +62 -0
- package/src/activities/chat/middleware/run-store.ts +412 -0
- package/src/activities/chat/middleware/types.ts +62 -1
- package/src/activities/chat/stream/processor.ts +189 -5
- package/src/activities/chat/tools/approval-schema.ts +205 -0
- package/src/activities/chat/tools/tool-calls.ts +106 -13
- package/src/activities/chat/tools/tool-definition.ts +210 -39
- package/src/activities/generateAudio/index.ts +20 -3
- package/src/activities/generateImage/index.ts +20 -3
- package/src/activities/generateSpeech/index.ts +25 -3
- package/src/activities/generateTranscription/index.ts +26 -3
- package/src/activities/generateVideo/index.ts +345 -82
- package/src/activities/middleware/index.ts +2 -0
- package/src/activities/middleware/run.ts +31 -0
- package/src/activities/middleware/types.ts +49 -5
- package/src/activities/stream-generation-result.ts +30 -2
- package/src/activities/summarize/chat-stream-summarize.ts +5 -0
- package/src/activities/summarize/index.ts +200 -10
- package/src/adapter-internals.ts +10 -1
- package/src/client.ts +244 -0
- package/src/custom-events.ts +107 -0
- package/src/delivery-detach.ts +72 -0
- package/src/delivery-disconnect.ts +84 -0
- package/src/index.ts +138 -1
- package/src/interrupt-resume.ts +824 -0
- package/src/interrupt-serialization.ts +183 -0
- package/src/interrupts.ts +146 -0
- package/src/locks.ts +17 -0
- package/src/logger/types.ts +1 -1
- package/src/middlewares/otel.ts +1 -0
- package/src/realtime/index.ts +5 -9
- package/src/scope.ts +47 -0
- package/src/stream-durability.ts +598 -0
- package/src/stream-to-response.ts +1051 -95
- package/src/strip-to-spec-middleware.ts +3 -3
- package/src/types.ts +405 -45
- package/src/utilities/chat-params.ts +245 -55
- package/dist/esm/activities/index.js.map +0 -1
- package/dist/esm/adapter-internals.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/middlewares/index.js.map +0 -1
|
@@ -1,113 +1,279 @@
|
|
|
1
|
-
import { aiEventClient } from "@tanstack/ai-event-client";
|
|
2
|
-
import { streamGenerationResult } from "../stream-generation-result.js";
|
|
3
1
|
import { resolveDebugOption } from "../../logger/resolve.js";
|
|
4
|
-
|
|
2
|
+
import { streamGenerationResult } from "../stream-generation-result.js";
|
|
3
|
+
import { applyGenerationResultTransforms, createGenerationContext, runGenerationAbort, runGenerationError, runGenerationFinish, runGenerationStart, runGenerationUsage } from "../middleware/run.js";
|
|
4
|
+
import "./adapter.js";
|
|
5
|
+
import "./chat-stream-summarize.js";
|
|
6
|
+
import { aiEventClient } from "@tanstack/ai-event-client";
|
|
7
|
+
//#region src/activities/summarize/index.ts
|
|
8
|
+
/**
|
|
9
|
+
* Summarize Activity
|
|
10
|
+
*
|
|
11
|
+
* Generates summaries from text input.
|
|
12
|
+
* This is a self-contained module with implementation, types, and JSDoc.
|
|
13
|
+
*/
|
|
14
|
+
/** The adapter kind this activity handles */
|
|
15
|
+
var kind = "summarize";
|
|
5
16
|
function createId(prefix) {
|
|
6
|
-
|
|
17
|
+
return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
7
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Summarize activity - generates summaries from text.
|
|
21
|
+
*
|
|
22
|
+
* Supports both streaming and non-streaming modes.
|
|
23
|
+
*
|
|
24
|
+
* @example Basic summarization
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { summarize } from '@tanstack/ai'
|
|
27
|
+
* import { openaiSummarize } from '@tanstack/ai-openai'
|
|
28
|
+
*
|
|
29
|
+
* const result = await summarize({
|
|
30
|
+
* adapter: openaiSummarize('gpt-4o-mini'),
|
|
31
|
+
* text: 'Long article text here...'
|
|
32
|
+
* })
|
|
33
|
+
*
|
|
34
|
+
* console.log(result.summary)
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @example Summarization with style
|
|
38
|
+
* ```ts
|
|
39
|
+
* const result = await summarize({
|
|
40
|
+
* adapter: openaiSummarize('gpt-4o-mini'),
|
|
41
|
+
* text: 'Long article text here...',
|
|
42
|
+
* style: 'bullet-points',
|
|
43
|
+
* maxLength: 100
|
|
44
|
+
* })
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @example Focused summarization
|
|
48
|
+
* ```ts
|
|
49
|
+
* const result = await summarize({
|
|
50
|
+
* adapter: openaiSummarize('gpt-4o-mini'),
|
|
51
|
+
* text: 'Long technical document...',
|
|
52
|
+
* focus: ['key findings', 'methodology']
|
|
53
|
+
* })
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @example Streaming summarization
|
|
57
|
+
* ```ts
|
|
58
|
+
* for await (const chunk of summarize({
|
|
59
|
+
* adapter: openaiSummarize('gpt-4o-mini'),
|
|
60
|
+
* text: 'Long article text here...',
|
|
61
|
+
* stream: true
|
|
62
|
+
* })) {
|
|
63
|
+
* if (chunk.type === 'content') {
|
|
64
|
+
* process.stdout.write(chunk.delta)
|
|
65
|
+
* }
|
|
66
|
+
* }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
8
69
|
function summarize(options) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
options
|
|
13
|
-
);
|
|
14
|
-
}
|
|
15
|
-
return runSummarize(
|
|
16
|
-
options
|
|
17
|
-
);
|
|
70
|
+
const { stream } = options;
|
|
71
|
+
if (stream) return runStreamingSummarize(options);
|
|
72
|
+
return runSummarize(options);
|
|
18
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Run non-streaming summarization
|
|
76
|
+
*/
|
|
19
77
|
async function runSummarize(options) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
const { adapter, text, maxLength, style, focus, modelOptions, middleware } = options;
|
|
79
|
+
const model = adapter.model;
|
|
80
|
+
const requestId = createId("summarize");
|
|
81
|
+
const inputLength = text.length;
|
|
82
|
+
const startTime = Date.now();
|
|
83
|
+
const logger = resolveDebugOption(options.debug);
|
|
84
|
+
const mwCtx = createGenerationContext({
|
|
85
|
+
requestId,
|
|
86
|
+
activity: "summarize",
|
|
87
|
+
provider: adapter.name,
|
|
88
|
+
model,
|
|
89
|
+
modelOptions,
|
|
90
|
+
threadId: options.threadId,
|
|
91
|
+
runId: options.runId,
|
|
92
|
+
createId
|
|
93
|
+
});
|
|
94
|
+
await runGenerationStart(middleware, mwCtx);
|
|
95
|
+
aiEventClient.emit("summarize:request:started", {
|
|
96
|
+
requestId,
|
|
97
|
+
provider: adapter.name,
|
|
98
|
+
model,
|
|
99
|
+
inputLength,
|
|
100
|
+
timestamp: startTime
|
|
101
|
+
});
|
|
102
|
+
logger.request(`activity=summarize provider=${adapter.name}`, {
|
|
103
|
+
provider: adapter.name,
|
|
104
|
+
model,
|
|
105
|
+
inputLength
|
|
106
|
+
});
|
|
107
|
+
const summarizeOptions = {
|
|
108
|
+
model,
|
|
109
|
+
text,
|
|
110
|
+
maxLength,
|
|
111
|
+
style,
|
|
112
|
+
focus,
|
|
113
|
+
modelOptions,
|
|
114
|
+
logger
|
|
115
|
+
};
|
|
116
|
+
try {
|
|
117
|
+
const result = await applyGenerationResultTransforms(mwCtx, await adapter.summarize(summarizeOptions));
|
|
118
|
+
const duration = Date.now() - startTime;
|
|
119
|
+
const outputLength = result.summary.length;
|
|
120
|
+
aiEventClient.emit("summarize:request:completed", {
|
|
121
|
+
requestId,
|
|
122
|
+
provider: adapter.name,
|
|
123
|
+
model,
|
|
124
|
+
inputLength,
|
|
125
|
+
outputLength,
|
|
126
|
+
duration,
|
|
127
|
+
timestamp: Date.now()
|
|
128
|
+
});
|
|
129
|
+
logger.output(`activity=summarize length=${outputLength}`, {
|
|
130
|
+
hasSummary: !!result.summary,
|
|
131
|
+
outputLength
|
|
132
|
+
});
|
|
133
|
+
if (result.usage) await runGenerationUsage(middleware, mwCtx, result.usage);
|
|
134
|
+
await runGenerationFinish(middleware, mwCtx, {
|
|
135
|
+
duration,
|
|
136
|
+
usage: result.usage
|
|
137
|
+
});
|
|
138
|
+
return result;
|
|
139
|
+
} catch (error) {
|
|
140
|
+
await runGenerationError(middleware, mwCtx, {
|
|
141
|
+
error,
|
|
142
|
+
duration: Date.now() - startTime
|
|
143
|
+
});
|
|
144
|
+
logger.errors("summarize activity failed", {
|
|
145
|
+
error,
|
|
146
|
+
source: "summarize"
|
|
147
|
+
});
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Read a `usage` off a transformed result without asserting its shape. */
|
|
152
|
+
function usageOf(result) {
|
|
153
|
+
if (typeof result !== "object" || result === null) return void 0;
|
|
154
|
+
const usage = result.usage;
|
|
155
|
+
return typeof usage === "object" && usage !== null ? usage : void 0;
|
|
72
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Run streaming summarization
|
|
159
|
+
* Uses the adapter's native streaming if available, otherwise falls back
|
|
160
|
+
* to non-streaming and yields the result as a single chunk.
|
|
161
|
+
*/
|
|
73
162
|
async function* runStreamingSummarize(options) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
163
|
+
const { adapter, text, maxLength, style, focus, modelOptions, runId, threadId } = options;
|
|
164
|
+
const model = adapter.model;
|
|
165
|
+
const logger = resolveDebugOption(options.debug);
|
|
166
|
+
logger.request(`activity=summarize provider=${adapter.name}`, {
|
|
167
|
+
provider: adapter.name,
|
|
168
|
+
model,
|
|
169
|
+
stream: true
|
|
170
|
+
});
|
|
171
|
+
const summarizeOptions = {
|
|
172
|
+
model,
|
|
173
|
+
text,
|
|
174
|
+
maxLength,
|
|
175
|
+
style,
|
|
176
|
+
focus,
|
|
177
|
+
modelOptions,
|
|
178
|
+
logger,
|
|
179
|
+
...runId !== void 0 ? { runId } : {},
|
|
180
|
+
...threadId !== void 0 ? { threadId } : {}
|
|
181
|
+
};
|
|
182
|
+
if (adapter.summarizeStream) {
|
|
183
|
+
yield* runNativeSummarizeStream(options, adapter.summarizeStream(summarizeOptions), logger);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
yield* streamGenerationResult((resolved) => runSummarize({
|
|
188
|
+
...options,
|
|
189
|
+
stream: false,
|
|
190
|
+
runId: resolved.runId
|
|
191
|
+
}), {
|
|
192
|
+
...runId !== void 0 ? { runId } : {},
|
|
193
|
+
...threadId !== void 0 ? { threadId } : {}
|
|
194
|
+
});
|
|
195
|
+
} catch (error) {
|
|
196
|
+
logger.errors("summarize activity failed", {
|
|
197
|
+
error,
|
|
198
|
+
source: "summarize"
|
|
199
|
+
});
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Drive an adapter's native `summarizeStream`, wiring the generation middleware
|
|
205
|
+
* around it.
|
|
206
|
+
*
|
|
207
|
+
* The adapter emits a terminal `generation:result` CUSTOM chunk carrying the
|
|
208
|
+
* assembled {@link SummarizationResult}; that is the one point where a result
|
|
209
|
+
* exists, so the transforms run there and the REWRITTEN result is what gets
|
|
210
|
+
* yielded — the client and the persisted run record then hold the same object.
|
|
211
|
+
* An adapter whose stream never emits one still finishes the run, just with no
|
|
212
|
+
* result recorded.
|
|
213
|
+
*/
|
|
214
|
+
async function* runNativeSummarizeStream(options, stream, logger) {
|
|
215
|
+
const { adapter, middleware, modelOptions } = options;
|
|
216
|
+
const mwCtx = createGenerationContext({
|
|
217
|
+
requestId: createId("summarize"),
|
|
218
|
+
activity: "summarize",
|
|
219
|
+
provider: adapter.name,
|
|
220
|
+
model: adapter.model,
|
|
221
|
+
modelOptions,
|
|
222
|
+
threadId: options.threadId,
|
|
223
|
+
runId: options.runId,
|
|
224
|
+
createId
|
|
225
|
+
});
|
|
226
|
+
await runGenerationStart(middleware, mwCtx);
|
|
227
|
+
const startTime = Date.now();
|
|
228
|
+
let settled = false;
|
|
229
|
+
try {
|
|
230
|
+
for await (const chunk of stream) {
|
|
231
|
+
if (chunk.type === "CUSTOM" && chunk.name === "generation:result") {
|
|
232
|
+
const result = await applyGenerationResultTransforms(mwCtx, chunk.value);
|
|
233
|
+
const usage = usageOf(result);
|
|
234
|
+
if (usage) await runGenerationUsage(middleware, mwCtx, usage);
|
|
235
|
+
await runGenerationFinish(middleware, mwCtx, {
|
|
236
|
+
duration: Date.now() - startTime,
|
|
237
|
+
usage
|
|
238
|
+
});
|
|
239
|
+
settled = true;
|
|
240
|
+
yield {
|
|
241
|
+
...chunk,
|
|
242
|
+
value: result
|
|
243
|
+
};
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
yield chunk;
|
|
247
|
+
}
|
|
248
|
+
if (!settled) {
|
|
249
|
+
await runGenerationFinish(middleware, mwCtx, { duration: Date.now() - startTime });
|
|
250
|
+
settled = true;
|
|
251
|
+
}
|
|
252
|
+
} catch (error) {
|
|
253
|
+
settled = true;
|
|
254
|
+
await runGenerationError(middleware, mwCtx, {
|
|
255
|
+
error,
|
|
256
|
+
duration: Date.now() - startTime
|
|
257
|
+
});
|
|
258
|
+
logger.errors("summarize activity failed", {
|
|
259
|
+
error,
|
|
260
|
+
source: "summarize"
|
|
261
|
+
});
|
|
262
|
+
throw error;
|
|
263
|
+
} finally {
|
|
264
|
+
if (!settled) await runGenerationAbort(middleware, mwCtx, {
|
|
265
|
+
reason: "Summarize stream abandoned before completion",
|
|
266
|
+
duration: Date.now() - startTime
|
|
267
|
+
});
|
|
268
|
+
}
|
|
104
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Create typed options for the summarize() function without executing.
|
|
272
|
+
*/
|
|
105
273
|
function createSummarizeOptions(options) {
|
|
106
|
-
|
|
274
|
+
return options;
|
|
107
275
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
};
|
|
113
|
-
//# sourceMappingURL=index.js.map
|
|
276
|
+
//#endregion
|
|
277
|
+
export { createSummarizeOptions, kind, summarize };
|
|
278
|
+
|
|
279
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/activities/summarize/index.ts"],"sourcesContent":["/**\n * Summarize Activity\n *\n * Generates summaries from text input.\n * This is a self-contained module with implementation, types, and JSDoc.\n */\n\nimport { aiEventClient } from '@tanstack/ai-event-client'\nimport { streamGenerationResult } from '../stream-generation-result.js'\nimport { resolveDebugOption } from '../../logger/resolve'\nimport type { InternalLogger } from '../../logger/internal-logger'\nimport type { DebugOption } from '../../logger/types'\nimport type { SummarizeAdapter } from './adapter'\nimport type { StreamChunk, SummarizationResult } from '../../types'\n\n// ===========================\n// Activity Kind\n// ===========================\n\n/** The adapter kind this activity handles */\nexport const kind = 'summarize' as const\n\n// ===========================\n// Type Extraction Helpers\n// ===========================\n\n/** Extract provider options from a SummarizeAdapter via ~types */\nexport type SummarizeProviderOptions<TAdapter> =\n TAdapter extends SummarizeAdapter<any, any>\n ? TAdapter['~types']['providerOptions']\n : object\n\n// ===========================\n// Activity Options Type\n// ===========================\n\n/**\n * Options for the summarize activity.\n * The model is extracted from the adapter's model property.\n *\n * @template TAdapter - The summarize adapter type\n * @template TStream - Whether to stream the output\n */\nexport interface SummarizeActivityOptions<\n TAdapter extends SummarizeAdapter<string, object>,\n TStream extends boolean = false,\n> {\n /** The summarize adapter to use (must be created with a model) */\n adapter: TAdapter & { kind: typeof kind }\n /** The text to summarize */\n text: string\n /** Maximum length of the summary (in words or characters, provider-dependent) */\n maxLength?: number\n /** Style of summary to generate */\n style?: 'bullet-points' | 'paragraph' | 'concise'\n /** Topics or aspects to focus on in the summary */\n focus?: Array<string>\n /** Provider-specific options */\n modelOptions?: SummarizeProviderOptions<TAdapter>\n /**\n * Whether to stream the summarization result.\n * When true, returns an AsyncIterable<StreamChunk> for streaming output.\n * When false or not provided, returns a Promise<SummarizationResult>.\n *\n * @default false\n */\n stream?: TStream\n /**\n * Enable debug logging. Pass `true` to enable all categories, `false` to\n * silence everything including errors, or a `DebugConfig` object for granular\n * control and/or a custom `Logger`.\n */\n debug?: DebugOption\n}\n\n// ===========================\n// Activity Result Type\n// ===========================\n\n/**\n * Result type for the summarize activity.\n * - If stream is true: AsyncIterable<StreamChunk>\n * - Otherwise: Promise<SummarizationResult>\n */\nexport type SummarizeActivityResult<TStream extends boolean> =\n TStream extends true\n ? AsyncIterable<StreamChunk>\n : Promise<SummarizationResult>\n\n// ===========================\n// Helper Functions\n// ===========================\n\nfunction createId(prefix: string): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n}\n\n// ===========================\n// Activity Implementation\n// ===========================\n\n/**\n * Summarize activity - generates summaries from text.\n *\n * Supports both streaming and non-streaming modes.\n *\n * @example Basic summarization\n * ```ts\n * import { summarize } from '@tanstack/ai'\n * import { openaiSummarize } from '@tanstack/ai-openai'\n *\n * const result = await summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long article text here...'\n * })\n *\n * console.log(result.summary)\n * ```\n *\n * @example Summarization with style\n * ```ts\n * const result = await summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long article text here...',\n * style: 'bullet-points',\n * maxLength: 100\n * })\n * ```\n *\n * @example Focused summarization\n * ```ts\n * const result = await summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long technical document...',\n * focus: ['key findings', 'methodology']\n * })\n * ```\n *\n * @example Streaming summarization\n * ```ts\n * for await (const chunk of summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long article text here...',\n * stream: true\n * })) {\n * if (chunk.type === 'content') {\n * process.stdout.write(chunk.delta)\n * }\n * }\n * ```\n */\nexport function summarize<\n TAdapter extends SummarizeAdapter<string, object>,\n TStream extends boolean = false,\n>(\n options: SummarizeActivityOptions<TAdapter, TStream>,\n): SummarizeActivityResult<TStream> {\n const { stream } = options\n\n if (stream) {\n return runStreamingSummarize(\n options as SummarizeActivityOptions<\n SummarizeAdapter<string, object>,\n true\n >,\n ) as SummarizeActivityResult<TStream>\n }\n\n return runSummarize(\n options as SummarizeActivityOptions<\n SummarizeAdapter<string, object>,\n false\n >,\n ) as SummarizeActivityResult<TStream>\n}\n\n/**\n * Run non-streaming summarization\n */\nasync function runSummarize(\n options: SummarizeActivityOptions<SummarizeAdapter<string, object>, false>,\n): Promise<SummarizationResult> {\n const { adapter, text, maxLength, style, focus, modelOptions } = options\n const model = adapter.model\n const requestId = createId('summarize')\n const inputLength = text.length\n const startTime = Date.now()\n const logger: InternalLogger = resolveDebugOption(options.debug)\n\n aiEventClient.emit('summarize:request:started', {\n requestId,\n provider: adapter.name,\n model,\n inputLength,\n timestamp: startTime,\n })\n\n logger.request(`activity=summarize provider=${adapter.name}`, {\n provider: adapter.name,\n model,\n inputLength,\n })\n\n const summarizeOptions = {\n model,\n text,\n maxLength,\n style,\n focus,\n modelOptions,\n logger,\n }\n\n try {\n const result = await adapter.summarize(summarizeOptions)\n\n const duration = Date.now() - startTime\n const outputLength = result.summary.length\n\n aiEventClient.emit('summarize:request:completed', {\n requestId,\n provider: adapter.name,\n model,\n inputLength,\n outputLength,\n duration,\n timestamp: Date.now(),\n })\n\n logger.output(`activity=summarize length=${outputLength}`, {\n hasSummary: !!result.summary,\n outputLength,\n })\n\n return result\n } catch (error) {\n logger.errors('summarize activity failed', {\n error,\n source: 'summarize',\n })\n throw error\n }\n}\n\n/**\n * Run streaming summarization\n * Uses the adapter's native streaming if available, otherwise falls back\n * to non-streaming and yields the result as a single chunk.\n */\nasync function* runStreamingSummarize(\n options: SummarizeActivityOptions<SummarizeAdapter<string, object>, true>,\n): AsyncIterable<StreamChunk> {\n const { adapter, text, maxLength, style, focus, modelOptions } = options\n const model = adapter.model\n const logger: InternalLogger = resolveDebugOption(options.debug)\n\n logger.request(`activity=summarize provider=${adapter.name}`, {\n provider: adapter.name,\n model,\n stream: true,\n })\n\n const summarizeOptions = {\n model,\n text,\n maxLength,\n style,\n focus,\n modelOptions,\n logger,\n }\n\n try {\n // Use real streaming if the adapter supports it\n if (adapter.summarizeStream) {\n yield* adapter.summarizeStream(summarizeOptions)\n return\n }\n\n // Fall back to non-streaming — wrap result with streamGenerationResult\n yield* streamGenerationResult(() => adapter.summarize(summarizeOptions))\n } catch (error) {\n logger.errors('summarize activity failed', {\n error,\n source: 'summarize',\n })\n throw error\n }\n}\n\n// ===========================\n// Options Factory\n// ===========================\n\n/**\n * Create typed options for the summarize() function without executing.\n */\nexport function createSummarizeOptions<\n TAdapter extends SummarizeAdapter<string, object>,\n TStream extends boolean = false,\n>(\n options: SummarizeActivityOptions<TAdapter, TStream>,\n): SummarizeActivityOptions<TAdapter, TStream> {\n return options\n}\n\n// Re-export adapter types\nexport type {\n SummarizeAdapter,\n SummarizeAdapterConfig,\n AnySummarizeAdapter,\n} from './adapter'\nexport { BaseSummarizeAdapter } from './adapter'\nexport {\n ChatStreamSummarizeAdapter,\n type ChatStreamCapable,\n type InferTextProviderOptions,\n} from './chat-stream-summarize'\n"],"names":[],"mappings":";;;AAoBO,MAAM,OAAO;AAyEpB,SAAS,SAAS,QAAwB;AACxC,SAAO,GAAG,MAAM,IAAI,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAC1E;AAwDO,SAAS,UAId,SACkC;AAClC,QAAM,EAAE,WAAW;AAEnB,MAAI,QAAQ;AACV,WAAO;AAAA,MACL;AAAA,IAAA;AAAA,EAKJ;AAEA,SAAO;AAAA,IACL;AAAA,EAAA;AAKJ;AAKA,eAAe,aACb,SAC8B;AAC9B,QAAM,EAAE,SAAS,MAAM,WAAW,OAAO,OAAO,iBAAiB;AACjE,QAAM,QAAQ,QAAQ;AACtB,QAAM,YAAY,SAAS,WAAW;AACtC,QAAM,cAAc,KAAK;AACzB,QAAM,YAAY,KAAK,IAAA;AACvB,QAAM,SAAyB,mBAAmB,QAAQ,KAAK;AAE/D,gBAAc,KAAK,6BAA6B;AAAA,IAC9C;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EAAA,CACZ;AAED,SAAO,QAAQ,+BAA+B,QAAQ,IAAI,IAAI;AAAA,IAC5D,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,UAAU,gBAAgB;AAEvD,UAAM,WAAW,KAAK,IAAA,IAAQ;AAC9B,UAAM,eAAe,OAAO,QAAQ;AAEpC,kBAAc,KAAK,+BAA+B;AAAA,MAChD;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAA;AAAA,IAAI,CACrB;AAED,WAAO,OAAO,6BAA6B,YAAY,IAAI;AAAA,MACzD,YAAY,CAAC,CAAC,OAAO;AAAA,MACrB;AAAA,IAAA,CACD;AAED,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO,OAAO,6BAA6B;AAAA,MACzC;AAAA,MACA,QAAQ;AAAA,IAAA,CACT;AACD,UAAM;AAAA,EACR;AACF;AAOA,gBAAgB,sBACd,SAC4B;AAC5B,QAAM,EAAE,SAAS,MAAM,WAAW,OAAO,OAAO,iBAAiB;AACjE,QAAM,QAAQ,QAAQ;AACtB,QAAM,SAAyB,mBAAmB,QAAQ,KAAK;AAE/D,SAAO,QAAQ,+BAA+B,QAAQ,IAAI,IAAI;AAAA,IAC5D,UAAU,QAAQ;AAAA,IAClB;AAAA,IACA,QAAQ;AAAA,EAAA,CACT;AAED,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,MAAI;AAEF,QAAI,QAAQ,iBAAiB;AAC3B,aAAO,QAAQ,gBAAgB,gBAAgB;AAC/C;AAAA,IACF;AAGA,WAAO,uBAAuB,MAAM,QAAQ,UAAU,gBAAgB,CAAC;AAAA,EACzE,SAAS,OAAO;AACd,WAAO,OAAO,6BAA6B;AAAA,MACzC;AAAA,MACA,QAAQ;AAAA,IAAA,CACT;AACD,UAAM;AAAA,EACR;AACF;AASO,SAAS,uBAId,SAC6C;AAC7C,SAAO;AACT;"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/activities/summarize/index.ts"],"sourcesContent":["/**\n * Summarize Activity\n *\n * Generates summaries from text input.\n * This is a self-contained module with implementation, types, and JSDoc.\n */\n\nimport { aiEventClient } from '@tanstack/ai-event-client'\nimport { streamGenerationResult } from '../stream-generation-result.js'\nimport { resolveDebugOption } from '../../logger/resolve'\nimport {\n applyGenerationResultTransforms,\n createGenerationContext,\n runGenerationAbort,\n runGenerationError,\n runGenerationFinish,\n runGenerationStart,\n runGenerationUsage,\n} from '../middleware/run'\nimport type { InternalLogger } from '../../logger/internal-logger'\nimport type { DebugOption } from '../../logger/types'\nimport type { GenerationMiddleware } from '../middleware/types'\nimport type { SummarizeAdapter } from './adapter'\nimport type { StreamChunk, SummarizationResult } from '../../types'\n\n// ===========================\n// Activity Kind\n// ===========================\n\n/** The adapter kind this activity handles */\nexport const kind = 'summarize' as const\n\n// ===========================\n// Type Extraction Helpers\n// ===========================\n\n/** Extract provider options from a SummarizeAdapter via ~types */\nexport type SummarizeProviderOptions<TAdapter> =\n TAdapter extends SummarizeAdapter<any, any>\n ? TAdapter['~types']['providerOptions']\n : object\n\n// ===========================\n// Activity Options Type\n// ===========================\n\n/**\n * Options for the summarize activity.\n * The model is extracted from the adapter's model property.\n *\n * @template TAdapter - The summarize adapter type\n * @template TStream - Whether to stream the output\n */\nexport interface SummarizeActivityOptions<\n TAdapter extends SummarizeAdapter<string, object>,\n TStream extends boolean = false,\n> {\n /** The summarize adapter to use (must be created with a model) */\n adapter: TAdapter & { kind: typeof kind }\n /** The text to summarize */\n text: string\n /** Maximum length of the summary (in words or characters, provider-dependent) */\n maxLength?: number\n /** Style of summary to generate */\n style?: 'bullet-points' | 'paragraph' | 'concise'\n /** Topics or aspects to focus on in the summary */\n focus?: Array<string>\n /** Provider-specific options */\n modelOptions?: SummarizeProviderOptions<TAdapter>\n /**\n * Optional run identity. When set on a streaming summarize, it is stamped\n * onto the emitted `RUN_STARTED` so a delivery-durable route keys the run's\n * log by the same id the client rejoins with — making a mid-run reload\n * resumable. Filed under `threadId` when persistence is wired.\n */\n runId?: string\n /**\n * Stable conversation/thread id for correlating this run when persisted — the\n * slot a reloading client hydrates the last summary by. Pass it whenever\n * persistence is on; `withGenerationPersistence` refuses a run without one.\n */\n threadId?: string\n /**\n * Observe-only middleware notified on start, usage, success, and error. Pass\n * `otelMiddleware()` for OpenTelemetry, `withGenerationPersistence()` to\n * record the run (summaries are text, so the run record holds the result and\n * there are no artifacts to store), or implement the `GenerationMiddleware`\n * contract for a custom backend.\n *\n * Streaming and non-streaming behave the same way: one `onStart`, then a\n * terminal `onFinish` / `onError`, with the result transforms applied to the\n * `SummarizationResult` in between. A streaming consumer that disconnects\n * mid-summary fires `onAbort`.\n */\n middleware?: Array<GenerationMiddleware>\n /**\n * Whether to stream the summarization result.\n * When true, returns an AsyncIterable<StreamChunk> for streaming output.\n * When false or not provided, returns a Promise<SummarizationResult>.\n *\n * @default false\n */\n stream?: TStream\n /**\n * Enable debug logging. Pass `true` to enable all categories, `false` to\n * silence everything including errors, or a `DebugConfig` object for granular\n * control and/or a custom `Logger`.\n */\n debug?: DebugOption\n}\n\n// ===========================\n// Activity Result Type\n// ===========================\n\n/**\n * Result type for the summarize activity.\n * - If stream is true: AsyncIterable<StreamChunk>\n * - Otherwise: Promise<SummarizationResult>\n */\nexport type SummarizeActivityResult<TStream extends boolean> =\n TStream extends true\n ? AsyncIterable<StreamChunk>\n : Promise<SummarizationResult>\n\n// ===========================\n// Helper Functions\n// ===========================\n\nfunction createId(prefix: string): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n}\n\n// ===========================\n// Activity Implementation\n// ===========================\n\n/**\n * Summarize activity - generates summaries from text.\n *\n * Supports both streaming and non-streaming modes.\n *\n * @example Basic summarization\n * ```ts\n * import { summarize } from '@tanstack/ai'\n * import { openaiSummarize } from '@tanstack/ai-openai'\n *\n * const result = await summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long article text here...'\n * })\n *\n * console.log(result.summary)\n * ```\n *\n * @example Summarization with style\n * ```ts\n * const result = await summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long article text here...',\n * style: 'bullet-points',\n * maxLength: 100\n * })\n * ```\n *\n * @example Focused summarization\n * ```ts\n * const result = await summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long technical document...',\n * focus: ['key findings', 'methodology']\n * })\n * ```\n *\n * @example Streaming summarization\n * ```ts\n * for await (const chunk of summarize({\n * adapter: openaiSummarize('gpt-4o-mini'),\n * text: 'Long article text here...',\n * stream: true\n * })) {\n * if (chunk.type === 'content') {\n * process.stdout.write(chunk.delta)\n * }\n * }\n * ```\n */\nexport function summarize<\n TAdapter extends SummarizeAdapter<string, object>,\n TStream extends boolean = false,\n>(\n options: SummarizeActivityOptions<TAdapter, TStream>,\n): SummarizeActivityResult<TStream> {\n const { stream } = options\n\n if (stream) {\n return runStreamingSummarize(\n options as SummarizeActivityOptions<\n SummarizeAdapter<string, object>,\n true\n >,\n ) as SummarizeActivityResult<TStream>\n }\n\n return runSummarize(\n options as SummarizeActivityOptions<\n SummarizeAdapter<string, object>,\n false\n >,\n ) as SummarizeActivityResult<TStream>\n}\n\n/**\n * Run non-streaming summarization\n */\nasync function runSummarize(\n options: SummarizeActivityOptions<SummarizeAdapter<string, object>, false>,\n): Promise<SummarizationResult> {\n const { adapter, text, maxLength, style, focus, modelOptions, middleware } =\n options\n const model = adapter.model\n const requestId = createId('summarize')\n const inputLength = text.length\n const startTime = Date.now()\n const logger: InternalLogger = resolveDebugOption(options.debug)\n\n const mwCtx = createGenerationContext({\n requestId,\n activity: 'summarize',\n provider: adapter.name,\n model,\n modelOptions,\n threadId: options.threadId,\n runId: options.runId,\n createId,\n })\n\n await runGenerationStart(middleware, mwCtx)\n\n aiEventClient.emit('summarize:request:started', {\n requestId,\n provider: adapter.name,\n model,\n inputLength,\n timestamp: startTime,\n })\n\n logger.request(`activity=summarize provider=${adapter.name}`, {\n provider: adapter.name,\n model,\n inputLength,\n })\n\n const summarizeOptions = {\n model,\n text,\n maxLength,\n style,\n focus,\n modelOptions,\n logger,\n }\n\n try {\n const rawResult = await adapter.summarize(summarizeOptions)\n // Transforms run before anything observes the result — the same order every\n // media activity uses — so the run record and the returned value are the\n // same object.\n const result = await applyGenerationResultTransforms(mwCtx, rawResult)\n\n const duration = Date.now() - startTime\n const outputLength = result.summary.length\n\n aiEventClient.emit('summarize:request:completed', {\n requestId,\n provider: adapter.name,\n model,\n inputLength,\n outputLength,\n duration,\n timestamp: Date.now(),\n })\n\n logger.output(`activity=summarize length=${outputLength}`, {\n hasSummary: !!result.summary,\n outputLength,\n })\n\n if (result.usage) await runGenerationUsage(middleware, mwCtx, result.usage)\n await runGenerationFinish(middleware, mwCtx, {\n duration,\n usage: result.usage,\n })\n\n return result\n } catch (error) {\n await runGenerationError(middleware, mwCtx, {\n error,\n duration: Date.now() - startTime,\n })\n logger.errors('summarize activity failed', {\n error,\n source: 'summarize',\n })\n throw error\n }\n}\n\n/** Read a `usage` off a transformed result without asserting its shape. */\nfunction usageOf(result: unknown): SummarizationResult['usage'] | undefined {\n if (typeof result !== 'object' || result === null) return undefined\n const usage = (result as { usage?: unknown }).usage\n return typeof usage === 'object' && usage !== null\n ? (usage as SummarizationResult['usage'])\n : undefined\n}\n\n/**\n * Run streaming summarization\n * Uses the adapter's native streaming if available, otherwise falls back\n * to non-streaming and yields the result as a single chunk.\n */\nasync function* runStreamingSummarize(\n options: SummarizeActivityOptions<SummarizeAdapter<string, object>, true>,\n): AsyncIterable<StreamChunk> {\n const {\n adapter,\n text,\n maxLength,\n style,\n focus,\n modelOptions,\n runId,\n threadId,\n } = options\n const model = adapter.model\n const logger: InternalLogger = resolveDebugOption(options.debug)\n\n logger.request(`activity=summarize provider=${adapter.name}`, {\n provider: adapter.name,\n model,\n stream: true,\n })\n\n // Thread the caller's run identity through so the emitted `RUN_STARTED`\n // carries it — keeps a delivery-durable route's log keyed by the id the\n // client rejoins with (mid-run reload resumability). Conditional spreads keep\n // the fields off the object entirely under `exactOptionalPropertyTypes`.\n const summarizeOptions = {\n model,\n text,\n maxLength,\n style,\n focus,\n modelOptions,\n logger,\n ...(runId !== undefined ? { runId } : {}),\n ...(threadId !== undefined ? { threadId } : {}),\n }\n\n // Use real streaming if the adapter supports it\n if (adapter.summarizeStream) {\n yield* runNativeSummarizeStream(\n options,\n adapter.summarizeStream(summarizeOptions),\n logger,\n )\n return\n }\n\n try {\n // Fall back to non-streaming — wrap the result with streamGenerationResult,\n // forwarding the run identity so its RUN_STARTED matches too. The generation\n // itself goes through `runSummarize`, so middleware (and its result\n // transforms) run exactly as they do for a non-streaming call. Only `runId`\n // is taken from the resolved wire identity — `threadId` stays the CALLER's,\n // since a minted one would file the run in a slot no client can hydrate.\n yield* streamGenerationResult(\n (resolved) =>\n runSummarize({ ...options, stream: false, runId: resolved.runId }),\n {\n ...(runId !== undefined ? { runId } : {}),\n ...(threadId !== undefined ? { threadId } : {}),\n },\n )\n } catch (error) {\n logger.errors('summarize activity failed', {\n error,\n source: 'summarize',\n })\n throw error\n }\n}\n\n/**\n * Drive an adapter's native `summarizeStream`, wiring the generation middleware\n * around it.\n *\n * The adapter emits a terminal `generation:result` CUSTOM chunk carrying the\n * assembled {@link SummarizationResult}; that is the one point where a result\n * exists, so the transforms run there and the REWRITTEN result is what gets\n * yielded — the client and the persisted run record then hold the same object.\n * An adapter whose stream never emits one still finishes the run, just with no\n * result recorded.\n */\nasync function* runNativeSummarizeStream(\n options: SummarizeActivityOptions<SummarizeAdapter<string, object>, true>,\n stream: AsyncIterable<StreamChunk>,\n logger: InternalLogger,\n): AsyncIterable<StreamChunk> {\n const { adapter, middleware, modelOptions } = options\n const mwCtx = createGenerationContext({\n requestId: createId('summarize'),\n activity: 'summarize',\n provider: adapter.name,\n model: adapter.model,\n modelOptions,\n threadId: options.threadId,\n runId: options.runId,\n createId,\n })\n\n await runGenerationStart(middleware, mwCtx)\n\n const startTime = Date.now()\n // Tracks whether a terminal hook already fired, so the `finally` can report an\n // abandoned stream without double-firing. Mirrors the streaming video path.\n let settled = false\n try {\n for await (const chunk of stream) {\n if (chunk.type === 'CUSTOM' && chunk.name === 'generation:result') {\n const result = await applyGenerationResultTransforms<unknown>(\n mwCtx,\n chunk.value,\n )\n const usage = usageOf(result)\n // Finish before yielding the terminal chunks: a consumer that stops\n // reading once it has the result must not trip the abandonment path.\n if (usage) await runGenerationUsage(middleware, mwCtx, usage)\n await runGenerationFinish(middleware, mwCtx, {\n duration: Date.now() - startTime,\n usage,\n })\n settled = true\n yield { ...chunk, value: result }\n continue\n }\n yield chunk\n }\n if (!settled) {\n await runGenerationFinish(middleware, mwCtx, {\n duration: Date.now() - startTime,\n })\n settled = true\n }\n } catch (error) {\n settled = true\n await runGenerationError(middleware, mwCtx, {\n error,\n duration: Date.now() - startTime,\n })\n logger.errors('summarize activity failed', {\n error,\n source: 'summarize',\n })\n throw error\n } finally {\n if (!settled) {\n // The consumer abandoned the stream mid-summary, so the generator is being\n // unwound at a `yield`. Report a cancel, not an error, so an observer ends\n // its span (and persistence marks the run interrupted) instead of leaving\n // the run open forever.\n await runGenerationAbort(middleware, mwCtx, {\n reason: 'Summarize stream abandoned before completion',\n duration: Date.now() - startTime,\n })\n }\n }\n}\n\n// ===========================\n// Options Factory\n// ===========================\n\n/**\n * Create typed options for the summarize() function without executing.\n */\nexport function createSummarizeOptions<\n TAdapter extends SummarizeAdapter<string, object>,\n TStream extends boolean = false,\n>(\n options: SummarizeActivityOptions<TAdapter, TStream>,\n): SummarizeActivityOptions<TAdapter, TStream> {\n return options\n}\n\n// Re-export adapter types\nexport type {\n SummarizeAdapter,\n SummarizeAdapterConfig,\n AnySummarizeAdapter,\n} from './adapter'\nexport { BaseSummarizeAdapter } from './adapter'\nexport {\n ChatStreamSummarizeAdapter,\n type ChatStreamCapable,\n type InferTextProviderOptions,\n} from './chat-stream-summarize'\n"],"mappings":"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"}
|
|
@@ -4,4 +4,5 @@ export type { Logger } from './logger/types.js';
|
|
|
4
4
|
export { resolveDebugOption } from './logger/resolve.js';
|
|
5
5
|
export { toRunErrorPayload, toRunErrorRawEvent, } from './activities/error-payload.js';
|
|
6
6
|
export { getSandboxRuntime, provideSandboxRuntime, SandboxRuntimeCapability, } from './activities/chat/middleware/sandbox-runtime.js';
|
|
7
|
-
export
|
|
7
|
+
export { getRunDisconnect, provideRunDisconnect, RunDisconnectCapability, } from './activities/chat/middleware/run-disconnect.js';
|
|
8
|
+
export { getPendingTurn, PendingTurnCapability, providePendingTurn, } from './activities/chat/middleware/pending-turn.js';
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
+
import { toRunErrorPayload, toRunErrorRawEvent } from "./activities/error-payload.js";
|
|
1
2
|
import { InternalLogger } from "./logger/internal-logger.js";
|
|
2
3
|
import { resolveDebugOption } from "./logger/resolve.js";
|
|
3
|
-
import { toRunErrorPayload, toRunErrorRawEvent } from "./activities/error-payload.js";
|
|
4
4
|
import { SandboxRuntimeCapability, getSandboxRuntime, provideSandboxRuntime } from "./activities/chat/middleware/sandbox-runtime.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
getSandboxRuntime,
|
|
9
|
-
provideSandboxRuntime,
|
|
10
|
-
resolveDebugOption,
|
|
11
|
-
toRunErrorPayload,
|
|
12
|
-
toRunErrorRawEvent
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=adapter-internals.js.map
|
|
5
|
+
import { RunDisconnectCapability, getRunDisconnect, provideRunDisconnect } from "./activities/chat/middleware/run-disconnect.js";
|
|
6
|
+
import { PendingTurnCapability, getPendingTurn, providePendingTurn } from "./activities/chat/middleware/pending-turn.js";
|
|
7
|
+
export { InternalLogger, PendingTurnCapability, RunDisconnectCapability, SandboxRuntimeCapability, getPendingTurn, getRunDisconnect, getSandboxRuntime, providePendingTurn, provideRunDisconnect, provideSandboxRuntime, resolveDebugOption, toRunErrorPayload, toRunErrorRawEvent };
|
package/dist/esm/client.d.ts
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
import { AudioGenerationOptions, ImageGenerationOptions, TTSOptions, TranscriptionOptions, VideoGenerationOptions } from './types.js';
|
|
2
|
+
export type GenerationKind = 'image' | 'audio' | 'tts' | 'video' | 'transcription';
|
|
3
|
+
type GenerationInputByKind = {
|
|
4
|
+
image: Omit<ImageGenerationOptions, 'logger' | 'model'>;
|
|
5
|
+
audio: Omit<AudioGenerationOptions, 'logger' | 'model'>;
|
|
6
|
+
tts: Omit<TTSOptions, 'logger' | 'model'>;
|
|
7
|
+
video: Omit<VideoGenerationOptions, 'logger' | 'model'>;
|
|
8
|
+
transcription: Omit<TranscriptionOptions, 'logger' | 'model'>;
|
|
9
|
+
};
|
|
10
|
+
export interface GenerationParams<TKind extends GenerationKind> {
|
|
11
|
+
input: GenerationInputByKind[TKind];
|
|
12
|
+
forwardedProps: Record<string, unknown>;
|
|
13
|
+
threadId?: string;
|
|
14
|
+
runId?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function generationParamsFromBody<TKind extends GenerationKind>(kind: TKind, body: unknown): GenerationParams<TKind>;
|
|
17
|
+
export declare function generationParamsFromRequest<TKind extends GenerationKind>(kind: TKind, request: Request): Promise<GenerationParams<TKind>>;
|
|
1
18
|
export declare enum EventType {
|
|
2
19
|
TEXT_MESSAGE_START = "TEXT_MESSAGE_START",
|
|
3
20
|
TEXT_MESSAGE_CONTENT = "TEXT_MESSAGE_CONTENT",
|
|
@@ -33,12 +50,17 @@ export declare enum EventType {
|
|
|
33
50
|
REASONING_END = "REASONING_END",
|
|
34
51
|
REASONING_ENCRYPTED_VALUE = "REASONING_ENCRYPTED_VALUE"
|
|
35
52
|
}
|
|
36
|
-
export { toolDefinition, type AnyClientTool, type ClientTool, type InferToolInput, type InferToolName, type InferToolOutput, type ToolDefinition, type ToolDefinitionConfig, type ToolDefinitionInstance, } from './activities/chat/tools/tool-definition.js';
|
|
37
|
-
export {
|
|
53
|
+
export { toolDefinition, type AnyClientTool, type ClientTool, type InferToolInput, type InferToolName, type InferToolOutput, type ApprovalCapabilityOf, type ApprovalSchemaConfig, type ApprovalSchemaOf, type InputSchemaOf, type OutputSchemaOf, type NoSchema, type ToolDefinition, type ToolDefinitionConfig, type ToolDefinitionInstance, } from './activities/chat/tools/tool-definition.js';
|
|
54
|
+
export { hashSchemaInput, normalizeApprovalSchema, type NormalizedApprovalSchema, type NormalizedSchemaInput, } from './activities/chat/tools/approval-schema.js';
|
|
55
|
+
export { canonicalInterruptJson, cloneAndDeepFreezeJson, digestInterruptJson, } from './interrupt-serialization.js';
|
|
56
|
+
export { convertSchemaToJsonSchema, isStandardSchema, parseWithStandardSchema, validateWithStandardSchema, } from './activities/chat/tools/schema-converter.js';
|
|
38
57
|
export { convertMessagesToModelMessages, generateMessageId, modelMessageToUIMessage, modelMessagesToUIMessages, normalizeToUIMessage, uiMessageToModelMessages, } from './activities/chat/messages.js';
|
|
39
58
|
export { BatchStrategy, CompositeStrategy, defaultJSONParser, ImmediateStrategy, parsePartialJSON, PartialJSONParser, PunctuationStrategy, StreamProcessor, WordBoundaryStrategy, } from './activities/chat/stream/index.js';
|
|
40
59
|
export type { ChunkRecording, ChunkStrategy, InternalToolCallState, JSONParser, ProcessorResult, ProcessorState, StreamProcessorEvents, StreamProcessorOptions, ToolCallState, ToolResultState, } from './activities/chat/stream/index.js';
|
|
41
60
|
export { uiMessagesToWire } from './utilities/ag-ui-wire.js';
|
|
42
61
|
export type { WireMessage } from './utilities/ag-ui-wire.js';
|
|
43
|
-
export type { AudioPart, ContentPart, ContentPartDataSource, ContentPartSource, ContentPartUrlSource, CustomEvent, DocumentPart, ImagePart, MediaInputMetadata, MediaInputRole, MediaPrompt, MediaPromptPart, MessagePart, ModelMessage, RunErrorEvent, RunFinishedEvent, SchemaInput, StreamChunk, StructuredOutputPart, TextPart, ThinkingPart, ToolCall, ToolCallPart, ToolResultPart, UIMessage, UIResourcePart, VideoPart, InferSchemaType, } from './types.js';
|
|
62
|
+
export type { AudioPart, ContentPart, ContentPartDataSource, ContentPartSource, ContentPartUrlSource, CustomEvent, DocumentPart, ImagePart, MediaInputMetadata, MediaInputRole, MediaPrompt, MediaPromptPart, MessagePart, ModelMessage, PersistedArtifactActivity, PersistedArtifactRef, PersistedArtifactRole, Interrupt, RunAgentResumeItem, RunErrorEvent, RunFinishedEvent, RunFinishedOutcome, SchemaInput, StreamChunk, StructuredOutputPart, TextPart, ThinkingPart, ToolCall, ToolCallPart, ToolResultPart, UIMessage, UIResourcePart, VideoPart, InferSchemaType, } from './types.js';
|
|
63
|
+
export { INTERRUPT_BINDING_VERSION, canonicalizeInterruptResolutions, } from './interrupts.js';
|
|
64
|
+
export type { BatchInterruptError, BatchInterruptErrorCode, InterruptBinding, InterruptCorrelation, InterruptSubmissionError, ItemInterruptError, ItemInterruptErrorCode, ToolApprovalResolution, UnopenedInterruptBinding, } from './interrupts.js';
|
|
65
|
+
export { INTERRUPT_BINDING_METADATA_KEY, readInterruptBinding, readUnopenedInterruptBinding, withInterruptBinding, withoutInterruptBinding, } from './interrupt-resume.js';
|
|
44
66
|
export type { AudioVisualization, RealtimeAdapter, RealtimeConnection, RealtimeError, RealtimeErrorCode, RealtimeEvent, RealtimeEventHandler, RealtimeEventPayloads, RealtimeMessage, RealtimeMessagePart, RealtimeMode, RealtimeSessionConfig, RealtimeStatus, RealtimeToken, RealtimeAudioPart, RealtimeImagePart, RealtimeTextPart, RealtimeToolCallPart, RealtimeToolResultPart, VADConfig, } from './realtime/types.js';
|