@tanstack/ai 0.47.3 → 0.48.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 +2 -1
- package/dist/esm/activities/chat/adapter.d.ts +5 -4
- package/dist/esm/activities/chat/adapter.js.map +1 -1
- package/dist/esm/activities/chat/index.d.ts +4 -7
- package/dist/esm/activities/chat/index.js +201 -243
- package/dist/esm/activities/chat/index.js.map +1 -1
- package/dist/esm/activities/chat/messages.js +115 -25
- package/dist/esm/activities/chat/messages.js.map +1 -1
- package/dist/esm/activities/chat/stream/processor.d.ts +38 -17
- package/dist/esm/activities/chat/stream/processor.js +186 -101
- package/dist/esm/activities/chat/stream/processor.js.map +1 -1
- package/dist/esm/activities/chat/tools/tool-calls.d.ts +3 -2
- package/dist/esm/activities/chat/tools/tool-calls.js +15 -10
- package/dist/esm/activities/chat/tools/tool-calls.js.map +1 -1
- package/dist/esm/activities/generateVideo/index.js +6 -6
- package/dist/esm/activities/generateVideo/index.js.map +1 -1
- package/dist/esm/activities/stream-generation-result.js +7 -8
- package/dist/esm/activities/stream-generation-result.js.map +1 -1
- package/dist/esm/activities/summarize/chat-stream-summarize.d.ts +2 -1
- package/dist/esm/activities/summarize/chat-stream-summarize.js +56 -53
- package/dist/esm/activities/summarize/chat-stream-summarize.js.map +1 -1
- package/dist/esm/adapter-internals.d.ts +2 -0
- package/dist/esm/adapter-internals.js +3 -1
- package/dist/esm/client.d.ts +8 -1
- package/dist/esm/client.js +7 -2
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -2
- package/dist/esm/middlewares/otel.js +11 -4
- package/dist/esm/middlewares/otel.js.map +1 -1
- package/dist/esm/stream-to-response.js +8 -5
- package/dist/esm/stream-to-response.js.map +1 -1
- package/dist/esm/stream-to-websocket.js +4 -2
- package/dist/esm/stream-to-websocket.js.map +1 -1
- package/dist/esm/strip-to-spec-middleware.d.ts +10 -13
- package/dist/esm/strip-to-spec-middleware.js +24 -22
- package/dist/esm/strip-to-spec-middleware.js.map +1 -1
- package/dist/esm/types.d.ts +82 -305
- package/dist/esm/utilities/adapter-yield-chunk.d.ts +31 -0
- package/dist/esm/utilities/ag-ui-usage.d.ts +24 -0
- package/dist/esm/utilities/ag-ui-usage.js +66 -0
- package/dist/esm/utilities/ag-ui-usage.js.map +1 -0
- package/dist/esm/utilities/ag-ui-wire.d.ts +14 -7
- package/dist/esm/utilities/ag-ui-wire.js +71 -30
- package/dist/esm/utilities/ag-ui-wire.js.map +1 -1
- package/dist/esm/utilities/chat-params.d.ts +3 -3
- package/dist/esm/utilities/chat-params.js +10 -30
- package/dist/esm/utilities/chat-params.js.map +1 -1
- package/dist/esm/utilities/chunk-ids.d.ts +5 -0
- package/dist/esm/utilities/chunk-ids.js +25 -0
- package/dist/esm/utilities/chunk-ids.js.map +1 -0
- package/dist/esm/utilities/merge-metadata.d.ts +14 -0
- package/dist/esm/utilities/merge-metadata.js +43 -0
- package/dist/esm/utilities/merge-metadata.js.map +1 -0
- package/dist/esm/utilities/normalize-stream-chunk.d.ts +3 -0
- package/dist/esm/utilities/normalize-stream-chunk.js +100 -0
- package/dist/esm/utilities/normalize-stream-chunk.js.map +1 -0
- package/dist/esm/utilities/reasoning-encrypted-value.d.ts +8 -0
- package/dist/esm/utilities/reasoning-encrypted-value.js +16 -0
- package/dist/esm/utilities/reasoning-encrypted-value.js.map +1 -0
- package/dist/esm/utilities/restore-inbound-chunk.d.ts +15 -0
- package/dist/esm/utilities/restore-inbound-chunk.js +43 -0
- package/dist/esm/utilities/restore-inbound-chunk.js.map +1 -0
- package/dist/esm/utilities/spec-event-keys.d.ts +2 -0
- package/dist/esm/utilities/spec-event-keys.js +56 -0
- package/dist/esm/utilities/spec-event-keys.js.map +1 -0
- package/dist/esm/utilities/structured-output-events.d.ts +3 -3
- package/dist/esm/utilities/structured-output-events.js.map +1 -1
- package/package.json +2 -2
- package/src/activities/chat/adapter.ts +4 -4
- package/src/activities/chat/index.ts +398 -400
- package/src/activities/chat/messages.ts +174 -34
- package/src/activities/chat/stream/processor.ts +289 -218
- package/src/activities/chat/tools/tool-calls.ts +23 -22
- package/src/activities/generateVideo/index.ts +7 -6
- package/src/activities/stream-generation-result.ts +8 -12
- package/src/activities/summarize/chat-stream-summarize.ts +94 -70
- package/src/adapter-internals.ts +2 -0
- package/src/client.ts +13 -0
- package/src/index.ts +6 -0
- package/src/middlewares/otel.ts +16 -8
- package/src/stream-to-response.ts +11 -4
- package/src/stream-to-websocket.ts +3 -1
- package/src/strip-to-spec-middleware.ts +48 -24
- package/src/types.ts +109 -393
- package/src/utilities/adapter-yield-chunk.ts +30 -0
- package/src/utilities/ag-ui-usage.test.ts +194 -0
- package/src/utilities/ag-ui-usage.ts +148 -0
- package/src/utilities/ag-ui-wire.ts +149 -31
- package/src/utilities/chat-params.ts +22 -39
- package/src/utilities/chunk-ids.ts +24 -0
- package/src/utilities/merge-metadata.test.ts +117 -0
- package/src/utilities/merge-metadata.ts +59 -0
- package/src/utilities/normalize-stream-chunk.test.ts +423 -0
- package/src/utilities/normalize-stream-chunk.ts +186 -0
- package/src/utilities/reasoning-encrypted-value.ts +18 -0
- package/src/utilities/restore-inbound-chunk.test.ts +133 -0
- package/src/utilities/restore-inbound-chunk.ts +72 -0
- package/src/utilities/spec-event-keys.test.ts +34 -0
- package/src/utilities/spec-event-keys.ts +74 -0
- package/src/utilities/structured-output-events.ts +3 -3
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { EventType } from "../types.js";
|
|
2
|
+
import { isTanstackUsage, toSpecTokenUsage } from "./ag-ui-usage.js";
|
|
3
|
+
import { withTanstackMetadata } from "./merge-metadata.js";
|
|
4
|
+
import { reasoningEncryptedValue } from "./reasoning-encrypted-value.js";
|
|
5
|
+
import { specKeysFor } from "./spec-event-keys.js";
|
|
6
|
+
//#region src/utilities/normalize-stream-chunk.ts
|
|
7
|
+
function stringField(value) {
|
|
8
|
+
return typeof value === "string" && value !== "" ? value : void 0;
|
|
9
|
+
}
|
|
10
|
+
function encryptedValueExtras(chunk) {
|
|
11
|
+
const extras = [];
|
|
12
|
+
const timestamp = "timestamp" in chunk && typeof chunk.timestamp === "number" ? chunk.timestamp : void 0;
|
|
13
|
+
if (typeof chunk.signature === "string" && chunk.signature !== "") {
|
|
14
|
+
const source = chunk;
|
|
15
|
+
const toolCallId = stringField(source.toolCallId);
|
|
16
|
+
const entityId = stringField(chunk.stepId) ?? stringField(source.stepName) ?? stringField(source.messageId) ?? toolCallId;
|
|
17
|
+
if (entityId !== void 0) extras.push(reasoningEncryptedValue({
|
|
18
|
+
subtype: toolCallId && !chunk.stepId ? "tool-call" : "message",
|
|
19
|
+
entityId,
|
|
20
|
+
encryptedValue: chunk.signature,
|
|
21
|
+
timestamp
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
if (chunk.type === EventType.TOOL_CALL_START) {
|
|
25
|
+
const thoughtSignature = stringField(chunk.metadata?.thoughtSignature);
|
|
26
|
+
if (thoughtSignature !== void 0 && chunk.toolCallId) extras.push(reasoningEncryptedValue({
|
|
27
|
+
subtype: "tool-call",
|
|
28
|
+
entityId: chunk.toolCallId,
|
|
29
|
+
encryptedValue: thoughtSignature,
|
|
30
|
+
timestamp
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
return extras;
|
|
34
|
+
}
|
|
35
|
+
function normalizeStreamChunk(chunk) {
|
|
36
|
+
const specKeys = specKeysFor(chunk.type);
|
|
37
|
+
const source = chunk;
|
|
38
|
+
const specChunk = {};
|
|
39
|
+
for (const key of Object.keys(chunk)) if (specKeys.has(key)) specChunk[key] = source[key];
|
|
40
|
+
if (chunk.type === EventType.TOOL_CALL_START) {
|
|
41
|
+
if (specChunk.toolCallName === void 0 && chunk.toolName) specChunk.toolCallName = chunk.toolName;
|
|
42
|
+
}
|
|
43
|
+
if (chunk.type === EventType.RUN_ERROR && chunk.error != null) {
|
|
44
|
+
if (specChunk.message === void 0 && chunk.error.message) specChunk.message = chunk.error.message;
|
|
45
|
+
if (specChunk.code === void 0 && chunk.error.code !== void 0) specChunk.code = chunk.error.code;
|
|
46
|
+
}
|
|
47
|
+
const tanstack = {};
|
|
48
|
+
if (chunk.model !== void 0 && chunk.type !== EventType.TEXT_MESSAGE_CONTENT && chunk.type !== EventType.TOOL_CALL_ARGS) tanstack.model = chunk.model;
|
|
49
|
+
if (chunk.finishReason !== void 0) tanstack.finishReason = chunk.finishReason;
|
|
50
|
+
const interruptErrors = chunk["tanstack:interruptErrors"];
|
|
51
|
+
if (interruptErrors !== void 0) tanstack.interruptErrors = interruptErrors;
|
|
52
|
+
if (chunk.type === EventType.CUSTOM || chunk.type === EventType.RUN_ERROR) {
|
|
53
|
+
if (chunk.threadId !== void 0) tanstack.threadId = chunk.threadId;
|
|
54
|
+
if (chunk.runId !== void 0) tanstack.runId = chunk.runId;
|
|
55
|
+
}
|
|
56
|
+
const skipLeftover = /* @__PURE__ */ new Set([
|
|
57
|
+
"result",
|
|
58
|
+
"error",
|
|
59
|
+
"tanstack:interruptErrors"
|
|
60
|
+
]);
|
|
61
|
+
if (chunk.type === EventType.TEXT_MESSAGE_CONTENT || chunk.type === EventType.TOOL_CALL_ARGS) {
|
|
62
|
+
skipLeftover.add("model");
|
|
63
|
+
skipLeftover.add("content");
|
|
64
|
+
skipLeftover.add("args");
|
|
65
|
+
}
|
|
66
|
+
if (chunk.type === EventType.TOOL_CALL_START) skipLeftover.add("toolName");
|
|
67
|
+
for (const key of Object.keys(chunk)) {
|
|
68
|
+
if (specKeys.has(key) || skipLeftover.has(key)) continue;
|
|
69
|
+
if (tanstack[key] !== void 0) continue;
|
|
70
|
+
const value = source[key];
|
|
71
|
+
if (value !== void 0) tanstack[key] = value;
|
|
72
|
+
}
|
|
73
|
+
if ((chunk.type === EventType.RUN_FINISHED || chunk.type === EventType.RUN_ERROR) && isTanstackUsage(specChunk.usage)) {
|
|
74
|
+
const { usage, leftover } = toSpecTokenUsage(specChunk.usage, { model: typeof chunk.model === "string" ? chunk.model : void 0 });
|
|
75
|
+
specChunk.usage = usage;
|
|
76
|
+
if (leftover !== void 0) tanstack.usage = leftover;
|
|
77
|
+
}
|
|
78
|
+
const normalized = Object.keys(tanstack).length === 0 ? specChunk : withTanstackMetadata(specChunk, tanstack);
|
|
79
|
+
const extras = encryptedValueExtras(chunk);
|
|
80
|
+
const main = [normalized];
|
|
81
|
+
if (chunk.type === EventType.TOOL_CALL_END && chunk.result !== void 0) {
|
|
82
|
+
const parentMessageId = source.parentMessageId;
|
|
83
|
+
const resultChunk = {
|
|
84
|
+
type: EventType.TOOL_CALL_RESULT,
|
|
85
|
+
toolCallId: chunk.toolCallId,
|
|
86
|
+
content: Array.isArray(chunk.result) ? JSON.stringify(chunk.result) : chunk.result,
|
|
87
|
+
messageId: typeof parentMessageId === "string" && parentMessageId !== "" ? parentMessageId : chunk.toolCallId
|
|
88
|
+
};
|
|
89
|
+
if (chunk.state === "output-error") main.push({
|
|
90
|
+
...resultChunk,
|
|
91
|
+
metadata: { tanstack: { state: chunk.state } }
|
|
92
|
+
});
|
|
93
|
+
else main.push(resultChunk);
|
|
94
|
+
}
|
|
95
|
+
return [...main, ...extras];
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { normalizeStreamChunk };
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=normalize-stream-chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-stream-chunk.js","names":[],"sources":["../../../src/utilities/normalize-stream-chunk.ts"],"sourcesContent":["import { EventType } from '../types'\nimport type { StreamChunk, ToolCallResultEvent } from '../types'\nimport type { AdapterYieldChunk } from './adapter-yield-chunk'\nimport { isTanstackUsage, toSpecTokenUsage } from './ag-ui-usage'\nimport type { MetadataRecord } from './merge-metadata'\nimport { withTanstackMetadata } from './merge-metadata'\nimport { reasoningEncryptedValue } from './reasoning-encrypted-value'\nimport { specKeysFor } from './spec-event-keys'\n\nfunction stringField(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined\n}\n\nfunction encryptedValueExtras(chunk: AdapterYieldChunk): Array<StreamChunk> {\n const extras: Array<StreamChunk> = []\n const timestamp =\n 'timestamp' in chunk && typeof chunk.timestamp === 'number'\n ? chunk.timestamp\n : undefined\n\n if (typeof chunk.signature === 'string' && chunk.signature !== '') {\n const source = chunk as Record<string, unknown>\n const toolCallId = stringField(source.toolCallId)\n const entityId =\n stringField(chunk.stepId) ??\n stringField(source.stepName) ??\n stringField(source.messageId) ??\n toolCallId\n if (entityId !== undefined) {\n extras.push(\n reasoningEncryptedValue({\n subtype: toolCallId && !chunk.stepId ? 'tool-call' : 'message',\n entityId,\n encryptedValue: chunk.signature,\n timestamp,\n }),\n )\n }\n }\n\n if (chunk.type === EventType.TOOL_CALL_START) {\n const thoughtSignature = stringField(\n (chunk.metadata as { thoughtSignature?: unknown } | undefined)\n ?.thoughtSignature,\n )\n if (thoughtSignature !== undefined && chunk.toolCallId) {\n extras.push(\n reasoningEncryptedValue({\n subtype: 'tool-call',\n entityId: chunk.toolCallId,\n encryptedValue: thoughtSignature,\n timestamp,\n }),\n )\n }\n }\n\n return extras\n}\n\nexport function normalizeStreamChunk(\n chunk: AdapterYieldChunk,\n): Array<StreamChunk> {\n const specKeys = specKeysFor(chunk.type)\n const source = chunk as Record<string, unknown>\n const specChunk: Record<string, unknown> & {\n metadata?: MetadataRecord | null\n } = {}\n\n for (const key of Object.keys(chunk)) {\n if (specKeys.has(key)) {\n specChunk[key] = source[key]\n }\n }\n\n if (chunk.type === EventType.TOOL_CALL_START) {\n if (specChunk.toolCallName === undefined && chunk.toolName) {\n specChunk.toolCallName = chunk.toolName\n }\n }\n\n if (chunk.type === EventType.RUN_ERROR && chunk.error != null) {\n if (specChunk.message === undefined && chunk.error.message) {\n specChunk.message = chunk.error.message\n }\n if (specChunk.code === undefined && chunk.error.code !== undefined) {\n specChunk.code = chunk.error.code\n }\n }\n\n const tanstack: MetadataRecord = {}\n\n if (\n chunk.model !== undefined &&\n chunk.type !== EventType.TEXT_MESSAGE_CONTENT &&\n chunk.type !== EventType.TOOL_CALL_ARGS\n ) {\n tanstack.model = chunk.model\n }\n\n if (chunk.finishReason !== undefined) {\n tanstack.finishReason = chunk.finishReason\n }\n\n const interruptErrors = chunk['tanstack:interruptErrors']\n if (interruptErrors !== undefined) {\n tanstack.interruptErrors = interruptErrors\n }\n\n if (chunk.type === EventType.CUSTOM || chunk.type === EventType.RUN_ERROR) {\n if (chunk.threadId !== undefined) {\n tanstack.threadId = chunk.threadId\n }\n if (chunk.runId !== undefined) {\n tanstack.runId = chunk.runId\n }\n }\n\n const skipLeftover = new Set(['result', 'error', 'tanstack:interruptErrors'])\n if (\n chunk.type === EventType.TEXT_MESSAGE_CONTENT ||\n chunk.type === EventType.TOOL_CALL_ARGS\n ) {\n skipLeftover.add('model')\n skipLeftover.add('content')\n skipLeftover.add('args')\n }\n if (chunk.type === EventType.TOOL_CALL_START) {\n skipLeftover.add('toolName')\n }\n for (const key of Object.keys(chunk)) {\n if (specKeys.has(key) || skipLeftover.has(key)) continue\n if (tanstack[key] !== undefined) continue\n const value = source[key]\n if (value !== undefined) {\n tanstack[key] = value\n }\n }\n\n if (\n (chunk.type === EventType.RUN_FINISHED ||\n chunk.type === EventType.RUN_ERROR) &&\n isTanstackUsage(specChunk.usage)\n ) {\n const { usage, leftover } = toSpecTokenUsage(specChunk.usage, {\n model: typeof chunk.model === 'string' ? chunk.model : undefined,\n })\n specChunk.usage = usage\n if (leftover !== undefined) {\n tanstack.usage = leftover\n }\n }\n\n const normalized =\n Object.keys(tanstack).length === 0\n ? specChunk\n : withTanstackMetadata(specChunk, tanstack)\n\n const extras = encryptedValueExtras(chunk)\n const main: Array<StreamChunk> = [normalized as StreamChunk]\n\n if (chunk.type === EventType.TOOL_CALL_END && chunk.result !== undefined) {\n const parentMessageId = source.parentMessageId\n const resultChunk: ToolCallResultEvent = {\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: chunk.toolCallId,\n content: Array.isArray(chunk.result)\n ? JSON.stringify(chunk.result)\n : chunk.result,\n messageId:\n typeof parentMessageId === 'string' && parentMessageId !== ''\n ? parentMessageId\n : chunk.toolCallId,\n }\n if (chunk.state === 'output-error') {\n main.push({\n ...resultChunk,\n metadata: { tanstack: { state: chunk.state } },\n })\n } else {\n main.push(resultChunk)\n }\n }\n\n return [...main, ...extras]\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReasoningEncryptedValueEvent } from '../types.js';
|
|
2
|
+
/** Spec event that carries a provider thinking / tool-call signature blob. */
|
|
3
|
+
export declare function reasoningEncryptedValue(opts: {
|
|
4
|
+
subtype: 'message' | 'tool-call';
|
|
5
|
+
entityId: string;
|
|
6
|
+
encryptedValue: string;
|
|
7
|
+
timestamp?: number;
|
|
8
|
+
}): ReasoningEncryptedValueEvent;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EventType } from "../types.js";
|
|
2
|
+
//#region src/utilities/reasoning-encrypted-value.ts
|
|
3
|
+
/** Spec event that carries a provider thinking / tool-call signature blob. */
|
|
4
|
+
function reasoningEncryptedValue(opts) {
|
|
5
|
+
return {
|
|
6
|
+
type: EventType.REASONING_ENCRYPTED_VALUE,
|
|
7
|
+
subtype: opts.subtype,
|
|
8
|
+
entityId: opts.entityId,
|
|
9
|
+
encryptedValue: opts.encryptedValue,
|
|
10
|
+
...opts.timestamp !== void 0 ? { timestamp: opts.timestamp } : {}
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { reasoningEncryptedValue };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=reasoning-encrypted-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-encrypted-value.js","names":[],"sources":["../../../src/utilities/reasoning-encrypted-value.ts"],"sourcesContent":["import { EventType } from '../types'\nimport type { ReasoningEncryptedValueEvent } from '../types'\n\n/** Spec event that carries a provider thinking / tool-call signature blob. */\nexport function reasoningEncryptedValue(opts: {\n subtype: 'message' | 'tool-call'\n entityId: string\n encryptedValue: string\n timestamp?: number\n}): ReasoningEncryptedValueEvent {\n return {\n type: EventType.REASONING_ENCRYPTED_VALUE,\n subtype: opts.subtype,\n entityId: opts.entityId,\n encryptedValue: opts.encryptedValue,\n ...(opts.timestamp !== undefined ? { timestamp: opts.timestamp } : {}),\n }\n}\n"],"mappings":";;;AAIA,SAAgB,wBAAwB,MAKP;CAC/B,OAAO;EACL,MAAM,UAAU;EAChB,SAAS,KAAK;EACd,UAAU,KAAK;EACf,gBAAgB,KAAK;EACrB,GAAI,KAAK,cAAc,KAAA,IAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;CACtE;AACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { StreamChunk } from '../types.js';
|
|
2
|
+
import { AdapterYieldChunk } from './adapter-yield-chunk.js';
|
|
3
|
+
/**
|
|
4
|
+
* Rebuild TanStack `TokenUsage` (`promptTokens`) from spec `usage[]` plus
|
|
5
|
+
* leftover fields in `metadata.tanstack.usage`. Restore in-process aliases
|
|
6
|
+
* that the wire does not keep (`toolName`, `TOOL_CALL_END.input`). Mutates
|
|
7
|
+
* in place so WeakMap run-id stamps stay attached.
|
|
8
|
+
*/
|
|
9
|
+
export declare function restorePublicUsage(chunk: StreamChunk): StreamChunk;
|
|
10
|
+
/**
|
|
11
|
+
* Rebuild the pre-wire chunk shape after SSE/HTTP/WS ingest.
|
|
12
|
+
* Copies `metadata.tanstack` extras back to top-level fields and rebuilds
|
|
13
|
+
* TanStack `TokenUsage` from spec `usage[]` when present.
|
|
14
|
+
*/
|
|
15
|
+
export declare function restoreInboundChunk(chunk: StreamChunk): AdapterYieldChunk;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { EventType } from "../types.js";
|
|
2
|
+
import { isTanstackUsage, rebuildTokenUsage } from "./ag-ui-usage.js";
|
|
3
|
+
import { tanstackMetadata } from "./merge-metadata.js";
|
|
4
|
+
//#region src/utilities/restore-inbound-chunk.ts
|
|
5
|
+
/**
|
|
6
|
+
* Rebuild TanStack `TokenUsage` (`promptTokens`) from spec `usage[]` plus
|
|
7
|
+
* leftover fields in `metadata.tanstack.usage`. Restore in-process aliases
|
|
8
|
+
* that the wire does not keep (`toolName`, `TOOL_CALL_END.input`). Mutates
|
|
9
|
+
* in place so WeakMap run-id stamps stay attached.
|
|
10
|
+
*/
|
|
11
|
+
function restorePublicUsage(chunk) {
|
|
12
|
+
if ((chunk.type === EventType.RUN_FINISHED || chunk.type === EventType.RUN_ERROR) && (Array.isArray(chunk.usage) || isTanstackUsage(chunk.usage))) {
|
|
13
|
+
const rebuilt = rebuildTokenUsage(chunk.usage, tanstackMetadata(chunk)?.usage);
|
|
14
|
+
if (rebuilt !== void 0) chunk.usage = rebuilt;
|
|
15
|
+
}
|
|
16
|
+
if (chunk.type === EventType.TOOL_CALL_START && chunk.toolName === void 0 && chunk.toolCallName) chunk.toolName = chunk.toolCallName;
|
|
17
|
+
if (chunk.type === EventType.TOOL_CALL_END && chunk.input === void 0) {
|
|
18
|
+
const input = tanstackMetadata(chunk)?.input;
|
|
19
|
+
if (input !== void 0) chunk.input = input;
|
|
20
|
+
}
|
|
21
|
+
return chunk;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Rebuild the pre-wire chunk shape after SSE/HTTP/WS ingest.
|
|
25
|
+
* Copies `metadata.tanstack` extras back to top-level fields and rebuilds
|
|
26
|
+
* TanStack `TokenUsage` from spec `usage[]` when present.
|
|
27
|
+
*/
|
|
28
|
+
function restoreInboundChunk(chunk) {
|
|
29
|
+
restorePublicUsage(chunk);
|
|
30
|
+
const tanstack = tanstackMetadata(chunk);
|
|
31
|
+
const next = chunk;
|
|
32
|
+
if (tanstack == null) return next;
|
|
33
|
+
for (const [key, value] of Object.entries(tanstack)) {
|
|
34
|
+
if (key === "usage" || key === "interruptErrors") continue;
|
|
35
|
+
if (next[key] === void 0 && value !== void 0) next[key] = value;
|
|
36
|
+
}
|
|
37
|
+
if (tanstack.interruptErrors !== void 0) next["tanstack:interruptErrors"] = tanstack.interruptErrors;
|
|
38
|
+
return next;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { restoreInboundChunk, restorePublicUsage };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=restore-inbound-chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore-inbound-chunk.js","names":[],"sources":["../../../src/utilities/restore-inbound-chunk.ts"],"sourcesContent":["import { EventType } from '../types'\nimport type { StreamChunk } from '../types'\nimport type { AdapterYieldChunk } from './adapter-yield-chunk'\nimport { isTanstackUsage, rebuildTokenUsage } from './ag-ui-usage'\nimport { tanstackMetadata } from './merge-metadata'\n\n/**\n * Rebuild TanStack `TokenUsage` (`promptTokens`) from spec `usage[]` plus\n * leftover fields in `metadata.tanstack.usage`. Restore in-process aliases\n * that the wire does not keep (`toolName`, `TOOL_CALL_END.input`). Mutates\n * in place so WeakMap run-id stamps stay attached.\n */\nexport function restorePublicUsage(chunk: StreamChunk): StreamChunk {\n if (\n (chunk.type === EventType.RUN_FINISHED ||\n chunk.type === EventType.RUN_ERROR) &&\n (Array.isArray(chunk.usage) || isTanstackUsage(chunk.usage))\n ) {\n const rebuilt = rebuildTokenUsage(\n chunk.usage,\n tanstackMetadata(chunk)?.usage,\n )\n if (rebuilt !== undefined) {\n chunk.usage = rebuilt\n }\n }\n\n if (\n chunk.type === EventType.TOOL_CALL_START &&\n chunk.toolName === undefined &&\n chunk.toolCallName\n ) {\n chunk.toolName = chunk.toolCallName\n }\n\n if (chunk.type === EventType.TOOL_CALL_END && chunk.input === undefined) {\n const input = tanstackMetadata(chunk)?.input\n if (input !== undefined) {\n chunk.input = input\n }\n }\n\n return chunk\n}\n\n/**\n * Rebuild the pre-wire chunk shape after SSE/HTTP/WS ingest.\n * Copies `metadata.tanstack` extras back to top-level fields and rebuilds\n * TanStack `TokenUsage` from spec `usage[]` when present.\n */\nexport function restoreInboundChunk(chunk: StreamChunk): AdapterYieldChunk {\n restorePublicUsage(chunk)\n const tanstack = tanstackMetadata(chunk)\n const next = chunk as AdapterYieldChunk & Record<string, unknown>\n\n if (tanstack == null) {\n return next\n }\n\n for (const [key, value] of Object.entries(tanstack)) {\n if (key === 'usage' || key === 'interruptErrors') continue\n if (next[key] === undefined && value !== undefined) {\n next[key] = value\n }\n }\n\n if (tanstack.interruptErrors !== undefined) {\n next['tanstack:interruptErrors'] = tanstack.interruptErrors\n }\n\n return next\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,mBAAmB,OAAiC;CAClE,KACG,MAAM,SAAS,UAAU,gBACxB,MAAM,SAAS,UAAU,eAC1B,MAAM,QAAQ,MAAM,KAAK,KAAK,gBAAgB,MAAM,KAAK,IAC1D;EACA,MAAM,UAAU,kBACd,MAAM,OACN,iBAAiB,KAAK,CAAC,EAAE,KAC3B;EACA,IAAI,YAAY,KAAA,GACd,MAAM,QAAQ;CAElB;CAEA,IACE,MAAM,SAAS,UAAU,mBACzB,MAAM,aAAa,KAAA,KACnB,MAAM,cAEN,MAAM,WAAW,MAAM;CAGzB,IAAI,MAAM,SAAS,UAAU,iBAAiB,MAAM,UAAU,KAAA,GAAW;EACvE,MAAM,QAAQ,iBAAiB,KAAK,CAAC,EAAE;EACvC,IAAI,UAAU,KAAA,GACZ,MAAM,QAAQ;CAElB;CAEA,OAAO;AACT;;;;;;AAOA,SAAgB,oBAAoB,OAAuC;CACzE,mBAAmB,KAAK;CACxB,MAAM,WAAW,iBAAiB,KAAK;CACvC,MAAM,OAAO;CAEb,IAAI,YAAY,MACd,OAAO;CAGT,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;EACnD,IAAI,QAAQ,WAAW,QAAQ,mBAAmB;EAClD,IAAI,KAAK,SAAS,KAAA,KAAa,UAAU,KAAA,GACvC,KAAK,OAAO;CAEhB;CAEA,IAAI,SAAS,oBAAoB,KAAA,GAC/B,KAAK,8BAA8B,SAAS;CAG9C,OAAO;AACT"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { EventType } from "../types.js";
|
|
2
|
+
//#region src/utilities/spec-event-keys.ts
|
|
3
|
+
var SHARED = /* @__PURE__ */ new Set([
|
|
4
|
+
"type",
|
|
5
|
+
"timestamp",
|
|
6
|
+
"rawEvent",
|
|
7
|
+
"metadata"
|
|
8
|
+
]);
|
|
9
|
+
function keys(...fields) {
|
|
10
|
+
return /* @__PURE__ */ new Set([...SHARED, ...fields]);
|
|
11
|
+
}
|
|
12
|
+
var SPEC_KEYS = /* @__PURE__ */ new Map([
|
|
13
|
+
[EventType.TEXT_MESSAGE_START, keys("messageId", "role", "name")],
|
|
14
|
+
[EventType.TEXT_MESSAGE_CONTENT, keys("messageId", "delta")],
|
|
15
|
+
[EventType.TEXT_MESSAGE_END, keys("messageId")],
|
|
16
|
+
[EventType.TEXT_MESSAGE_CHUNK, keys("messageId", "role", "delta", "name")],
|
|
17
|
+
[EventType.TOOL_CALL_START, keys("toolCallId", "toolCallName", "parentMessageId")],
|
|
18
|
+
[EventType.TOOL_CALL_ARGS, keys("toolCallId", "delta")],
|
|
19
|
+
[EventType.TOOL_CALL_END, keys("toolCallId")],
|
|
20
|
+
[EventType.TOOL_CALL_CHUNK, keys("toolCallId", "toolCallName", "parentMessageId", "delta")],
|
|
21
|
+
[EventType.TOOL_CALL_RESULT, keys("messageId", "toolCallId", "content", "role")],
|
|
22
|
+
[EventType.THINKING_START, keys("title")],
|
|
23
|
+
[EventType.THINKING_END, SHARED],
|
|
24
|
+
[EventType.THINKING_TEXT_MESSAGE_START, SHARED],
|
|
25
|
+
[EventType.THINKING_TEXT_MESSAGE_CONTENT, keys("delta")],
|
|
26
|
+
[EventType.THINKING_TEXT_MESSAGE_END, SHARED],
|
|
27
|
+
[EventType.STATE_SNAPSHOT, keys("snapshot")],
|
|
28
|
+
[EventType.STATE_DELTA, keys("delta")],
|
|
29
|
+
[EventType.MESSAGES_SNAPSHOT, keys("messages")],
|
|
30
|
+
[EventType.ACTIVITY_SNAPSHOT, keys("messageId", "activityType", "content", "replace")],
|
|
31
|
+
[EventType.ACTIVITY_DELTA, keys("messageId", "activityType", "patch")],
|
|
32
|
+
[EventType.RAW, keys("event", "source")],
|
|
33
|
+
[EventType.CUSTOM, keys("name", "value")],
|
|
34
|
+
[EventType.RUN_STARTED, keys("threadId", "runId", "parentRunId", "input")],
|
|
35
|
+
[EventType.RUN_FINISHED, keys("threadId", "runId", "result", "outcome", "usage")],
|
|
36
|
+
[EventType.RUN_ERROR, keys("message", "code", "usage")],
|
|
37
|
+
[EventType.STEP_STARTED, keys("stepName")],
|
|
38
|
+
[EventType.STEP_FINISHED, keys("stepName")],
|
|
39
|
+
[EventType.REASONING_START, keys("messageId")],
|
|
40
|
+
[EventType.REASONING_MESSAGE_START, keys("messageId", "role")],
|
|
41
|
+
[EventType.REASONING_MESSAGE_CONTENT, keys("messageId", "delta")],
|
|
42
|
+
[EventType.REASONING_MESSAGE_END, keys("messageId")],
|
|
43
|
+
[EventType.REASONING_MESSAGE_CHUNK, keys("messageId", "delta")],
|
|
44
|
+
[EventType.REASONING_END, keys("messageId")],
|
|
45
|
+
[EventType.REASONING_ENCRYPTED_VALUE, keys("subtype", "entityId", "encryptedValue")]
|
|
46
|
+
]);
|
|
47
|
+
function specKeysFor(type) {
|
|
48
|
+
return SPEC_KEYS.get(type) ?? SHARED;
|
|
49
|
+
}
|
|
50
|
+
function isSpecTopLevelKey(type, key) {
|
|
51
|
+
return specKeysFor(type).has(key);
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { isSpecTopLevelKey, specKeysFor };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=spec-event-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-event-keys.js","names":[],"sources":["../../../src/utilities/spec-event-keys.ts"],"sourcesContent":["import { EventType } from '../types'\n\nconst SHARED: ReadonlySet<string> = new Set([\n 'type',\n 'timestamp',\n 'rawEvent',\n 'metadata',\n])\n\nfunction keys(...fields: Array<string>): ReadonlySet<string> {\n return new Set([...SHARED, ...fields])\n}\n\nconst SPEC_KEYS: ReadonlyMap<string, ReadonlySet<string>> = new Map([\n [EventType.TEXT_MESSAGE_START, keys('messageId', 'role', 'name')],\n [EventType.TEXT_MESSAGE_CONTENT, keys('messageId', 'delta')],\n [EventType.TEXT_MESSAGE_END, keys('messageId')],\n [EventType.TEXT_MESSAGE_CHUNK, keys('messageId', 'role', 'delta', 'name')],\n [\n EventType.TOOL_CALL_START,\n keys('toolCallId', 'toolCallName', 'parentMessageId'),\n ],\n [EventType.TOOL_CALL_ARGS, keys('toolCallId', 'delta')],\n [EventType.TOOL_CALL_END, keys('toolCallId')],\n [\n EventType.TOOL_CALL_CHUNK,\n keys('toolCallId', 'toolCallName', 'parentMessageId', 'delta'),\n ],\n [\n EventType.TOOL_CALL_RESULT,\n keys('messageId', 'toolCallId', 'content', 'role'),\n ],\n [EventType.THINKING_START, keys('title')],\n [EventType.THINKING_END, SHARED],\n [EventType.THINKING_TEXT_MESSAGE_START, SHARED],\n [EventType.THINKING_TEXT_MESSAGE_CONTENT, keys('delta')],\n [EventType.THINKING_TEXT_MESSAGE_END, SHARED],\n [EventType.STATE_SNAPSHOT, keys('snapshot')],\n [EventType.STATE_DELTA, keys('delta')],\n [EventType.MESSAGES_SNAPSHOT, keys('messages')],\n [\n EventType.ACTIVITY_SNAPSHOT,\n keys('messageId', 'activityType', 'content', 'replace'),\n ],\n [EventType.ACTIVITY_DELTA, keys('messageId', 'activityType', 'patch')],\n [EventType.RAW, keys('event', 'source')],\n [EventType.CUSTOM, keys('name', 'value')],\n [EventType.RUN_STARTED, keys('threadId', 'runId', 'parentRunId', 'input')],\n [\n EventType.RUN_FINISHED,\n keys('threadId', 'runId', 'result', 'outcome', 'usage'),\n ],\n [EventType.RUN_ERROR, keys('message', 'code', 'usage')],\n [EventType.STEP_STARTED, keys('stepName')],\n [EventType.STEP_FINISHED, keys('stepName')],\n [EventType.REASONING_START, keys('messageId')],\n [EventType.REASONING_MESSAGE_START, keys('messageId', 'role')],\n [EventType.REASONING_MESSAGE_CONTENT, keys('messageId', 'delta')],\n [EventType.REASONING_MESSAGE_END, keys('messageId')],\n [EventType.REASONING_MESSAGE_CHUNK, keys('messageId', 'delta')],\n [EventType.REASONING_END, keys('messageId')],\n [\n EventType.REASONING_ENCRYPTED_VALUE,\n keys('subtype', 'entityId', 'encryptedValue'),\n ],\n])\n\nexport function specKeysFor(type: string): ReadonlySet<string> {\n return SPEC_KEYS.get(type) ?? SHARED\n}\n\nexport function isSpecTopLevelKey(type: string, key: string): boolean {\n return specKeysFor(type).has(key)\n}\n"],"mappings":";;AAEA,IAAM,yBAA8B,IAAI,IAAI;CAC1C;CACA;CACA;CACA;AACF,CAAC;AAED,SAAS,KAAK,GAAG,QAA4C;CAC3D,uBAAO,IAAI,IAAI,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;AACvC;AAEA,IAAM,4BAAsD,IAAI,IAAI;CAClE,CAAC,UAAU,oBAAoB,KAAK,aAAa,QAAQ,MAAM,CAAC;CAChE,CAAC,UAAU,sBAAsB,KAAK,aAAa,OAAO,CAAC;CAC3D,CAAC,UAAU,kBAAkB,KAAK,WAAW,CAAC;CAC9C,CAAC,UAAU,oBAAoB,KAAK,aAAa,QAAQ,SAAS,MAAM,CAAC;CACzE,CACE,UAAU,iBACV,KAAK,cAAc,gBAAgB,iBAAiB,CACtD;CACA,CAAC,UAAU,gBAAgB,KAAK,cAAc,OAAO,CAAC;CACtD,CAAC,UAAU,eAAe,KAAK,YAAY,CAAC;CAC5C,CACE,UAAU,iBACV,KAAK,cAAc,gBAAgB,mBAAmB,OAAO,CAC/D;CACA,CACE,UAAU,kBACV,KAAK,aAAa,cAAc,WAAW,MAAM,CACnD;CACA,CAAC,UAAU,gBAAgB,KAAK,OAAO,CAAC;CACxC,CAAC,UAAU,cAAc,MAAM;CAC/B,CAAC,UAAU,6BAA6B,MAAM;CAC9C,CAAC,UAAU,+BAA+B,KAAK,OAAO,CAAC;CACvD,CAAC,UAAU,2BAA2B,MAAM;CAC5C,CAAC,UAAU,gBAAgB,KAAK,UAAU,CAAC;CAC3C,CAAC,UAAU,aAAa,KAAK,OAAO,CAAC;CACrC,CAAC,UAAU,mBAAmB,KAAK,UAAU,CAAC;CAC9C,CACE,UAAU,mBACV,KAAK,aAAa,gBAAgB,WAAW,SAAS,CACxD;CACA,CAAC,UAAU,gBAAgB,KAAK,aAAa,gBAAgB,OAAO,CAAC;CACrE,CAAC,UAAU,KAAK,KAAK,SAAS,QAAQ,CAAC;CACvC,CAAC,UAAU,QAAQ,KAAK,QAAQ,OAAO,CAAC;CACxC,CAAC,UAAU,aAAa,KAAK,YAAY,SAAS,eAAe,OAAO,CAAC;CACzE,CACE,UAAU,cACV,KAAK,YAAY,SAAS,UAAU,WAAW,OAAO,CACxD;CACA,CAAC,UAAU,WAAW,KAAK,WAAW,QAAQ,OAAO,CAAC;CACtD,CAAC,UAAU,cAAc,KAAK,UAAU,CAAC;CACzC,CAAC,UAAU,eAAe,KAAK,UAAU,CAAC;CAC1C,CAAC,UAAU,iBAAiB,KAAK,WAAW,CAAC;CAC7C,CAAC,UAAU,yBAAyB,KAAK,aAAa,MAAM,CAAC;CAC7D,CAAC,UAAU,2BAA2B,KAAK,aAAa,OAAO,CAAC;CAChE,CAAC,UAAU,uBAAuB,KAAK,WAAW,CAAC;CACnD,CAAC,UAAU,yBAAyB,KAAK,aAAa,OAAO,CAAC;CAC9D,CAAC,UAAU,eAAe,KAAK,WAAW,CAAC;CAC3C,CACE,UAAU,2BACV,KAAK,WAAW,YAAY,gBAAgB,CAC9C;AACF,CAAC;AAED,SAAgB,YAAY,MAAmC;CAC7D,OAAO,UAAU,IAAI,IAAI,KAAK;AAChC;AAEA,SAAgB,kBAAkB,MAAc,KAAsB;CACpE,OAAO,YAAY,IAAI,CAAC,CAAC,IAAI,GAAG;AAClC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AdapterYieldChunk } from './adapter-yield-chunk.js';
|
|
2
2
|
export declare function structuredOutputStartChunk(args: {
|
|
3
3
|
messageId: string;
|
|
4
4
|
model: string;
|
|
5
5
|
threadId: string;
|
|
6
6
|
runId: string;
|
|
7
7
|
timestamp?: number;
|
|
8
|
-
}):
|
|
8
|
+
}): AdapterYieldChunk;
|
|
9
9
|
export declare function structuredOutputCompleteChunk(args: {
|
|
10
10
|
messageId: string;
|
|
11
11
|
model: string;
|
|
@@ -14,4 +14,4 @@ export declare function structuredOutputCompleteChunk(args: {
|
|
|
14
14
|
object: unknown;
|
|
15
15
|
raw: string;
|
|
16
16
|
timestamp?: number;
|
|
17
|
-
}):
|
|
17
|
+
}): AdapterYieldChunk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-output-events.js","names":[],"sources":["../../../src/utilities/structured-output-events.ts"],"sourcesContent":["import { EventType } from '../types'\nimport type {
|
|
1
|
+
{"version":3,"file":"structured-output-events.js","names":[],"sources":["../../../src/utilities/structured-output-events.ts"],"sourcesContent":["import { EventType } from '../types'\nimport type { AdapterYieldChunk } from './adapter-yield-chunk'\n\nexport function structuredOutputStartChunk(args: {\n messageId: string\n model: string\n threadId: string\n runId: string\n timestamp?: number\n}): AdapterYieldChunk {\n return {\n type: EventType.CUSTOM,\n name: 'structured-output.start',\n value: { messageId: args.messageId },\n model: args.model,\n timestamp: args.timestamp ?? Date.now(),\n threadId: args.threadId,\n runId: args.runId,\n }\n}\n\nexport function structuredOutputCompleteChunk(args: {\n messageId: string\n model: string\n threadId: string\n runId: string\n object: unknown\n raw: string\n timestamp?: number\n}): AdapterYieldChunk {\n return {\n type: EventType.CUSTOM,\n name: 'structured-output.complete',\n value: {\n object: args.object,\n raw: args.raw,\n messageId: args.messageId,\n },\n model: args.model,\n timestamp: args.timestamp ?? Date.now(),\n threadId: args.threadId,\n runId: args.runId,\n }\n}\n"],"mappings":";;AAGA,SAAgB,2BAA2B,MAMrB;CACpB,OAAO;EACL,MAAM,UAAU;EAChB,MAAM;EACN,OAAO,EAAE,WAAW,KAAK,UAAU;EACnC,OAAO,KAAK;EACZ,WAAW,KAAK,aAAa,KAAK,IAAI;EACtC,UAAU,KAAK;EACf,OAAO,KAAK;CACd;AACF;AAEA,SAAgB,8BAA8B,MAQxB;CACpB,OAAO;EACL,MAAM,UAAU;EAChB,MAAM;EACN,OAAO;GACL,QAAQ,KAAK;GACb,KAAK,KAAK;GACV,WAAW,KAAK;EAClB;EACA,OAAO,KAAK;EACZ,WAAW,KAAK,aAAa,KAAK,IAAI;EACtC,UAAU,KAAK;EACf,OAAO,KAAK;CACd;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.0",
|
|
4
4
|
"description": "Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"@ag-ui/core": "0.1.1-canary.beta.0",
|
|
81
81
|
"@standard-schema/spec": "^1.1.0",
|
|
82
82
|
"partial-json": "^0.1.7",
|
|
83
|
-
"@tanstack/ai-event-client": "^0.
|
|
83
|
+
"@tanstack/ai-event-client": "^0.10.0",
|
|
84
84
|
"@tanstack/ai-utils": "^0.4.0"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
@@ -2,10 +2,10 @@ import type {
|
|
|
2
2
|
DefaultMessageMetadataByModality,
|
|
3
3
|
JSONSchema,
|
|
4
4
|
Modality,
|
|
5
|
-
StreamChunk,
|
|
6
5
|
TextOptions,
|
|
7
6
|
TokenUsage,
|
|
8
7
|
} from '../../types'
|
|
8
|
+
import type { AdapterYieldChunk } from '../../utilities/adapter-yield-chunk'
|
|
9
9
|
import type { CapabilityHandle } from './middleware/capabilities'
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -106,7 +106,7 @@ export interface TextAdapter<
|
|
|
106
106
|
*/
|
|
107
107
|
chatStream: (
|
|
108
108
|
options: TextOptions<TProviderOptions>,
|
|
109
|
-
) => AsyncIterable<
|
|
109
|
+
) => AsyncIterable<AdapterYieldChunk>
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
* Generate structured output using the provider's native structured output API.
|
|
@@ -136,7 +136,7 @@ export interface TextAdapter<
|
|
|
136
136
|
*/
|
|
137
137
|
structuredOutputStream?: (
|
|
138
138
|
options: StructuredOutputOptions<TProviderOptions>,
|
|
139
|
-
) => AsyncIterable<
|
|
139
|
+
) => AsyncIterable<AdapterYieldChunk>
|
|
140
140
|
|
|
141
141
|
/**
|
|
142
142
|
* Declares whether the adapter supports combining `tools` and a
|
|
@@ -229,7 +229,7 @@ export abstract class BaseTextAdapter<
|
|
|
229
229
|
|
|
230
230
|
abstract chatStream(
|
|
231
231
|
options: TextOptions<TProviderOptions>,
|
|
232
|
-
): AsyncIterable<
|
|
232
|
+
): AsyncIterable<AdapterYieldChunk>
|
|
233
233
|
|
|
234
234
|
/**
|
|
235
235
|
* Generate structured output using the provider's native structured output API.
|