@langchain/core 1.1.40-dev-1777128506086 → 1.1.40-dev-1777129500398
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/callbacks/base.d.cts.map +1 -1
- package/dist/callbacks/base.d.ts.map +1 -1
- package/dist/language_models/base.cjs +1 -1
- package/dist/language_models/base.js +1 -1
- package/dist/language_models/event.cjs.map +1 -1
- package/dist/language_models/event.d.cts +12 -4
- package/dist/language_models/event.d.cts.map +1 -1
- package/dist/language_models/event.d.ts +12 -4
- package/dist/language_models/event.d.ts.map +1 -1
- package/dist/language_models/event.js.map +1 -1
- package/dist/language_models/stream.cjs +29 -6
- package/dist/language_models/stream.cjs.map +1 -1
- package/dist/language_models/stream.d.cts.map +1 -1
- package/dist/language_models/stream.d.ts.map +1 -1
- package/dist/language_models/stream.js +29 -6
- package/dist/language_models/stream.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.cts","names":[],"sources":["../../src/callbacks/base.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base.d.cts","names":[],"sources":["../../src/callbacks/base.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","names":[],"sources":["../../src/callbacks/base.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base.d.ts","names":[],"sources":["../../src/callbacks/base.ts"],"mappings":"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"}
|
|
@@ -139,7 +139,7 @@ var BaseLangChain = class extends require_base.Runnable {
|
|
|
139
139
|
this.callbacks = params.callbacks;
|
|
140
140
|
this.tags = params.tags ?? [];
|
|
141
141
|
this.metadata = params.metadata ?? {};
|
|
142
|
-
this._addVersion("@langchain/core", "1.1.40-dev-
|
|
142
|
+
this._addVersion("@langchain/core", "1.1.40-dev-1777129500398");
|
|
143
143
|
}
|
|
144
144
|
_addVersion(pkg, version) {
|
|
145
145
|
const existing = this.metadata?.versions;
|
|
@@ -138,7 +138,7 @@ var BaseLangChain = class extends Runnable {
|
|
|
138
138
|
this.callbacks = params.callbacks;
|
|
139
139
|
this.tags = params.tags ?? [];
|
|
140
140
|
this.metadata = params.metadata ?? {};
|
|
141
|
-
this._addVersion("@langchain/core", "1.1.40-dev-
|
|
141
|
+
this._addVersion("@langchain/core", "1.1.40-dev-1777129500398");
|
|
142
142
|
}
|
|
143
143
|
_addVersion(pkg, version) {
|
|
144
144
|
const existing = this.metadata?.versions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.cjs","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types on lifecycle boundaries\n * and as incremental content updates during streaming.\n *\n * ## Design Principles\n *\n * 1. **Content-block deltas use the content block shape.** Text, reasoning,\n * and tool-call chunks are emitted as partial {@link ContentBlock} values\n * with explicit append semantics.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 4. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, content=...)\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \"Hello\" })\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \" world\" })\n * -> ContentBlockFinish(index=0, content=...)\n * -> UsageUpdate(...)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n// ─── Message Lifecycle ──────────────────────────────────────────\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n event: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?:
|
|
1
|
+
{"version":3,"file":"event.cjs","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types on lifecycle boundaries\n * and as incremental content updates during streaming.\n *\n * ## Design Principles\n *\n * 1. **Content-block deltas use the content block shape.** Text, reasoning,\n * and tool-call chunks are emitted as partial {@link ContentBlock} values\n * with explicit append semantics.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 4. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, content=...)\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \"Hello\" })\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \" world\" })\n * -> ContentBlockFinish(index=0, content=...)\n * -> UsageUpdate(...)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n/**\n * Usage shape accepted by chat model stream events.\n *\n * This is intentionally wider than {@link UsageMetadata}: protocol sources\n * may report partial token snapshots, while {@link ChatModelStream} normalizes\n * them before exposing `.usage` or the final `AIMessage.usage_metadata`.\n */\nexport type UsageMetadataLike = Partial<UsageMetadata>;\n\n// ─── Message Lifecycle ──────────────────────────────────────────\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n event: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?: UsageMetadataLike;\n}\n\n/**\n * Finish reason for a model response.\n *\n * - `\"stop\"`: Natural end of generation.\n * - `\"length\"`: Hit max token limit.\n * - `\"tool_use\"`: Model is requesting tool execution.\n * - `\"content_filter\"`: Content was filtered by safety systems.\n */\nexport type FinishReason = \"stop\" | \"length\" | \"tool_use\" | \"content_filter\";\n\n/**\n * Emitted once when the model response is complete.\n */\nexport interface MessageFinishEvent {\n event: \"message-finish\";\n /** Why the model stopped generating. */\n reason?: FinishReason;\n /** Final usage snapshot. */\n usage?: UsageMetadataLike;\n /** Provider-specific response metadata (model name, response ID, headers, etc.). */\n metadata?: Record<string, unknown>;\n}\n\n// ─── Content Block Lifecycle ────────────────────────────────────\n\n/**\n * Emitted when a new content block begins streaming.\n *\n * @example\n * ```ts\n * { event: \"content-block-start\", index: 0,\n * content: { type: \"text\", text: \"\" } }\n * ```\n */\nexport interface ContentBlockStartEvent {\n event: \"content-block-start\";\n /** Positional index of this block within the message. */\n index: number;\n /** Initial state of the content block. */\n content: ContentBlock;\n}\n\n/**\n * Emitted for each incremental update within a content block.\n *\n * The `content` field carries the incremental content block update.\n * Accumulation rules:\n * - `text` → append `text` to the block's text field\n * - `reasoning` → append `reasoning` to the block's reasoning field\n * - `tool_call_chunk` / `server_tool_call_chunk` → append `args`,\n * preserving stable `id`/`name` when later chunks omit them\n * - all other fields are shallow-merged\n *\n * @example\n * ```ts\n * // Text token\n * { event: \"content-block-delta\", index: 0,\n * content: { type: \"text\", text: \" world\" } }\n *\n * // Tool call args chunk\n * { event: \"content-block-delta\", index: 1,\n * content: { type: \"tool_call_chunk\", args: '{\"q\":\"wea' } }\n *\n * // Provider-specific field (e.g., signature)\n * { event: \"content-block-delta\", index: 0,\n * content: { type: \"reasoning\", signature: \"sig_abc\" } }\n * ```\n */\nexport interface ContentBlockDeltaEvent {\n event: \"content-block-delta\";\n /** Positional index of the block being updated. */\n index: number;\n /** Incremental content block update. */\n content: ContentBlock;\n}\n\n/**\n * Emitted when a content block is complete.\n *\n * @example\n * ```ts\n * { event: \"content-block-finish\", index: 0,\n * content: { type: \"text\", text: \"Hello world\" } }\n * ```\n */\nexport interface ContentBlockFinishEvent {\n event: \"content-block-finish\";\n /** Positional index of the completed block. */\n index: number;\n /** Finalized content block. */\n content: ContentBlock;\n}\n\n// ─── Usage ──────────────────────────────────────────────────────\n\n/**\n * Emitted whenever the provider reports updated usage information.\n * Each event carries a **running snapshot** (not an additive delta).\n */\nexport interface UsageUpdateEvent {\n event: \"usage\";\n /** Current usage snapshot. */\n usage: UsageMetadataLike;\n}\n\n// ─── Provider Passthrough ───────────────────────────────────────\n\n/**\n * Passthrough for native provider events that don't map to standard types.\n */\nexport interface ProviderEvent {\n event: \"provider\";\n /** Provider identifier (e.g., `\"openai\"`, `\"anthropic\"`, `\"google\"`). */\n provider: string;\n /** Raw event type name from the provider SDK. */\n name: string;\n /** Raw event payload from the provider SDK. */\n payload: unknown;\n}\n\n// ─── Error ──────────────────────────────────────────────────────\n\n/**\n * Emitted on unrecoverable stream errors.\n */\nexport interface StreamErrorEvent {\n event: \"error\";\n /** Human-readable error message. */\n message: string;\n /** Optional error code for programmatic handling. */\n code?: string;\n}\n\n// ─── Union ──────────────────────────────────────────────────────\n\n/**\n * Union of all chat model stream event types.\n */\nexport type ChatModelStreamEvent =\n | MessageStartEvent\n | MessageFinishEvent\n | ContentBlockStartEvent\n | ContentBlockDeltaEvent\n | ContentBlockFinishEvent\n | UsageUpdateEvent\n | ProviderEvent\n | StreamErrorEvent;\n"],"mappings":""}
|
|
@@ -2,6 +2,14 @@ import { ContentBlock } from "../messages/content/index.cjs";
|
|
|
2
2
|
import { UsageMetadata } from "../messages/metadata.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/language_models/event.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Usage shape accepted by chat model stream events.
|
|
7
|
+
*
|
|
8
|
+
* This is intentionally wider than {@link UsageMetadata}: protocol sources
|
|
9
|
+
* may report partial token snapshots, while {@link ChatModelStream} normalizes
|
|
10
|
+
* them before exposing `.usage` or the final `AIMessage.usage_metadata`.
|
|
11
|
+
*/
|
|
12
|
+
type UsageMetadataLike = Partial<UsageMetadata>;
|
|
5
13
|
/**
|
|
6
14
|
* Emitted once at the start of a model response.
|
|
7
15
|
*/
|
|
@@ -13,7 +21,7 @@ interface MessageStartEvent {
|
|
|
13
21
|
* Initial usage snapshot, if the provider reports input token counts
|
|
14
22
|
* before content begins streaming (e.g., Anthropic's `message_start`).
|
|
15
23
|
*/
|
|
16
|
-
usage?:
|
|
24
|
+
usage?: UsageMetadataLike;
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
27
|
* Finish reason for a model response.
|
|
@@ -32,7 +40,7 @@ interface MessageFinishEvent {
|
|
|
32
40
|
/** Why the model stopped generating. */
|
|
33
41
|
reason?: FinishReason;
|
|
34
42
|
/** Final usage snapshot. */
|
|
35
|
-
usage?:
|
|
43
|
+
usage?: UsageMetadataLike;
|
|
36
44
|
/** Provider-specific response metadata (model name, response ID, headers, etc.). */
|
|
37
45
|
metadata?: Record<string, unknown>;
|
|
38
46
|
}
|
|
@@ -108,7 +116,7 @@ interface ContentBlockFinishEvent {
|
|
|
108
116
|
interface UsageUpdateEvent {
|
|
109
117
|
event: "usage";
|
|
110
118
|
/** Current usage snapshot. */
|
|
111
|
-
usage:
|
|
119
|
+
usage: UsageMetadataLike;
|
|
112
120
|
}
|
|
113
121
|
/**
|
|
114
122
|
* Passthrough for native provider events that don't map to standard types.
|
|
@@ -137,5 +145,5 @@ interface StreamErrorEvent {
|
|
|
137
145
|
*/
|
|
138
146
|
type ChatModelStreamEvent = MessageStartEvent | MessageFinishEvent | ContentBlockStartEvent | ContentBlockDeltaEvent | ContentBlockFinishEvent | UsageUpdateEvent | ProviderEvent | StreamErrorEvent;
|
|
139
147
|
//#endregion
|
|
140
|
-
export { ChatModelStreamEvent, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, StreamErrorEvent, UsageUpdateEvent };
|
|
148
|
+
export { ChatModelStreamEvent, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, StreamErrorEvent, UsageMetadataLike, UsageUpdateEvent };
|
|
141
149
|
//# sourceMappingURL=event.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.cts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"event.d.cts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":";;;;;;AAoGA;;;;;KApDY,iBAAA,GAAoB,OAAA,CAAQ,aAAA;;;;UAOvB,iBAAA;EACf,KAAA;EA8EqC;EA5ErC,EAAA;EAiFqB;;;;EA5ErB,KAAA,GAAQ,iBAAA;AAAA;;AAwFV;;;;;;;KA7EY,YAAA;;;AA2FZ;UAtFiB,kBAAA;EACf,KAAA;EAwFwB;EAtFxB,MAAA,GAAS,YAAA;EAsFT;EApFA,KAAA,GAAQ,iBAAA;EAoFgB;EAlFxB,QAAA,GAAW,MAAA;AAAA;;;;;;;;;;UAcI,sBAAA;EACf,KAAA;;EAEA,KAAA;EAyFA;EAvFA,OAAA,EAAS,YAAA;AAAA;;;AAmGX;;;;;;;;;;;;;;;;;;;;;;;;UAtEiB,sBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;;;;;;UAYM,uBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;UASM,gBAAA;EACf,KAAA;;EAEA,KAAA,EAAO,iBAAA;AAAA;;;;UAQQ,aAAA;EACf,KAAA;;EAEA,QAAA;;EAEA,IAAA;;EAEA,OAAA;AAAA;;;;UAQe,gBAAA;EACf,KAAA;;EAEA,OAAA;;EAEA,IAAA;AAAA;;;;KAQU,oBAAA,GACR,iBAAA,GACA,kBAAA,GACA,sBAAA,GACA,sBAAA,GACA,uBAAA,GACA,gBAAA,GACA,aAAA,GACA,gBAAA"}
|
|
@@ -2,6 +2,14 @@ import { ContentBlock } from "../messages/content/index.js";
|
|
|
2
2
|
import { UsageMetadata } from "../messages/metadata.js";
|
|
3
3
|
|
|
4
4
|
//#region src/language_models/event.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Usage shape accepted by chat model stream events.
|
|
7
|
+
*
|
|
8
|
+
* This is intentionally wider than {@link UsageMetadata}: protocol sources
|
|
9
|
+
* may report partial token snapshots, while {@link ChatModelStream} normalizes
|
|
10
|
+
* them before exposing `.usage` or the final `AIMessage.usage_metadata`.
|
|
11
|
+
*/
|
|
12
|
+
type UsageMetadataLike = Partial<UsageMetadata>;
|
|
5
13
|
/**
|
|
6
14
|
* Emitted once at the start of a model response.
|
|
7
15
|
*/
|
|
@@ -13,7 +21,7 @@ interface MessageStartEvent {
|
|
|
13
21
|
* Initial usage snapshot, if the provider reports input token counts
|
|
14
22
|
* before content begins streaming (e.g., Anthropic's `message_start`).
|
|
15
23
|
*/
|
|
16
|
-
usage?:
|
|
24
|
+
usage?: UsageMetadataLike;
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
27
|
* Finish reason for a model response.
|
|
@@ -32,7 +40,7 @@ interface MessageFinishEvent {
|
|
|
32
40
|
/** Why the model stopped generating. */
|
|
33
41
|
reason?: FinishReason;
|
|
34
42
|
/** Final usage snapshot. */
|
|
35
|
-
usage?:
|
|
43
|
+
usage?: UsageMetadataLike;
|
|
36
44
|
/** Provider-specific response metadata (model name, response ID, headers, etc.). */
|
|
37
45
|
metadata?: Record<string, unknown>;
|
|
38
46
|
}
|
|
@@ -108,7 +116,7 @@ interface ContentBlockFinishEvent {
|
|
|
108
116
|
interface UsageUpdateEvent {
|
|
109
117
|
event: "usage";
|
|
110
118
|
/** Current usage snapshot. */
|
|
111
|
-
usage:
|
|
119
|
+
usage: UsageMetadataLike;
|
|
112
120
|
}
|
|
113
121
|
/**
|
|
114
122
|
* Passthrough for native provider events that don't map to standard types.
|
|
@@ -137,5 +145,5 @@ interface StreamErrorEvent {
|
|
|
137
145
|
*/
|
|
138
146
|
type ChatModelStreamEvent = MessageStartEvent | MessageFinishEvent | ContentBlockStartEvent | ContentBlockDeltaEvent | ContentBlockFinishEvent | UsageUpdateEvent | ProviderEvent | StreamErrorEvent;
|
|
139
147
|
//#endregion
|
|
140
|
-
export { ChatModelStreamEvent, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, StreamErrorEvent, UsageUpdateEvent };
|
|
148
|
+
export { ChatModelStreamEvent, ContentBlockDeltaEvent, ContentBlockFinishEvent, ContentBlockStartEvent, FinishReason, MessageFinishEvent, MessageStartEvent, ProviderEvent, StreamErrorEvent, UsageMetadataLike, UsageUpdateEvent };
|
|
141
149
|
//# sourceMappingURL=event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"event.d.ts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":";;;;;;AAoGA;;;;;KApDY,iBAAA,GAAoB,OAAA,CAAQ,aAAA;;;;UAOvB,iBAAA;EACf,KAAA;EA8EqC;EA5ErC,EAAA;EAiFqB;;;;EA5ErB,KAAA,GAAQ,iBAAA;AAAA;;AAwFV;;;;;;;KA7EY,YAAA;;;AA2FZ;UAtFiB,kBAAA;EACf,KAAA;EAwFwB;EAtFxB,MAAA,GAAS,YAAA;EAsFT;EApFA,KAAA,GAAQ,iBAAA;EAoFgB;EAlFxB,QAAA,GAAW,MAAA;AAAA;;;;;;;;;;UAcI,sBAAA;EACf,KAAA;;EAEA,KAAA;EAyFA;EAvFA,OAAA,EAAS,YAAA;AAAA;;;AAmGX;;;;;;;;;;;;;;;;;;;;;;;;UAtEiB,sBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;;;;;;UAYM,uBAAA;EACf,KAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;UASM,gBAAA;EACf,KAAA;;EAEA,KAAA,EAAO,iBAAA;AAAA;;;;UAQQ,aAAA;EACf,KAAA;;EAEA,QAAA;;EAEA,IAAA;;EAEA,OAAA;AAAA;;;;UAQe,gBAAA;EACf,KAAA;;EAEA,OAAA;;EAEA,IAAA;AAAA;;;;KAQU,oBAAA,GACR,iBAAA,GACA,kBAAA,GACA,sBAAA,GACA,sBAAA,GACA,uBAAA,GACA,gBAAA,GACA,aAAA,GACA,gBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types on lifecycle boundaries\n * and as incremental content updates during streaming.\n *\n * ## Design Principles\n *\n * 1. **Content-block deltas use the content block shape.** Text, reasoning,\n * and tool-call chunks are emitted as partial {@link ContentBlock} values\n * with explicit append semantics.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 4. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, content=...)\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \"Hello\" })\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \" world\" })\n * -> ContentBlockFinish(index=0, content=...)\n * -> UsageUpdate(...)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n// ─── Message Lifecycle ──────────────────────────────────────────\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n event: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?:
|
|
1
|
+
{"version":3,"file":"event.js","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types on lifecycle boundaries\n * and as incremental content updates during streaming.\n *\n * ## Design Principles\n *\n * 1. **Content-block deltas use the content block shape.** Text, reasoning,\n * and tool-call chunks are emitted as partial {@link ContentBlock} values\n * with explicit append semantics.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 4. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, content=...)\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \"Hello\" })\n * -> ContentBlockDelta(index=0, content={ type: \"text\", text: \" world\" })\n * -> ContentBlockFinish(index=0, content=...)\n * -> UsageUpdate(...)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n/**\n * Usage shape accepted by chat model stream events.\n *\n * This is intentionally wider than {@link UsageMetadata}: protocol sources\n * may report partial token snapshots, while {@link ChatModelStream} normalizes\n * them before exposing `.usage` or the final `AIMessage.usage_metadata`.\n */\nexport type UsageMetadataLike = Partial<UsageMetadata>;\n\n// ─── Message Lifecycle ──────────────────────────────────────────\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n event: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?: UsageMetadataLike;\n}\n\n/**\n * Finish reason for a model response.\n *\n * - `\"stop\"`: Natural end of generation.\n * - `\"length\"`: Hit max token limit.\n * - `\"tool_use\"`: Model is requesting tool execution.\n * - `\"content_filter\"`: Content was filtered by safety systems.\n */\nexport type FinishReason = \"stop\" | \"length\" | \"tool_use\" | \"content_filter\";\n\n/**\n * Emitted once when the model response is complete.\n */\nexport interface MessageFinishEvent {\n event: \"message-finish\";\n /** Why the model stopped generating. */\n reason?: FinishReason;\n /** Final usage snapshot. */\n usage?: UsageMetadataLike;\n /** Provider-specific response metadata (model name, response ID, headers, etc.). */\n metadata?: Record<string, unknown>;\n}\n\n// ─── Content Block Lifecycle ────────────────────────────────────\n\n/**\n * Emitted when a new content block begins streaming.\n *\n * @example\n * ```ts\n * { event: \"content-block-start\", index: 0,\n * content: { type: \"text\", text: \"\" } }\n * ```\n */\nexport interface ContentBlockStartEvent {\n event: \"content-block-start\";\n /** Positional index of this block within the message. */\n index: number;\n /** Initial state of the content block. */\n content: ContentBlock;\n}\n\n/**\n * Emitted for each incremental update within a content block.\n *\n * The `content` field carries the incremental content block update.\n * Accumulation rules:\n * - `text` → append `text` to the block's text field\n * - `reasoning` → append `reasoning` to the block's reasoning field\n * - `tool_call_chunk` / `server_tool_call_chunk` → append `args`,\n * preserving stable `id`/`name` when later chunks omit them\n * - all other fields are shallow-merged\n *\n * @example\n * ```ts\n * // Text token\n * { event: \"content-block-delta\", index: 0,\n * content: { type: \"text\", text: \" world\" } }\n *\n * // Tool call args chunk\n * { event: \"content-block-delta\", index: 1,\n * content: { type: \"tool_call_chunk\", args: '{\"q\":\"wea' } }\n *\n * // Provider-specific field (e.g., signature)\n * { event: \"content-block-delta\", index: 0,\n * content: { type: \"reasoning\", signature: \"sig_abc\" } }\n * ```\n */\nexport interface ContentBlockDeltaEvent {\n event: \"content-block-delta\";\n /** Positional index of the block being updated. */\n index: number;\n /** Incremental content block update. */\n content: ContentBlock;\n}\n\n/**\n * Emitted when a content block is complete.\n *\n * @example\n * ```ts\n * { event: \"content-block-finish\", index: 0,\n * content: { type: \"text\", text: \"Hello world\" } }\n * ```\n */\nexport interface ContentBlockFinishEvent {\n event: \"content-block-finish\";\n /** Positional index of the completed block. */\n index: number;\n /** Finalized content block. */\n content: ContentBlock;\n}\n\n// ─── Usage ──────────────────────────────────────────────────────\n\n/**\n * Emitted whenever the provider reports updated usage information.\n * Each event carries a **running snapshot** (not an additive delta).\n */\nexport interface UsageUpdateEvent {\n event: \"usage\";\n /** Current usage snapshot. */\n usage: UsageMetadataLike;\n}\n\n// ─── Provider Passthrough ───────────────────────────────────────\n\n/**\n * Passthrough for native provider events that don't map to standard types.\n */\nexport interface ProviderEvent {\n event: \"provider\";\n /** Provider identifier (e.g., `\"openai\"`, `\"anthropic\"`, `\"google\"`). */\n provider: string;\n /** Raw event type name from the provider SDK. */\n name: string;\n /** Raw event payload from the provider SDK. */\n payload: unknown;\n}\n\n// ─── Error ──────────────────────────────────────────────────────\n\n/**\n * Emitted on unrecoverable stream errors.\n */\nexport interface StreamErrorEvent {\n event: \"error\";\n /** Human-readable error message. */\n message: string;\n /** Optional error code for programmatic handling. */\n code?: string;\n}\n\n// ─── Union ──────────────────────────────────────────────────────\n\n/**\n * Union of all chat model stream event types.\n */\nexport type ChatModelStreamEvent =\n | MessageStartEvent\n | MessageFinishEvent\n | ContentBlockStartEvent\n | ContentBlockDeltaEvent\n | ContentBlockFinishEvent\n | UsageUpdateEvent\n | ProviderEvent\n | StreamErrorEvent;\n"],"mappings":""}
|
|
@@ -130,6 +130,22 @@ function isReasoningContent(content) {
|
|
|
130
130
|
return type === "reasoning" || type === "thinking";
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
|
+
* Normalize protocol-compatible partial usage into Core's concrete usage shape.
|
|
134
|
+
*
|
|
135
|
+
* Some stream sources emit usage snapshots without every aggregate token field.
|
|
136
|
+
* Keep the stream event input permissive, then normalize at read time so
|
|
137
|
+
* high-level Core consumers always receive a complete {@link UsageMetadata}.
|
|
138
|
+
*/
|
|
139
|
+
function normalizeUsage(usage) {
|
|
140
|
+
if (!usage) return void 0;
|
|
141
|
+
return {
|
|
142
|
+
...usage,
|
|
143
|
+
input_tokens: usage.input_tokens ?? 0,
|
|
144
|
+
output_tokens: usage.output_tokens ?? 0,
|
|
145
|
+
total_tokens: usage.total_tokens ?? 0
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
133
149
|
* Typed stream for text content.
|
|
134
150
|
*
|
|
135
151
|
* - **Iterate**: yields incremental text deltas.
|
|
@@ -289,9 +305,16 @@ var UsageMetadataStream = class {
|
|
|
289
305
|
[Symbol.asyncIterator]() {
|
|
290
306
|
const buffer = this._buffer;
|
|
291
307
|
async function* gen() {
|
|
292
|
-
for await (const event of buffer.iterate()) if (event.event === "usage")
|
|
293
|
-
|
|
294
|
-
|
|
308
|
+
for await (const event of buffer.iterate()) if (event.event === "usage") {
|
|
309
|
+
const usage = normalizeUsage(event.usage);
|
|
310
|
+
if (usage) yield usage;
|
|
311
|
+
} else if (event.event === "message-start" && event.usage) {
|
|
312
|
+
const usage = normalizeUsage(event.usage);
|
|
313
|
+
if (usage) yield usage;
|
|
314
|
+
} else if (event.event === "message-finish" && event.usage) {
|
|
315
|
+
const usage = normalizeUsage(event.usage);
|
|
316
|
+
if (usage) yield usage;
|
|
317
|
+
}
|
|
295
318
|
}
|
|
296
319
|
return gen();
|
|
297
320
|
}
|
|
@@ -357,7 +380,7 @@ var ChatModelStream = class {
|
|
|
357
380
|
for await (const event of this._buffer.iterate()) switch (event.event) {
|
|
358
381
|
case "message-start":
|
|
359
382
|
id = event.id ?? id;
|
|
360
|
-
if (event.usage) usage = event.usage;
|
|
383
|
+
if (event.usage) usage = normalizeUsage(event.usage);
|
|
361
384
|
break;
|
|
362
385
|
case "content-block-start":
|
|
363
386
|
contentBlocks[event.index] = event.content;
|
|
@@ -371,11 +394,11 @@ var ChatModelStream = class {
|
|
|
371
394
|
contentBlocks[event.index] = event.content;
|
|
372
395
|
break;
|
|
373
396
|
case "usage":
|
|
374
|
-
usage = event.usage;
|
|
397
|
+
usage = normalizeUsage(event.usage);
|
|
375
398
|
break;
|
|
376
399
|
case "message-finish":
|
|
377
400
|
finishReason = event.reason;
|
|
378
|
-
if (event.usage) usage = event.usage;
|
|
401
|
+
if (event.usage) usage = normalizeUsage(event.usage);
|
|
379
402
|
if (event.metadata) metadata = {
|
|
380
403
|
...metadata,
|
|
381
404
|
...event.metadata
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.cjs","names":["AIMessage"],"sources":["../../src/language_models/stream.ts"],"sourcesContent":["/**\n * Typed stream classes for chat model streaming.\n *\n * @module\n */\n\nimport { AIMessage } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\nimport type { ChatModelStreamEvent } from \"./event.js\";\n\n// ─── Replay Buffer ──────────────────────────────────────────────\n\n/**\n * A buffer that caches emitted events for replay.\n *\n * Multiple consumers can independently iterate the same buffer —\n * each gets its own cursor. Events are never consumed or removed.\n *\n * @internal\n */\nclass ReplayBuffer {\n private events: ChatModelStreamEvent[] = [];\n private finished = false;\n private waiters: Array<() => void> = [];\n private error: Error | null = null;\n\n push(event: ChatModelStreamEvent): void {\n this.events.push(event);\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n finish(): void {\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n setError(err: Error): void {\n this.error = err;\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n async *iterate(): AsyncGenerator<ChatModelStreamEvent> {\n if (this.finished) {\n if (this.error) throw this.error;\n yield* this.events;\n return;\n }\n\n let cursor = 0;\n while (true) {\n while (cursor < this.events.length) {\n yield this.events[cursor]!;\n cursor++;\n }\n if (this.finished) {\n if (this.error) throw this.error;\n return;\n }\n await new Promise<void>((resolve) => {\n if (cursor < this.events.length || this.finished) {\n resolve();\n return;\n }\n this.waiters.push(resolve);\n });\n }\n }\n}\n\n// ─── Accumulator ────────────────────────────────────────────────\n\n/**\n * Apply a typed delta to an accumulated content block.\n *\n * - `text` → append text\n * - `reasoning` / provider `thinking` → append reasoning text\n * - `tool_call_chunk` / `server_tool_call_chunk` → append args while\n * preserving id/name from previous chunks when a later delta omits them\n * - other block types → shallow merge\n *\n * @internal\n */\nfunction applyDelta(block: ContentBlock, delta: ContentBlock): ContentBlock {\n if (block.type !== delta.type) {\n return { ...delta };\n }\n\n if (\n (delta as { type?: string }).type === \"thinking\" &&\n (block as { type?: string }).type === \"thinking\"\n ) {\n const thinking =\n ((block as { thinking?: string }).thinking ?? \"\") +\n ((delta as { thinking?: string }).thinking ?? \"\");\n return { ...block, ...delta, thinking } as unknown as ContentBlock;\n }\n\n switch (delta.type) {\n case \"text\":\n return {\n ...block,\n ...delta,\n text: ((block as { text?: string }).text ?? \"\") + delta.text,\n };\n case \"reasoning\":\n return {\n ...block,\n ...delta,\n reasoning:\n ((block as { reasoning?: string }).reasoning ?? \"\") + delta.reasoning,\n };\n case \"tool_call_chunk\":\n case \"server_tool_call_chunk\": {\n const merged = { ...block, ...delta } as Record<string, unknown>;\n if (delta.id == null && \"id\" in block && block.id != null) {\n merged.id = block.id;\n }\n if (delta.name == null && \"name\" in block && block.name != null) {\n merged.name = block.name;\n }\n merged.args = `${(\"args\" in block ? block.args : \"\") ?? \"\"}${delta.args ?? \"\"}`;\n return merged as unknown as ContentBlock;\n }\n default:\n return { ...block, ...delta };\n }\n}\n\nfunction getReasoningDelta(content: unknown): string | undefined {\n if (content == null || typeof content !== \"object\") return undefined;\n const block = content as {\n type?: string;\n reasoning?: unknown;\n thinking?: unknown;\n };\n if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n return block.reasoning;\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return block.thinking;\n }\n return undefined;\n}\n\nfunction isReasoningContent(content: unknown): boolean {\n if (content == null || typeof content !== \"object\") return false;\n const type = (content as { type?: unknown }).type;\n return type === \"reasoning\" || type === \"thinking\";\n}\n\n// ─── Sub-Stream: Text ───────────────────────────────────────────\n\n/**\n * Typed stream for text content.\n *\n * - **Iterate**: yields incremental text deltas.\n * - **Await**: resolves to the complete concatenated text.\n * - **`.full`**: yields the running accumulated text after each delta.\n */\nexport class TextContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n /** Yields the accumulated text so far after each delta. */\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n accumulated += event.content.text;\n yield accumulated;\n }\n }\n },\n };\n }\n\n /** Yields incremental text deltas. */\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n yield event.content.text;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Tool Calls ─────────────────────────────────────\n\n/**\n * Typed stream for tool calls.\n *\n * - **Iterate**: yields individual `ToolCall` objects as each completes.\n * - **Await**: resolves to the full array.\n * - **`.full`**: yields the accumulated array after each new tool call.\n */\nexport class ToolCallsStream\n implements\n AsyncIterable<ContentBlock.Tools.ToolCall>,\n PromiseLike<Array<ContentBlock.Tools.ToolCall>>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n calls.push(event.content as ContentBlock.Tools.ToolCall);\n yield [...calls];\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n yield event.content as ContentBlock.Tools.ToolCall;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(\n onfulfilled?:\n | ((\n value: Array<ContentBlock.Tools.ToolCall>\n ) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const call of this) {\n calls.push(call);\n }\n return calls;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Reasoning ──────────────────────────────────────\n\n/**\n * Typed stream for reasoning content (chain-of-thought).\n * Same interface as {@link TextContentStream} but for reasoning blocks.\n */\nexport class ReasoningContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Usage ──────────────────────────────────────────\n\n/**\n * Typed stream for usage metadata.\n */\nexport class UsageMetadataStream\n implements\n AsyncIterable<UsageMetadata>,\n PromiseLike<UsageMetadata | undefined>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<UsageMetadata> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (event.event === \"usage\") {\n yield event.usage;\n } else if (event.event === \"message-start\" && event.usage) {\n yield event.usage;\n } else if (event.event === \"message-finish\" && event.usage) {\n yield event.usage;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = UsageMetadata | undefined, TResult2 = never>(\n onfulfilled?:\n | ((value: UsageMetadata | undefined) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let latest: UsageMetadata | undefined;\n for await (const usage of this) {\n latest = usage;\n }\n return latest;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── ChatModelStream ────────────────────────────────────────────\n\n/**\n * The main stream object returned by chat model streaming.\n *\n * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access\n * and `PromiseLike<AIMessage>` for simple `await` usage.\n */\nexport class ChatModelStream\n implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(source: AsyncIterable<ChatModelStreamEvent>) {\n this._buffer = new ReplayBuffer();\n this._consume(source);\n }\n\n /** @internal */\n private async _consume(\n source: AsyncIterable<ChatModelStreamEvent>\n ): Promise<void> {\n try {\n for await (const event of source) {\n this._buffer.push(event);\n }\n this._buffer.finish();\n } catch (err) {\n this._buffer.setError(\n err instanceof Error ? err : new Error(String(err))\n );\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent> {\n return this._buffer.iterate();\n }\n\n get text(): TextContentStream {\n return new TextContentStream(this._buffer);\n }\n\n get toolCalls(): ToolCallsStream {\n return new ToolCallsStream(this._buffer);\n }\n\n get reasoning(): ReasoningContentStream {\n return new ReasoningContentStream(this._buffer);\n }\n\n get usage(): UsageMetadataStream {\n return new UsageMetadataStream(this._buffer);\n }\n\n get output(): PromiseLike<AIMessage> {\n return { then: (onf, onr) => this._assembleMessage().then(onf, onr) };\n }\n\n then<TResult1 = AIMessage, TResult2 = never>(\n onfulfilled?:\n | ((value: AIMessage) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n return this._assembleMessage().then(onfulfilled, onrejected);\n }\n\n /** @internal */\n private async _assembleMessage(): Promise<AIMessage> {\n const contentBlocks: Array<ContentBlock | undefined> = [];\n let id: string | undefined;\n let usage: UsageMetadata | undefined;\n let metadata: Record<string, unknown> = {};\n let finishReason: string | undefined;\n\n for await (const event of this._buffer.iterate()) {\n switch (event.event) {\n case \"message-start\":\n id = event.id ?? id;\n if (event.usage) usage = event.usage;\n break;\n\n case \"content-block-start\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"content-block-delta\": {\n const current = contentBlocks[event.index];\n if (current) {\n contentBlocks[event.index] = applyDelta(current, event.content);\n }\n break;\n }\n\n case \"content-block-finish\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"usage\":\n usage = event.usage;\n break;\n\n case \"message-finish\":\n finishReason = event.reason;\n if (event.usage) usage = event.usage;\n if (event.metadata) {\n metadata = {\n ...metadata,\n ...event.metadata,\n };\n }\n break;\n\n default:\n break;\n }\n }\n\n const filteredBlocks = contentBlocks.filter(\n (b): b is ContentBlock => b != null\n );\n\n return new AIMessage({\n id,\n content: filteredBlocks,\n usage_metadata: usage,\n response_metadata: {\n ...metadata,\n ...(finishReason ? { finish_reason: finishReason } : {}),\n output_version: \"v1\" as const,\n },\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.cjs","names":["AIMessage"],"sources":["../../src/language_models/stream.ts"],"sourcesContent":["/**\n * Typed stream classes for chat model streaming.\n *\n * @module\n */\n\nimport { AIMessage } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\nimport type { ChatModelStreamEvent } from \"./event.js\";\n\ntype UsageMetadataLike = Partial<UsageMetadata>;\n\n// ─── Replay Buffer ──────────────────────────────────────────────\n\n/**\n * A buffer that caches emitted events for replay.\n *\n * Multiple consumers can independently iterate the same buffer —\n * each gets its own cursor. Events are never consumed or removed.\n *\n * @internal\n */\nclass ReplayBuffer {\n private events: ChatModelStreamEvent[] = [];\n private finished = false;\n private waiters: Array<() => void> = [];\n private error: Error | null = null;\n\n push(event: ChatModelStreamEvent): void {\n this.events.push(event);\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n finish(): void {\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n setError(err: Error): void {\n this.error = err;\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n async *iterate(): AsyncGenerator<ChatModelStreamEvent> {\n if (this.finished) {\n if (this.error) throw this.error;\n yield* this.events;\n return;\n }\n\n let cursor = 0;\n while (true) {\n while (cursor < this.events.length) {\n yield this.events[cursor]!;\n cursor++;\n }\n if (this.finished) {\n if (this.error) throw this.error;\n return;\n }\n await new Promise<void>((resolve) => {\n if (cursor < this.events.length || this.finished) {\n resolve();\n return;\n }\n this.waiters.push(resolve);\n });\n }\n }\n}\n\n// ─── Accumulator ────────────────────────────────────────────────\n\n/**\n * Apply a typed delta to an accumulated content block.\n *\n * - `text` → append text\n * - `reasoning` / provider `thinking` → append reasoning text\n * - `tool_call_chunk` / `server_tool_call_chunk` → append args while\n * preserving id/name from previous chunks when a later delta omits them\n * - other block types → shallow merge\n *\n * @internal\n */\nfunction applyDelta(block: ContentBlock, delta: ContentBlock): ContentBlock {\n if (block.type !== delta.type) {\n return { ...delta };\n }\n\n if (\n (delta as { type?: string }).type === \"thinking\" &&\n (block as { type?: string }).type === \"thinking\"\n ) {\n const thinking =\n ((block as { thinking?: string }).thinking ?? \"\") +\n ((delta as { thinking?: string }).thinking ?? \"\");\n return { ...block, ...delta, thinking } as unknown as ContentBlock;\n }\n\n switch (delta.type) {\n case \"text\":\n return {\n ...block,\n ...delta,\n text: ((block as { text?: string }).text ?? \"\") + delta.text,\n };\n case \"reasoning\":\n return {\n ...block,\n ...delta,\n reasoning:\n ((block as { reasoning?: string }).reasoning ?? \"\") + delta.reasoning,\n };\n case \"tool_call_chunk\":\n case \"server_tool_call_chunk\": {\n const merged = { ...block, ...delta } as Record<string, unknown>;\n if (delta.id == null && \"id\" in block && block.id != null) {\n merged.id = block.id;\n }\n if (delta.name == null && \"name\" in block && block.name != null) {\n merged.name = block.name;\n }\n merged.args = `${(\"args\" in block ? block.args : \"\") ?? \"\"}${delta.args ?? \"\"}`;\n return merged as unknown as ContentBlock;\n }\n default:\n return { ...block, ...delta };\n }\n}\n\nfunction getReasoningDelta(content: unknown): string | undefined {\n if (content == null || typeof content !== \"object\") return undefined;\n const block = content as {\n type?: string;\n reasoning?: unknown;\n thinking?: unknown;\n };\n if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n return block.reasoning;\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return block.thinking;\n }\n return undefined;\n}\n\nfunction isReasoningContent(content: unknown): boolean {\n if (content == null || typeof content !== \"object\") return false;\n const type = (content as { type?: unknown }).type;\n return type === \"reasoning\" || type === \"thinking\";\n}\n\n/**\n * Normalize protocol-compatible partial usage into Core's concrete usage shape.\n *\n * Some stream sources emit usage snapshots without every aggregate token field.\n * Keep the stream event input permissive, then normalize at read time so\n * high-level Core consumers always receive a complete {@link UsageMetadata}.\n */\nfunction normalizeUsage(\n usage: UsageMetadataLike | undefined\n): UsageMetadata | undefined {\n if (!usage) return undefined;\n return {\n ...usage,\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: usage.total_tokens ?? 0,\n };\n}\n\n// ─── Sub-Stream: Text ───────────────────────────────────────────\n\n/**\n * Typed stream for text content.\n *\n * - **Iterate**: yields incremental text deltas.\n * - **Await**: resolves to the complete concatenated text.\n * - **`.full`**: yields the running accumulated text after each delta.\n */\nexport class TextContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n /** Yields the accumulated text so far after each delta. */\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n accumulated += event.content.text;\n yield accumulated;\n }\n }\n },\n };\n }\n\n /** Yields incremental text deltas. */\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n yield event.content.text;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Tool Calls ─────────────────────────────────────\n\n/**\n * Typed stream for tool calls.\n *\n * - **Iterate**: yields individual `ToolCall` objects as each completes.\n * - **Await**: resolves to the full array.\n * - **`.full`**: yields the accumulated array after each new tool call.\n */\nexport class ToolCallsStream\n implements\n AsyncIterable<ContentBlock.Tools.ToolCall>,\n PromiseLike<Array<ContentBlock.Tools.ToolCall>>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n calls.push(event.content as ContentBlock.Tools.ToolCall);\n yield [...calls];\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n yield event.content as ContentBlock.Tools.ToolCall;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(\n onfulfilled?:\n | ((\n value: Array<ContentBlock.Tools.ToolCall>\n ) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const call of this) {\n calls.push(call);\n }\n return calls;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Reasoning ──────────────────────────────────────\n\n/**\n * Typed stream for reasoning content (chain-of-thought).\n * Same interface as {@link TextContentStream} but for reasoning blocks.\n */\nexport class ReasoningContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Usage ──────────────────────────────────────────\n\n/**\n * Typed stream for usage metadata.\n */\nexport class UsageMetadataStream\n implements\n AsyncIterable<UsageMetadata>,\n PromiseLike<UsageMetadata | undefined>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<UsageMetadata> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (event.event === \"usage\") {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n } else if (event.event === \"message-start\" && event.usage) {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n } else if (event.event === \"message-finish\" && event.usage) {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = UsageMetadata | undefined, TResult2 = never>(\n onfulfilled?:\n | ((value: UsageMetadata | undefined) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let latest: UsageMetadata | undefined;\n for await (const usage of this) {\n latest = usage;\n }\n return latest;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── ChatModelStream ────────────────────────────────────────────\n\n/**\n * The main stream object returned by chat model streaming.\n *\n * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access\n * and `PromiseLike<AIMessage>` for simple `await` usage.\n */\nexport class ChatModelStream\n implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(source: AsyncIterable<ChatModelStreamEvent>) {\n this._buffer = new ReplayBuffer();\n this._consume(source);\n }\n\n /** @internal */\n private async _consume(\n source: AsyncIterable<ChatModelStreamEvent>\n ): Promise<void> {\n try {\n for await (const event of source) {\n this._buffer.push(event);\n }\n this._buffer.finish();\n } catch (err) {\n this._buffer.setError(\n err instanceof Error ? err : new Error(String(err))\n );\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent> {\n return this._buffer.iterate();\n }\n\n get text(): TextContentStream {\n return new TextContentStream(this._buffer);\n }\n\n get toolCalls(): ToolCallsStream {\n return new ToolCallsStream(this._buffer);\n }\n\n get reasoning(): ReasoningContentStream {\n return new ReasoningContentStream(this._buffer);\n }\n\n get usage(): UsageMetadataStream {\n return new UsageMetadataStream(this._buffer);\n }\n\n get output(): PromiseLike<AIMessage> {\n return { then: (onf, onr) => this._assembleMessage().then(onf, onr) };\n }\n\n then<TResult1 = AIMessage, TResult2 = never>(\n onfulfilled?:\n | ((value: AIMessage) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n return this._assembleMessage().then(onfulfilled, onrejected);\n }\n\n /** @internal */\n private async _assembleMessage(): Promise<AIMessage> {\n const contentBlocks: Array<ContentBlock | undefined> = [];\n let id: string | undefined;\n let usage: UsageMetadata | undefined;\n let metadata: Record<string, unknown> = {};\n let finishReason: string | undefined;\n\n for await (const event of this._buffer.iterate()) {\n switch (event.event) {\n case \"message-start\":\n id = event.id ?? id;\n if (event.usage) usage = normalizeUsage(event.usage);\n break;\n\n case \"content-block-start\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"content-block-delta\": {\n const current = contentBlocks[event.index];\n if (current) {\n contentBlocks[event.index] = applyDelta(current, event.content);\n }\n break;\n }\n\n case \"content-block-finish\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"usage\":\n usage = normalizeUsage(event.usage);\n break;\n\n case \"message-finish\":\n finishReason = event.reason;\n if (event.usage) usage = normalizeUsage(event.usage);\n if (event.metadata) {\n metadata = {\n ...metadata,\n ...event.metadata,\n };\n }\n break;\n\n default:\n break;\n }\n }\n\n const filteredBlocks = contentBlocks.filter(\n (b): b is ContentBlock => b != null\n );\n\n return new AIMessage({\n id,\n content: filteredBlocks,\n usage_metadata: usage,\n response_metadata: {\n ...metadata,\n ...(finishReason ? { finish_reason: finishReason } : {}),\n output_version: \"v1\" as const,\n },\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.cts","names":[],"sources":["../../src/language_models/stream.ts"],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"stream.d.cts","names":[],"sources":["../../src/language_models/stream.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","names":[],"sources":["../../src/language_models/stream.ts"],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","names":[],"sources":["../../src/language_models/stream.ts"],"mappings":"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"}
|
|
@@ -129,6 +129,22 @@ function isReasoningContent(content) {
|
|
|
129
129
|
return type === "reasoning" || type === "thinking";
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
132
|
+
* Normalize protocol-compatible partial usage into Core's concrete usage shape.
|
|
133
|
+
*
|
|
134
|
+
* Some stream sources emit usage snapshots without every aggregate token field.
|
|
135
|
+
* Keep the stream event input permissive, then normalize at read time so
|
|
136
|
+
* high-level Core consumers always receive a complete {@link UsageMetadata}.
|
|
137
|
+
*/
|
|
138
|
+
function normalizeUsage(usage) {
|
|
139
|
+
if (!usage) return void 0;
|
|
140
|
+
return {
|
|
141
|
+
...usage,
|
|
142
|
+
input_tokens: usage.input_tokens ?? 0,
|
|
143
|
+
output_tokens: usage.output_tokens ?? 0,
|
|
144
|
+
total_tokens: usage.total_tokens ?? 0
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
132
148
|
* Typed stream for text content.
|
|
133
149
|
*
|
|
134
150
|
* - **Iterate**: yields incremental text deltas.
|
|
@@ -288,9 +304,16 @@ var UsageMetadataStream = class {
|
|
|
288
304
|
[Symbol.asyncIterator]() {
|
|
289
305
|
const buffer = this._buffer;
|
|
290
306
|
async function* gen() {
|
|
291
|
-
for await (const event of buffer.iterate()) if (event.event === "usage")
|
|
292
|
-
|
|
293
|
-
|
|
307
|
+
for await (const event of buffer.iterate()) if (event.event === "usage") {
|
|
308
|
+
const usage = normalizeUsage(event.usage);
|
|
309
|
+
if (usage) yield usage;
|
|
310
|
+
} else if (event.event === "message-start" && event.usage) {
|
|
311
|
+
const usage = normalizeUsage(event.usage);
|
|
312
|
+
if (usage) yield usage;
|
|
313
|
+
} else if (event.event === "message-finish" && event.usage) {
|
|
314
|
+
const usage = normalizeUsage(event.usage);
|
|
315
|
+
if (usage) yield usage;
|
|
316
|
+
}
|
|
294
317
|
}
|
|
295
318
|
return gen();
|
|
296
319
|
}
|
|
@@ -356,7 +379,7 @@ var ChatModelStream = class {
|
|
|
356
379
|
for await (const event of this._buffer.iterate()) switch (event.event) {
|
|
357
380
|
case "message-start":
|
|
358
381
|
id = event.id ?? id;
|
|
359
|
-
if (event.usage) usage = event.usage;
|
|
382
|
+
if (event.usage) usage = normalizeUsage(event.usage);
|
|
360
383
|
break;
|
|
361
384
|
case "content-block-start":
|
|
362
385
|
contentBlocks[event.index] = event.content;
|
|
@@ -370,11 +393,11 @@ var ChatModelStream = class {
|
|
|
370
393
|
contentBlocks[event.index] = event.content;
|
|
371
394
|
break;
|
|
372
395
|
case "usage":
|
|
373
|
-
usage = event.usage;
|
|
396
|
+
usage = normalizeUsage(event.usage);
|
|
374
397
|
break;
|
|
375
398
|
case "message-finish":
|
|
376
399
|
finishReason = event.reason;
|
|
377
|
-
if (event.usage) usage = event.usage;
|
|
400
|
+
if (event.usage) usage = normalizeUsage(event.usage);
|
|
378
401
|
if (event.metadata) metadata = {
|
|
379
402
|
...metadata,
|
|
380
403
|
...event.metadata
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","names":[],"sources":["../../src/language_models/stream.ts"],"sourcesContent":["/**\n * Typed stream classes for chat model streaming.\n *\n * @module\n */\n\nimport { AIMessage } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\nimport type { ChatModelStreamEvent } from \"./event.js\";\n\n// ─── Replay Buffer ──────────────────────────────────────────────\n\n/**\n * A buffer that caches emitted events for replay.\n *\n * Multiple consumers can independently iterate the same buffer —\n * each gets its own cursor. Events are never consumed or removed.\n *\n * @internal\n */\nclass ReplayBuffer {\n private events: ChatModelStreamEvent[] = [];\n private finished = false;\n private waiters: Array<() => void> = [];\n private error: Error | null = null;\n\n push(event: ChatModelStreamEvent): void {\n this.events.push(event);\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n finish(): void {\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n setError(err: Error): void {\n this.error = err;\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n async *iterate(): AsyncGenerator<ChatModelStreamEvent> {\n if (this.finished) {\n if (this.error) throw this.error;\n yield* this.events;\n return;\n }\n\n let cursor = 0;\n while (true) {\n while (cursor < this.events.length) {\n yield this.events[cursor]!;\n cursor++;\n }\n if (this.finished) {\n if (this.error) throw this.error;\n return;\n }\n await new Promise<void>((resolve) => {\n if (cursor < this.events.length || this.finished) {\n resolve();\n return;\n }\n this.waiters.push(resolve);\n });\n }\n }\n}\n\n// ─── Accumulator ────────────────────────────────────────────────\n\n/**\n * Apply a typed delta to an accumulated content block.\n *\n * - `text` → append text\n * - `reasoning` / provider `thinking` → append reasoning text\n * - `tool_call_chunk` / `server_tool_call_chunk` → append args while\n * preserving id/name from previous chunks when a later delta omits them\n * - other block types → shallow merge\n *\n * @internal\n */\nfunction applyDelta(block: ContentBlock, delta: ContentBlock): ContentBlock {\n if (block.type !== delta.type) {\n return { ...delta };\n }\n\n if (\n (delta as { type?: string }).type === \"thinking\" &&\n (block as { type?: string }).type === \"thinking\"\n ) {\n const thinking =\n ((block as { thinking?: string }).thinking ?? \"\") +\n ((delta as { thinking?: string }).thinking ?? \"\");\n return { ...block, ...delta, thinking } as unknown as ContentBlock;\n }\n\n switch (delta.type) {\n case \"text\":\n return {\n ...block,\n ...delta,\n text: ((block as { text?: string }).text ?? \"\") + delta.text,\n };\n case \"reasoning\":\n return {\n ...block,\n ...delta,\n reasoning:\n ((block as { reasoning?: string }).reasoning ?? \"\") + delta.reasoning,\n };\n case \"tool_call_chunk\":\n case \"server_tool_call_chunk\": {\n const merged = { ...block, ...delta } as Record<string, unknown>;\n if (delta.id == null && \"id\" in block && block.id != null) {\n merged.id = block.id;\n }\n if (delta.name == null && \"name\" in block && block.name != null) {\n merged.name = block.name;\n }\n merged.args = `${(\"args\" in block ? block.args : \"\") ?? \"\"}${delta.args ?? \"\"}`;\n return merged as unknown as ContentBlock;\n }\n default:\n return { ...block, ...delta };\n }\n}\n\nfunction getReasoningDelta(content: unknown): string | undefined {\n if (content == null || typeof content !== \"object\") return undefined;\n const block = content as {\n type?: string;\n reasoning?: unknown;\n thinking?: unknown;\n };\n if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n return block.reasoning;\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return block.thinking;\n }\n return undefined;\n}\n\nfunction isReasoningContent(content: unknown): boolean {\n if (content == null || typeof content !== \"object\") return false;\n const type = (content as { type?: unknown }).type;\n return type === \"reasoning\" || type === \"thinking\";\n}\n\n// ─── Sub-Stream: Text ───────────────────────────────────────────\n\n/**\n * Typed stream for text content.\n *\n * - **Iterate**: yields incremental text deltas.\n * - **Await**: resolves to the complete concatenated text.\n * - **`.full`**: yields the running accumulated text after each delta.\n */\nexport class TextContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n /** Yields the accumulated text so far after each delta. */\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n accumulated += event.content.text;\n yield accumulated;\n }\n }\n },\n };\n }\n\n /** Yields incremental text deltas. */\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n yield event.content.text;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Tool Calls ─────────────────────────────────────\n\n/**\n * Typed stream for tool calls.\n *\n * - **Iterate**: yields individual `ToolCall` objects as each completes.\n * - **Await**: resolves to the full array.\n * - **`.full`**: yields the accumulated array after each new tool call.\n */\nexport class ToolCallsStream\n implements\n AsyncIterable<ContentBlock.Tools.ToolCall>,\n PromiseLike<Array<ContentBlock.Tools.ToolCall>>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n calls.push(event.content as ContentBlock.Tools.ToolCall);\n yield [...calls];\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n yield event.content as ContentBlock.Tools.ToolCall;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(\n onfulfilled?:\n | ((\n value: Array<ContentBlock.Tools.ToolCall>\n ) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const call of this) {\n calls.push(call);\n }\n return calls;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Reasoning ──────────────────────────────────────\n\n/**\n * Typed stream for reasoning content (chain-of-thought).\n * Same interface as {@link TextContentStream} but for reasoning blocks.\n */\nexport class ReasoningContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Usage ──────────────────────────────────────────\n\n/**\n * Typed stream for usage metadata.\n */\nexport class UsageMetadataStream\n implements\n AsyncIterable<UsageMetadata>,\n PromiseLike<UsageMetadata | undefined>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<UsageMetadata> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (event.event === \"usage\") {\n yield event.usage;\n } else if (event.event === \"message-start\" && event.usage) {\n yield event.usage;\n } else if (event.event === \"message-finish\" && event.usage) {\n yield event.usage;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = UsageMetadata | undefined, TResult2 = never>(\n onfulfilled?:\n | ((value: UsageMetadata | undefined) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let latest: UsageMetadata | undefined;\n for await (const usage of this) {\n latest = usage;\n }\n return latest;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── ChatModelStream ────────────────────────────────────────────\n\n/**\n * The main stream object returned by chat model streaming.\n *\n * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access\n * and `PromiseLike<AIMessage>` for simple `await` usage.\n */\nexport class ChatModelStream\n implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(source: AsyncIterable<ChatModelStreamEvent>) {\n this._buffer = new ReplayBuffer();\n this._consume(source);\n }\n\n /** @internal */\n private async _consume(\n source: AsyncIterable<ChatModelStreamEvent>\n ): Promise<void> {\n try {\n for await (const event of source) {\n this._buffer.push(event);\n }\n this._buffer.finish();\n } catch (err) {\n this._buffer.setError(\n err instanceof Error ? err : new Error(String(err))\n );\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent> {\n return this._buffer.iterate();\n }\n\n get text(): TextContentStream {\n return new TextContentStream(this._buffer);\n }\n\n get toolCalls(): ToolCallsStream {\n return new ToolCallsStream(this._buffer);\n }\n\n get reasoning(): ReasoningContentStream {\n return new ReasoningContentStream(this._buffer);\n }\n\n get usage(): UsageMetadataStream {\n return new UsageMetadataStream(this._buffer);\n }\n\n get output(): PromiseLike<AIMessage> {\n return { then: (onf, onr) => this._assembleMessage().then(onf, onr) };\n }\n\n then<TResult1 = AIMessage, TResult2 = never>(\n onfulfilled?:\n | ((value: AIMessage) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n return this._assembleMessage().then(onfulfilled, onrejected);\n }\n\n /** @internal */\n private async _assembleMessage(): Promise<AIMessage> {\n const contentBlocks: Array<ContentBlock | undefined> = [];\n let id: string | undefined;\n let usage: UsageMetadata | undefined;\n let metadata: Record<string, unknown> = {};\n let finishReason: string | undefined;\n\n for await (const event of this._buffer.iterate()) {\n switch (event.event) {\n case \"message-start\":\n id = event.id ?? id;\n if (event.usage) usage = event.usage;\n break;\n\n case \"content-block-start\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"content-block-delta\": {\n const current = contentBlocks[event.index];\n if (current) {\n contentBlocks[event.index] = applyDelta(current, event.content);\n }\n break;\n }\n\n case \"content-block-finish\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"usage\":\n usage = event.usage;\n break;\n\n case \"message-finish\":\n finishReason = event.reason;\n if (event.usage) usage = event.usage;\n if (event.metadata) {\n metadata = {\n ...metadata,\n ...event.metadata,\n };\n }\n break;\n\n default:\n break;\n }\n }\n\n const filteredBlocks = contentBlocks.filter(\n (b): b is ContentBlock => b != null\n );\n\n return new AIMessage({\n id,\n content: filteredBlocks,\n usage_metadata: usage,\n response_metadata: {\n ...metadata,\n ...(finishReason ? { finish_reason: finishReason } : {}),\n output_version: \"v1\" as const,\n },\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.js","names":[],"sources":["../../src/language_models/stream.ts"],"sourcesContent":["/**\n * Typed stream classes for chat model streaming.\n *\n * @module\n */\n\nimport { AIMessage } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\nimport type { ChatModelStreamEvent } from \"./event.js\";\n\ntype UsageMetadataLike = Partial<UsageMetadata>;\n\n// ─── Replay Buffer ──────────────────────────────────────────────\n\n/**\n * A buffer that caches emitted events for replay.\n *\n * Multiple consumers can independently iterate the same buffer —\n * each gets its own cursor. Events are never consumed or removed.\n *\n * @internal\n */\nclass ReplayBuffer {\n private events: ChatModelStreamEvent[] = [];\n private finished = false;\n private waiters: Array<() => void> = [];\n private error: Error | null = null;\n\n push(event: ChatModelStreamEvent): void {\n this.events.push(event);\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n finish(): void {\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n setError(err: Error): void {\n this.error = err;\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n async *iterate(): AsyncGenerator<ChatModelStreamEvent> {\n if (this.finished) {\n if (this.error) throw this.error;\n yield* this.events;\n return;\n }\n\n let cursor = 0;\n while (true) {\n while (cursor < this.events.length) {\n yield this.events[cursor]!;\n cursor++;\n }\n if (this.finished) {\n if (this.error) throw this.error;\n return;\n }\n await new Promise<void>((resolve) => {\n if (cursor < this.events.length || this.finished) {\n resolve();\n return;\n }\n this.waiters.push(resolve);\n });\n }\n }\n}\n\n// ─── Accumulator ────────────────────────────────────────────────\n\n/**\n * Apply a typed delta to an accumulated content block.\n *\n * - `text` → append text\n * - `reasoning` / provider `thinking` → append reasoning text\n * - `tool_call_chunk` / `server_tool_call_chunk` → append args while\n * preserving id/name from previous chunks when a later delta omits them\n * - other block types → shallow merge\n *\n * @internal\n */\nfunction applyDelta(block: ContentBlock, delta: ContentBlock): ContentBlock {\n if (block.type !== delta.type) {\n return { ...delta };\n }\n\n if (\n (delta as { type?: string }).type === \"thinking\" &&\n (block as { type?: string }).type === \"thinking\"\n ) {\n const thinking =\n ((block as { thinking?: string }).thinking ?? \"\") +\n ((delta as { thinking?: string }).thinking ?? \"\");\n return { ...block, ...delta, thinking } as unknown as ContentBlock;\n }\n\n switch (delta.type) {\n case \"text\":\n return {\n ...block,\n ...delta,\n text: ((block as { text?: string }).text ?? \"\") + delta.text,\n };\n case \"reasoning\":\n return {\n ...block,\n ...delta,\n reasoning:\n ((block as { reasoning?: string }).reasoning ?? \"\") + delta.reasoning,\n };\n case \"tool_call_chunk\":\n case \"server_tool_call_chunk\": {\n const merged = { ...block, ...delta } as Record<string, unknown>;\n if (delta.id == null && \"id\" in block && block.id != null) {\n merged.id = block.id;\n }\n if (delta.name == null && \"name\" in block && block.name != null) {\n merged.name = block.name;\n }\n merged.args = `${(\"args\" in block ? block.args : \"\") ?? \"\"}${delta.args ?? \"\"}`;\n return merged as unknown as ContentBlock;\n }\n default:\n return { ...block, ...delta };\n }\n}\n\nfunction getReasoningDelta(content: unknown): string | undefined {\n if (content == null || typeof content !== \"object\") return undefined;\n const block = content as {\n type?: string;\n reasoning?: unknown;\n thinking?: unknown;\n };\n if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n return block.reasoning;\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return block.thinking;\n }\n return undefined;\n}\n\nfunction isReasoningContent(content: unknown): boolean {\n if (content == null || typeof content !== \"object\") return false;\n const type = (content as { type?: unknown }).type;\n return type === \"reasoning\" || type === \"thinking\";\n}\n\n/**\n * Normalize protocol-compatible partial usage into Core's concrete usage shape.\n *\n * Some stream sources emit usage snapshots without every aggregate token field.\n * Keep the stream event input permissive, then normalize at read time so\n * high-level Core consumers always receive a complete {@link UsageMetadata}.\n */\nfunction normalizeUsage(\n usage: UsageMetadataLike | undefined\n): UsageMetadata | undefined {\n if (!usage) return undefined;\n return {\n ...usage,\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: usage.total_tokens ?? 0,\n };\n}\n\n// ─── Sub-Stream: Text ───────────────────────────────────────────\n\n/**\n * Typed stream for text content.\n *\n * - **Iterate**: yields incremental text deltas.\n * - **Await**: resolves to the complete concatenated text.\n * - **`.full`**: yields the running accumulated text after each delta.\n */\nexport class TextContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n /** Yields the accumulated text so far after each delta. */\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n accumulated += event.content.text;\n yield accumulated;\n }\n }\n },\n };\n }\n\n /** Yields incremental text deltas. */\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-delta\" &&\n event.content.type === \"text\" &&\n typeof event.content.text === \"string\"\n ) {\n yield event.content.text;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Tool Calls ─────────────────────────────────────\n\n/**\n * Typed stream for tool calls.\n *\n * - **Iterate**: yields individual `ToolCall` objects as each completes.\n * - **Await**: resolves to the full array.\n * - **`.full`**: yields the accumulated array after each new tool call.\n */\nexport class ToolCallsStream\n implements\n AsyncIterable<ContentBlock.Tools.ToolCall>,\n PromiseLike<Array<ContentBlock.Tools.ToolCall>>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n calls.push(event.content as ContentBlock.Tools.ToolCall);\n yield [...calls];\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n yield event.content as ContentBlock.Tools.ToolCall;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(\n onfulfilled?:\n | ((\n value: Array<ContentBlock.Tools.ToolCall>\n ) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const call of this) {\n calls.push(call);\n }\n return calls;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Reasoning ──────────────────────────────────────\n\n/**\n * Typed stream for reasoning content (chain-of-thought).\n * Same interface as {@link TextContentStream} but for reasoning blocks.\n */\nexport class ReasoningContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (event.event === \"content-block-delta\") {\n if (!isReasoningContent(event.content)) continue;\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Usage ──────────────────────────────────────────\n\n/**\n * Typed stream for usage metadata.\n */\nexport class UsageMetadataStream\n implements\n AsyncIterable<UsageMetadata>,\n PromiseLike<UsageMetadata | undefined>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<UsageMetadata> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (event.event === \"usage\") {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n } else if (event.event === \"message-start\" && event.usage) {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n } else if (event.event === \"message-finish\" && event.usage) {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = UsageMetadata | undefined, TResult2 = never>(\n onfulfilled?:\n | ((value: UsageMetadata | undefined) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let latest: UsageMetadata | undefined;\n for await (const usage of this) {\n latest = usage;\n }\n return latest;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── ChatModelStream ────────────────────────────────────────────\n\n/**\n * The main stream object returned by chat model streaming.\n *\n * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access\n * and `PromiseLike<AIMessage>` for simple `await` usage.\n */\nexport class ChatModelStream\n implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(source: AsyncIterable<ChatModelStreamEvent>) {\n this._buffer = new ReplayBuffer();\n this._consume(source);\n }\n\n /** @internal */\n private async _consume(\n source: AsyncIterable<ChatModelStreamEvent>\n ): Promise<void> {\n try {\n for await (const event of source) {\n this._buffer.push(event);\n }\n this._buffer.finish();\n } catch (err) {\n this._buffer.setError(\n err instanceof Error ? err : new Error(String(err))\n );\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent> {\n return this._buffer.iterate();\n }\n\n get text(): TextContentStream {\n return new TextContentStream(this._buffer);\n }\n\n get toolCalls(): ToolCallsStream {\n return new ToolCallsStream(this._buffer);\n }\n\n get reasoning(): ReasoningContentStream {\n return new ReasoningContentStream(this._buffer);\n }\n\n get usage(): UsageMetadataStream {\n return new UsageMetadataStream(this._buffer);\n }\n\n get output(): PromiseLike<AIMessage> {\n return { then: (onf, onr) => this._assembleMessage().then(onf, onr) };\n }\n\n then<TResult1 = AIMessage, TResult2 = never>(\n onfulfilled?:\n | ((value: AIMessage) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n return this._assembleMessage().then(onfulfilled, onrejected);\n }\n\n /** @internal */\n private async _assembleMessage(): Promise<AIMessage> {\n const contentBlocks: Array<ContentBlock | undefined> = [];\n let id: string | undefined;\n let usage: UsageMetadata | undefined;\n let metadata: Record<string, unknown> = {};\n let finishReason: string | undefined;\n\n for await (const event of this._buffer.iterate()) {\n switch (event.event) {\n case \"message-start\":\n id = event.id ?? id;\n if (event.usage) usage = normalizeUsage(event.usage);\n break;\n\n case \"content-block-start\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"content-block-delta\": {\n const current = contentBlocks[event.index];\n if (current) {\n contentBlocks[event.index] = applyDelta(current, event.content);\n }\n break;\n }\n\n case \"content-block-finish\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"usage\":\n usage = normalizeUsage(event.usage);\n break;\n\n case \"message-finish\":\n finishReason = event.reason;\n if (event.usage) usage = normalizeUsage(event.usage);\n if (event.metadata) {\n metadata = {\n ...metadata,\n ...event.metadata,\n };\n }\n break;\n\n default:\n break;\n }\n }\n\n const filteredBlocks = contentBlocks.filter(\n (b): b is ContentBlock => b != null\n );\n\n return new AIMessage({\n id,\n content: filteredBlocks,\n usage_metadata: usage,\n response_metadata: {\n ...metadata,\n ...(finishReason ? { finish_reason: finishReason } : {}),\n output_version: \"v1\" as const,\n },\n });\n }\n}\n"],"mappings":"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"}
|