assistant-stream 0.2.0 → 0.2.2
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/ai-sdk/index.d.ts +5 -0
- package/dist/ai-sdk/index.d.ts.map +1 -0
- package/dist/ai-sdk/index.js +4 -3
- package/dist/ai-sdk/index.js.map +1 -1
- package/dist/ai-sdk/language-model.d.ts +6 -0
- package/dist/ai-sdk/language-model.d.ts.map +1 -0
- package/dist/ai-sdk/language-model.js +4 -3
- package/dist/ai-sdk/language-model.js.map +1 -1
- package/dist/ai-sdk.d.ts +3 -0
- package/dist/ai-sdk.d.ts.map +1 -0
- package/dist/ai-sdk.js +3 -2
- package/dist/ai-sdk.js.map +1 -1
- package/dist/core/AssistantStream.d.ts +12 -0
- package/dist/core/AssistantStream.d.ts.map +1 -0
- package/dist/core/AssistantStream.js +2 -1
- package/dist/core/AssistantStream.js.map +1 -1
- package/dist/core/AssistantStreamChunk.d.ts +64 -0
- package/dist/core/AssistantStreamChunk.d.ts.map +1 -0
- package/dist/core/accumulators/AssistantMessageStream.d.ts +13 -0
- package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -0
- package/dist/core/accumulators/AssistantMessageStream.js +7 -6
- package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.d.ts +8 -0
- package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -0
- package/dist/core/accumulators/assistant-message-accumulator.js +19 -18
- package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -7
- package/dist/core/index.js.map +1 -1
- package/dist/core/modules/assistant-stream.d.ts +31 -0
- package/dist/core/modules/assistant-stream.d.ts.map +1 -0
- package/dist/core/modules/assistant-stream.js +12 -11
- package/dist/core/modules/assistant-stream.js.map +1 -1
- package/dist/core/modules/text.d.ts +9 -0
- package/dist/core/modules/text.d.ts.map +1 -0
- package/dist/core/modules/text.js +5 -4
- package/dist/core/modules/text.js.map +1 -1
- package/dist/core/modules/tool-call.d.ts +13 -0
- package/dist/core/modules/tool-call.d.ts.map +1 -0
- package/dist/core/modules/tool-call.js +6 -5
- package/dist/core/modules/tool-call.js.map +1 -1
- package/dist/core/serialization/PlainText.d.ts +11 -0
- package/dist/core/serialization/PlainText.d.ts.map +1 -0
- package/dist/core/serialization/PlainText.js +7 -6
- package/dist/core/serialization/PlainText.js.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.d.ts +11 -0
- package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -0
- package/dist/core/serialization/data-stream/DataStream.js +12 -11
- package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.d.ts +86 -0
- package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -0
- package/dist/core/serialization/data-stream/chunk-types.js +1 -0
- package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
- package/dist/core/serialization/data-stream/serialization.d.ts +8 -0
- package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -0
- package/dist/core/serialization/data-stream/serialization.js +5 -4
- package/dist/core/serialization/data-stream/serialization.js.map +1 -1
- package/dist/core/tool/ToolCallReader.d.ts +33 -0
- package/dist/core/tool/ToolCallReader.d.ts.map +1 -0
- package/dist/core/tool/ToolCallReader.js +17 -16
- package/dist/core/tool/ToolCallReader.js.map +1 -1
- package/dist/core/tool/ToolExecutionStream.d.ts +24 -0
- package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -0
- package/dist/core/tool/ToolExecutionStream.js +8 -7
- package/dist/core/tool/ToolExecutionStream.js.map +1 -1
- package/dist/core/tool/ToolResponse.d.ts +17 -0
- package/dist/core/tool/ToolResponse.d.ts.map +1 -0
- package/dist/core/tool/ToolResponse.js +4 -3
- package/dist/core/tool/ToolResponse.js.map +1 -1
- package/dist/core/tool/index.d.ts +6 -0
- package/dist/core/tool/index.d.ts.map +1 -0
- package/dist/core/tool/index.js +4 -3
- package/dist/core/tool/index.js.map +1 -1
- package/dist/core/tool/tool-types.d.ts +76 -0
- package/dist/core/tool/tool-types.d.ts.map +1 -0
- package/dist/core/tool/toolResultStream.d.ts +6 -0
- package/dist/core/tool/toolResultStream.d.ts.map +1 -0
- package/dist/core/tool/toolResultStream.js +4 -3
- package/dist/core/tool/toolResultStream.js.map +1 -1
- package/dist/core/tool/type-path-utils.d.ts +23 -0
- package/dist/core/tool/type-path-utils.d.ts.map +1 -0
- package/dist/core/utils/Counter.d.ts +5 -0
- package/dist/core/utils/Counter.d.ts.map +1 -0
- package/dist/core/utils/Counter.js +3 -2
- package/dist/core/utils/Counter.js.map +1 -1
- package/dist/core/utils/generateId.d.ts +2 -0
- package/dist/core/utils/generateId.d.ts.map +1 -0
- package/dist/core/utils/generateId.js +2 -1
- package/dist/core/utils/generateId.js.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +20 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -0
- package/dist/core/utils/stream/AssistantMetaTransformStream.js +3 -2
- package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.d.ts +15 -0
- package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -0
- package/dist/core/utils/stream/AssistantTransformStream.js +4 -3
- package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.d.ts +5 -0
- package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -0
- package/dist/core/utils/stream/LineDecoderStream.js +3 -2
- package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.d.ts +4 -0
- package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -0
- package/dist/core/utils/stream/PipeableTransformStream.js +3 -2
- package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.d.ts +6 -0
- package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -0
- package/dist/core/utils/stream/merge.d.ts +9 -0
- package/dist/core/utils/stream/merge.d.ts.map +1 -0
- package/dist/core/utils/stream/merge.js +3 -2
- package/dist/core/utils/stream/merge.js.map +1 -1
- package/dist/core/utils/stream/path-utils.d.ts +12 -0
- package/dist/core/utils/stream/path-utils.d.ts.map +1 -0
- package/dist/core/utils/stream/path-utils.js +8 -7
- package/dist/core/utils/stream/path-utils.js.map +1 -1
- package/dist/core/utils/types.d.ts +102 -0
- package/dist/core/utils/types.d.ts.map +1 -0
- package/dist/core/utils/withPromiseOrValue.d.ts +2 -0
- package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -0
- package/dist/core/utils/withPromiseOrValue.js +1 -0
- package/dist/core/utils/withPromiseOrValue.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/AsyncIterableStream.d.ts +3 -0
- package/dist/utils/AsyncIterableStream.d.ts.map +1 -0
- package/dist/utils/AsyncIterableStream.js +1 -0
- package/dist/utils/AsyncIterableStream.js.map +1 -1
- package/dist/utils/json/fix-json.d.ts +2 -0
- package/dist/utils/json/fix-json.d.ts.map +1 -0
- package/dist/utils/json/fix-json.js +1 -0
- package/dist/utils/json/fix-json.js.map +1 -1
- package/dist/utils/json/is-json.d.ts +5 -0
- package/dist/utils/json/is-json.d.ts.map +1 -0
- package/dist/utils/json/is-json.js +1 -0
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/json/json-value.d.ts +6 -0
- package/dist/utils/json/json-value.d.ts.map +1 -0
- package/dist/utils/json/parse-partial-json-object.d.ts +14 -0
- package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -0
- package/dist/utils/json/parse-partial-json-object.js +7 -6
- package/dist/utils/json/parse-partial-json-object.js.map +1 -1
- package/dist/utils/json/parse-partial-json-object.test.d.ts +2 -0
- package/dist/utils/json/parse-partial-json-object.test.d.ts.map +1 -0
- package/dist/utils/promiseWithResolvers.d.ts +6 -0
- package/dist/utils/promiseWithResolvers.d.ts.map +1 -0
- package/dist/utils/promiseWithResolvers.js +2 -1
- package/dist/utils/promiseWithResolvers.js.map +1 -1
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +3 -2
- package/dist/utils.js.map +1 -1
- package/package.json +3 -2
- package/src/ai-sdk/index.ts +204 -0
- package/src/ai-sdk/language-model.ts +122 -0
- package/src/ai-sdk.ts +2 -0
- package/src/core/AssistantStream.ts +39 -0
- package/src/core/AssistantStreamChunk.ts +93 -0
- package/src/core/accumulators/AssistantMessageStream.ts +56 -0
- package/src/core/accumulators/assistant-message-accumulator.ts +394 -0
- package/src/core/index.ts +17 -0
- package/src/core/modules/assistant-stream.ts +264 -0
- package/src/core/modules/text.ts +64 -0
- package/src/core/modules/tool-call.ts +105 -0
- package/src/core/serialization/PlainText.ts +68 -0
- package/src/core/serialization/data-stream/DataStream.ts +355 -0
- package/src/core/serialization/data-stream/chunk-types.ts +93 -0
- package/src/core/serialization/data-stream/serialization.ts +32 -0
- package/src/core/tool/ToolCallReader.ts +432 -0
- package/src/core/tool/ToolExecutionStream.ts +180 -0
- package/src/core/tool/ToolResponse.ts +31 -0
- package/src/core/tool/index.ts +8 -0
- package/src/core/tool/tool-types.ts +107 -0
- package/src/core/tool/toolResultStream.ts +119 -0
- package/src/core/tool/type-path-utils.ts +36 -0
- package/src/core/utils/Counter.ts +7 -0
- package/src/core/utils/generateId.tsx +6 -0
- package/src/core/utils/stream/AssistantMetaTransformStream.ts +74 -0
- package/src/core/utils/stream/AssistantTransformStream.ts +74 -0
- package/src/core/utils/stream/LineDecoderStream.ts +29 -0
- package/src/core/utils/stream/PipeableTransformStream.ts +10 -0
- package/src/core/utils/stream/UnderlyingReadable.ts +5 -0
- package/src/core/utils/stream/merge.ts +212 -0
- package/src/core/utils/stream/path-utils.ts +71 -0
- package/src/core/utils/types.ts +150 -0
- package/src/core/utils/withPromiseOrValue.ts +20 -0
- package/src/index.ts +1 -0
- package/src/utils/AsyncIterableStream.ts +24 -0
- package/src/utils/json/fix-json.ts +488 -0
- package/src/utils/json/is-json.ts +43 -0
- package/src/utils/json/json-value.ts +13 -0
- package/src/utils/json/parse-partial-json-object.test.ts +225 -0
- package/src/utils/json/parse-partial-json-object.ts +103 -0
- package/src/utils/promiseWithResolvers.ts +10 -0
- package/src/utils.ts +13 -0
- package/utils/README.md +0 -1
- package/utils/package.json +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-path-utils.d.ts","sourceRoot":"","sources":["../../../src/core/tool/type-path-utils.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACzE,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;AAC1E,KAAK,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAClB,EAAE,GACF,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GACZ,GAAG,EAAE,GACL,CAAC,SAAS,MAAM,GACd,CAAC,SAAS,SAAS,GAAG,EAAE,GACtB,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,GAExB;KACG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACvD,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAEhB;IAAC,MAAM;IAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAAC,GAElC;KAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAE/D;CAAE,CAAC,CAAC;AAEd,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS;IAC9D,MAAM,IAAI;IACV,GAAG,MAAM,IAAI;CACd,GACG,IAAI,SAAS,MAAM,CAAC,GAClB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GACzB,KAAK,GACP,CAAC,CAAC;AAEN,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,EAAE,GACjD,SAAS,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GACjC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAC9B;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Counter.d.ts","sourceRoot":"","sources":["../../../src/core/utils/Counter.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;IACX,KAAK,SAAM;IAElB,EAAE;CAGH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/utils/Counter.ts"],"sourcesContent":["export class Counter {\n public value = -1;\n\n up() {\n return ++this.value;\n }\n}\n"],"mappings":"AAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/core/utils/Counter.ts"],"sourcesContent":["export class Counter {\n public value = -1;\n\n up() {\n return ++this.value;\n }\n}\n"],"mappings":";AAAO,IAAM,UAAN,MAAc;AAAA,EACZ,QAAQ;AAAA,EAEf,KAAK;AACH,WAAO,EAAE,KAAK;AAAA,EAChB;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateId.d.ts","sourceRoot":"","sources":["../../../src/core/utils/generateId.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,2BAGtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/utils/generateId.tsx"],"sourcesContent":["import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n"],"mappings":"AAAA,SAAS,sBAAsB;AAExB,
|
|
1
|
+
{"version":3,"sources":["../../../src/core/utils/generateId.tsx"],"sourcesContent":["import { customAlphabet } from \"nanoid/non-secure\";\n\nexport const generateId = customAlphabet(\n \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n 7,\n);\n"],"mappings":";AAAA,SAAS,sBAAsB;AAExB,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AACF;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AssistantStreamChunk, PartInit } from "../../AssistantStreamChunk";
|
|
2
|
+
/**
|
|
3
|
+
* For chunk types that are associated with a part,
|
|
4
|
+
* we require a non‑nullable meta field.
|
|
5
|
+
*/
|
|
6
|
+
export type AssistantMetaStreamChunk = (AssistantStreamChunk & {
|
|
7
|
+
type: "text-delta" | "part-finish";
|
|
8
|
+
meta: PartInit;
|
|
9
|
+
}) | (AssistantStreamChunk & {
|
|
10
|
+
type: "result" | "tool-call-args-text-finish";
|
|
11
|
+
meta: PartInit & {
|
|
12
|
+
type: "tool-call";
|
|
13
|
+
};
|
|
14
|
+
}) | (AssistantStreamChunk & {
|
|
15
|
+
type: Exclude<AssistantStreamChunk["type"], "text-delta" | "result" | "tool-call-args-text-finish" | "part-finish">;
|
|
16
|
+
});
|
|
17
|
+
export declare class AssistantMetaTransformStream extends TransformStream<AssistantStreamChunk, AssistantMetaStreamChunk> {
|
|
18
|
+
constructor();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=AssistantMetaTransformStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantMetaTransformStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC;IACnC,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,QAAQ,GAAG,4BAA4B,CAAC;IAC9C,IAAI,EAAE,QAAQ,GAAG;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC;CACxC,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,OAAO,CACX,oBAAoB,CAAC,MAAM,CAAC,EAC5B,YAAY,GAAG,QAAQ,GAAG,4BAA4B,GAAG,aAAa,CACvE,CAAC;CACH,CAAC,CAAC;AACP,qBAAa,4BAA6B,SAAQ,eAAe,CAC/D,oBAAoB,EACpB,wBAAwB,CACzB;;CAiDA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// src/core/utils/stream/AssistantMetaTransformStream.ts
|
|
2
|
+
var AssistantMetaTransformStream = class extends TransformStream {
|
|
2
3
|
constructor() {
|
|
3
4
|
const parts = [];
|
|
4
5
|
super({
|
|
@@ -36,7 +37,7 @@ class AssistantMetaTransformStream extends TransformStream {
|
|
|
36
37
|
}
|
|
37
38
|
});
|
|
38
39
|
}
|
|
39
|
-
}
|
|
40
|
+
};
|
|
40
41
|
export {
|
|
41
42
|
AssistantMetaTransformStream
|
|
42
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"sourcesContent":["import { AssistantStreamChunk, PartInit } from \"../../AssistantStreamChunk\";\n\n/**\n * For chunk types that are associated with a part,\n * we require a non‑nullable meta field.\n */\nexport type AssistantMetaStreamChunk =\n | (AssistantStreamChunk & {\n type: \"text-delta\" | \"part-finish\";\n meta: PartInit;\n })\n | (AssistantStreamChunk & {\n type: \"result\" | \"tool-call-args-text-finish\";\n meta: PartInit & { type: \"tool-call\" };\n })\n | (AssistantStreamChunk & {\n type: Exclude<\n AssistantStreamChunk[\"type\"],\n \"text-delta\" | \"result\" | \"tool-call-args-text-finish\" | \"part-finish\"\n >;\n });\nexport class AssistantMetaTransformStream extends TransformStream<\n AssistantStreamChunk,\n AssistantMetaStreamChunk\n> {\n constructor() {\n // We use an array to record parts as they are introduced.\n const parts: PartInit[] = [];\n\n super({\n transform(chunk, controller) {\n // For chunks that introduce a new part.\n if (chunk.type === \"part-start\") {\n if (chunk.path.length !== 0) {\n controller.error(new Error(\"Nested parts are not supported\"));\n return;\n }\n parts.push(chunk.part);\n controller.enqueue(chunk);\n return;\n }\n\n // For chunks that expect an associated part.\n if (\n chunk.type === \"text-delta\" ||\n chunk.type === \"result\" ||\n chunk.type === \"part-finish\" ||\n chunk.type === \"tool-call-args-text-finish\"\n ) {\n if (chunk.path.length !== 1) {\n controller.error(\n new Error(`${chunk.type} chunks must have a path of length 1`),\n );\n return;\n }\n const idx = chunk.path[0]!;\n if (idx < 0 || idx >= parts.length) {\n controller.error(new Error(`Invalid path index: ${idx}`));\n return;\n }\n const part = parts[idx]!;\n\n controller.enqueue({\n ...chunk,\n meta: part as any, // TODO\n });\n return;\n }\n\n controller.enqueue(chunk);\n },\n });\n }\n}\n"],"mappings":"AAqBO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/utils/stream/AssistantMetaTransformStream.ts"],"sourcesContent":["import { AssistantStreamChunk, PartInit } from \"../../AssistantStreamChunk\";\n\n/**\n * For chunk types that are associated with a part,\n * we require a non‑nullable meta field.\n */\nexport type AssistantMetaStreamChunk =\n | (AssistantStreamChunk & {\n type: \"text-delta\" | \"part-finish\";\n meta: PartInit;\n })\n | (AssistantStreamChunk & {\n type: \"result\" | \"tool-call-args-text-finish\";\n meta: PartInit & { type: \"tool-call\" };\n })\n | (AssistantStreamChunk & {\n type: Exclude<\n AssistantStreamChunk[\"type\"],\n \"text-delta\" | \"result\" | \"tool-call-args-text-finish\" | \"part-finish\"\n >;\n });\nexport class AssistantMetaTransformStream extends TransformStream<\n AssistantStreamChunk,\n AssistantMetaStreamChunk\n> {\n constructor() {\n // We use an array to record parts as they are introduced.\n const parts: PartInit[] = [];\n\n super({\n transform(chunk, controller) {\n // For chunks that introduce a new part.\n if (chunk.type === \"part-start\") {\n if (chunk.path.length !== 0) {\n controller.error(new Error(\"Nested parts are not supported\"));\n return;\n }\n parts.push(chunk.part);\n controller.enqueue(chunk);\n return;\n }\n\n // For chunks that expect an associated part.\n if (\n chunk.type === \"text-delta\" ||\n chunk.type === \"result\" ||\n chunk.type === \"part-finish\" ||\n chunk.type === \"tool-call-args-text-finish\"\n ) {\n if (chunk.path.length !== 1) {\n controller.error(\n new Error(`${chunk.type} chunks must have a path of length 1`),\n );\n return;\n }\n const idx = chunk.path[0]!;\n if (idx < 0 || idx >= parts.length) {\n controller.error(new Error(`Invalid path index: ${idx}`));\n return;\n }\n const part = parts[idx]!;\n\n controller.enqueue({\n ...chunk,\n meta: part as any, // TODO\n });\n return;\n }\n\n controller.enqueue(chunk);\n },\n });\n }\n}\n"],"mappings":";AAqBO,IAAM,+BAAN,cAA2C,gBAGhD;AAAA,EACA,cAAc;AAEZ,UAAM,QAAoB,CAAC;AAE3B,UAAM;AAAA,MACJ,UAAU,OAAO,YAAY;AAE3B,YAAI,MAAM,SAAS,cAAc;AAC/B,cAAI,MAAM,KAAK,WAAW,GAAG;AAC3B,uBAAW,MAAM,IAAI,MAAM,gCAAgC,CAAC;AAC5D;AAAA,UACF;AACA,gBAAM,KAAK,MAAM,IAAI;AACrB,qBAAW,QAAQ,KAAK;AACxB;AAAA,QACF;AAGA,YACE,MAAM,SAAS,gBACf,MAAM,SAAS,YACf,MAAM,SAAS,iBACf,MAAM,SAAS,8BACf;AACA,cAAI,MAAM,KAAK,WAAW,GAAG;AAC3B,uBAAW;AAAA,cACT,IAAI,MAAM,GAAG,MAAM,IAAI,sCAAsC;AAAA,YAC/D;AACA;AAAA,UACF;AACA,gBAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAI,MAAM,KAAK,OAAO,MAAM,QAAQ;AAClC,uBAAW,MAAM,IAAI,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACxD;AAAA,UACF;AACA,gBAAM,OAAO,MAAM,GAAG;AAEtB,qBAAW,QAAQ;AAAA,YACjB,GAAG;AAAA,YACH,MAAM;AAAA;AAAA,UACR,CAAC;AACD;AAAA,QACF;AAEA,mBAAW,QAAQ,KAAK;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AssistantStreamChunk } from "../../AssistantStreamChunk";
|
|
2
|
+
import { AssistantStreamController } from "../../modules/assistant-stream";
|
|
3
|
+
type AssistantTransformerFlushCallback = (controller: AssistantStreamController) => void | PromiseLike<void>;
|
|
4
|
+
type AssistantTransformerStartCallback = (controller: AssistantStreamController) => void | PromiseLike<void>;
|
|
5
|
+
type AssistantTransformerTransformCallback<I> = (chunk: I, controller: AssistantStreamController) => void | PromiseLike<void>;
|
|
6
|
+
type AssistantTransformer<I> = {
|
|
7
|
+
flush?: AssistantTransformerFlushCallback;
|
|
8
|
+
start?: AssistantTransformerStartCallback;
|
|
9
|
+
transform?: AssistantTransformerTransformCallback<I>;
|
|
10
|
+
};
|
|
11
|
+
export declare class AssistantTransformStream<I> extends TransformStream<I, AssistantStreamChunk> {
|
|
12
|
+
constructor(transformer: AssistantTransformer<I>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<AssistantStreamChunk>);
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=AssistantTransformStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantTransformStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/AssistantTransformStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACL,yBAAyB,EAE1B,MAAM,gCAAgC,CAAC;AAExC,KAAK,iCAAiC,GAAG,CACvC,UAAU,EAAE,yBAAyB,KAClC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAE9B,KAAK,iCAAiC,GAAG,CACvC,UAAU,EAAE,yBAAyB,KAClC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAE9B,KAAK,qCAAqC,CAAC,CAAC,IAAI,CAC9C,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,yBAAyB,KAClC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAE9B,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,KAAK,CAAC,EAAE,iCAAiC,CAAC;IAC1C,KAAK,CAAC,EAAE,iCAAiC,CAAC;IAC1C,SAAS,CAAC,EAAE,qCAAqC,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF,qBAAa,wBAAwB,CAAC,CAAC,CAAE,SAAQ,eAAe,CAC9D,CAAC,EACD,oBAAoB,CACrB;gBAEG,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC,EACpC,gBAAgB,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EACrC,gBAAgB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC;CAyC3D"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
// src/core/utils/stream/AssistantTransformStream.ts
|
|
1
2
|
import {
|
|
2
3
|
createAssistantStreamController
|
|
3
|
-
} from "../../modules/assistant-stream";
|
|
4
|
-
|
|
4
|
+
} from "../../modules/assistant-stream.js";
|
|
5
|
+
var AssistantTransformStream = class extends TransformStream {
|
|
5
6
|
constructor(transformer, writableStrategy, readableStrategy) {
|
|
6
7
|
const [stream, runController] = createAssistantStreamController();
|
|
7
8
|
let runPipeTask;
|
|
@@ -38,7 +39,7 @@ class AssistantTransformStream extends TransformStream {
|
|
|
38
39
|
readableStrategy
|
|
39
40
|
);
|
|
40
41
|
}
|
|
41
|
-
}
|
|
42
|
+
};
|
|
42
43
|
export {
|
|
43
44
|
AssistantTransformStream
|
|
44
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/utils/stream/AssistantTransformStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport {\n AssistantStreamController,\n createAssistantStreamController,\n} from \"../../modules/assistant-stream\";\n\ntype AssistantTransformerFlushCallback = (\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformerStartCallback = (\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformerTransformCallback<I> = (\n chunk: I,\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformer<I> = {\n flush?: AssistantTransformerFlushCallback;\n start?: AssistantTransformerStartCallback;\n transform?: AssistantTransformerTransformCallback<I>;\n};\n\nexport class AssistantTransformStream<I> extends TransformStream<\n I,\n AssistantStreamChunk\n> {\n constructor(\n transformer: AssistantTransformer<I>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<AssistantStreamChunk>,\n ) {\n const [stream, runController] = createAssistantStreamController();\n\n let runPipeTask: Promise<void>;\n super(\n {\n start(controller) {\n runPipeTask = stream\n .pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n abort(reason?: any) {\n controller.error(reason);\n },\n close() {\n controller.terminate();\n },\n }),\n )\n .catch((error) => {\n controller.error(error);\n });\n\n return transformer.start?.(runController);\n },\n transform(chunk) {\n return transformer.transform?.(chunk, runController);\n },\n async flush() {\n await transformer.flush?.(runController);\n runController.close();\n await runPipeTask;\n },\n },\n writableStrategy,\n readableStrategy,\n );\n }\n}\n"],"mappings":"AACA;AAAA,EAEE;AAAA,OACK;AAqBA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/utils/stream/AssistantTransformStream.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport {\n AssistantStreamController,\n createAssistantStreamController,\n} from \"../../modules/assistant-stream\";\n\ntype AssistantTransformerFlushCallback = (\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformerStartCallback = (\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformerTransformCallback<I> = (\n chunk: I,\n controller: AssistantStreamController,\n) => void | PromiseLike<void>;\n\ntype AssistantTransformer<I> = {\n flush?: AssistantTransformerFlushCallback;\n start?: AssistantTransformerStartCallback;\n transform?: AssistantTransformerTransformCallback<I>;\n};\n\nexport class AssistantTransformStream<I> extends TransformStream<\n I,\n AssistantStreamChunk\n> {\n constructor(\n transformer: AssistantTransformer<I>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<AssistantStreamChunk>,\n ) {\n const [stream, runController] = createAssistantStreamController();\n\n let runPipeTask: Promise<void>;\n super(\n {\n start(controller) {\n runPipeTask = stream\n .pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n abort(reason?: any) {\n controller.error(reason);\n },\n close() {\n controller.terminate();\n },\n }),\n )\n .catch((error) => {\n controller.error(error);\n });\n\n return transformer.start?.(runController);\n },\n transform(chunk) {\n return transformer.transform?.(chunk, runController);\n },\n async flush() {\n await transformer.flush?.(runController);\n runController.close();\n await runPipeTask;\n },\n },\n writableStrategy,\n readableStrategy,\n );\n }\n}\n"],"mappings":";AACA;AAAA,EAEE;AAAA,OACK;AAqBA,IAAM,2BAAN,cAA0C,gBAG/C;AAAA,EACA,YACE,aACA,kBACA,kBACA;AACA,UAAM,CAAC,QAAQ,aAAa,IAAI,gCAAgC;AAEhE,QAAI;AACJ;AAAA,MACE;AAAA,QACE,MAAM,YAAY;AAChB,wBAAc,OACX;AAAA,YACC,IAAI,eAAe;AAAA,cACjB,MAAM,OAAO;AACX,2BAAW,QAAQ,KAAK;AAAA,cAC1B;AAAA,cACA,MAAM,QAAc;AAClB,2BAAW,MAAM,MAAM;AAAA,cACzB;AAAA,cACA,QAAQ;AACN,2BAAW,UAAU;AAAA,cACvB;AAAA,YACF,CAAC;AAAA,UACH,EACC,MAAM,CAAC,UAAU;AAChB,uBAAW,MAAM,KAAK;AAAA,UACxB,CAAC;AAEH,iBAAO,YAAY,QAAQ,aAAa;AAAA,QAC1C;AAAA,QACA,UAAU,OAAO;AACf,iBAAO,YAAY,YAAY,OAAO,aAAa;AAAA,QACrD;AAAA,QACA,MAAM,QAAQ;AACZ,gBAAM,YAAY,QAAQ,aAAa;AACvC,wBAAc,MAAM;AACpB,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineDecoderStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;IACpE,OAAO,CAAC,MAAM,CAAM;;CA2BrB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// src/core/utils/stream/LineDecoderStream.ts
|
|
2
|
+
var LineDecoderStream = class extends TransformStream {
|
|
2
3
|
buffer = "";
|
|
3
4
|
constructor() {
|
|
4
5
|
super({
|
|
@@ -19,7 +20,7 @@ class LineDecoderStream extends TransformStream {
|
|
|
19
20
|
}
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
|
-
}
|
|
23
|
+
};
|
|
23
24
|
export {
|
|
24
25
|
LineDecoderStream
|
|
25
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"sourcesContent":["export class LineDecoderStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1] || \"\";\n },\n flush: () => {\n // If there's content in the buffer when the stream ends, it means\n // the stream ended with an incomplete line (no trailing newline)\n if (this.buffer) {\n throw new Error(\n `Stream ended with an incomplete line: \"${this.buffer}\"`,\n );\n }\n },\n });\n }\n}\n"],"mappings":"AAAO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/utils/stream/LineDecoderStream.ts"],"sourcesContent":["export class LineDecoderStream extends TransformStream<string, string> {\n private buffer = \"\";\n\n constructor() {\n super({\n transform: (chunk, controller) => {\n this.buffer += chunk;\n const lines = this.buffer.split(\"\\n\");\n\n // Process all complete lines\n for (let i = 0; i < lines.length - 1; i++) {\n controller.enqueue(lines[i]);\n }\n\n // Keep the last incomplete line in the buffer\n this.buffer = lines[lines.length - 1] || \"\";\n },\n flush: () => {\n // If there's content in the buffer when the stream ends, it means\n // the stream ended with an incomplete line (no trailing newline)\n if (this.buffer) {\n throw new Error(\n `Stream ended with an incomplete line: \"${this.buffer}\"`,\n );\n }\n },\n });\n }\n}\n"],"mappings":";AAAO,IAAM,oBAAN,cAAgC,gBAAgC;AAAA,EAC7D,SAAS;AAAA,EAEjB,cAAc;AACZ,UAAM;AAAA,MACJ,WAAW,CAAC,OAAO,eAAe;AAChC,aAAK,UAAU;AACf,cAAM,QAAQ,KAAK,OAAO,MAAM,IAAI;AAGpC,iBAAS,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;AACzC,qBAAW,QAAQ,MAAM,CAAC,CAAC;AAAA,QAC7B;AAGA,aAAK,SAAS,MAAM,MAAM,SAAS,CAAC,KAAK;AAAA,MAC3C;AAAA,MACA,OAAO,MAAM;AAGX,YAAI,KAAK,QAAQ;AACf,gBAAM,IAAI;AAAA,YACR,0CAA0C,KAAK,MAAM;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PipeableTransformStream.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1D,SAAS,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC;CAQ1E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// src/core/utils/stream/PipeableTransformStream.ts
|
|
2
|
+
var PipeableTransformStream = class extends TransformStream {
|
|
2
3
|
constructor(transform) {
|
|
3
4
|
super();
|
|
4
5
|
const readable = transform(super.readable);
|
|
@@ -7,7 +8,7 @@ class PipeableTransformStream extends TransformStream {
|
|
|
7
8
|
writable: false
|
|
8
9
|
});
|
|
9
10
|
}
|
|
10
|
-
}
|
|
11
|
+
};
|
|
11
12
|
export {
|
|
12
13
|
PipeableTransformStream
|
|
13
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"sourcesContent":["export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as unknown as ReadableStream<I>);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n"],"mappings":"AAAO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/utils/stream/PipeableTransformStream.ts"],"sourcesContent":["export class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {\n super();\n const readable = transform(super.readable as unknown as ReadableStream<I>);\n Object.defineProperty(this, \"readable\", {\n value: readable,\n writable: false,\n });\n }\n}\n"],"mappings":";AAAO,IAAM,0BAAN,cAA4C,gBAAsB;AAAA,EACvE,YAAY,WAA+D;AACzE,UAAM;AACN,UAAM,WAAW,UAAU,MAAM,QAAwC;AACzE,WAAO,eAAe,MAAM,YAAY;AAAA,MACtC,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnderlyingReadable.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/UnderlyingReadable.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,CAAC,WAAW,IAAI;IAC5C,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,8BAA8B,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AssistantStreamChunk } from "../../AssistantStreamChunk";
|
|
2
|
+
export declare const createMergeStream: () => {
|
|
3
|
+
readable: ReadableStream<AssistantStreamChunk>;
|
|
4
|
+
isSealed(): boolean;
|
|
5
|
+
seal(): void;
|
|
6
|
+
addStream(stream: ReadableStream<AssistantStreamChunk>): void;
|
|
7
|
+
enqueue(chunk: AssistantStreamChunk): void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAQlE,eAAO,MAAM,iBAAiB;;;;sBA0ER,cAAc,CAAC,oBAAoB,CAAC;mBAUvC,oBAAoB;CAWtC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// src/core/utils/stream/merge.ts
|
|
2
|
+
import { promiseWithResolvers } from "../../../utils/promiseWithResolvers.js";
|
|
3
|
+
var createMergeStream = () => {
|
|
3
4
|
const list = [];
|
|
4
5
|
let sealed = false;
|
|
5
6
|
let controller;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/utils/stream/merge.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { promiseWithResolvers } from \"../../../utils/promiseWithResolvers\";\n\ntype MergeStreamItem = {\n reader: ReadableStreamDefaultReader<AssistantStreamChunk>;\n promise?: Promise<unknown> | undefined;\n};\n\nexport const createMergeStream = () => {\n const list: MergeStreamItem[] = [];\n let sealed = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers<void>> | undefined;\n\n const handlePull = (item: MergeStreamItem) => {\n if (!item.promise) {\n // TODO for most streams, we can directly pipeTo to avoid the microTask queue\n // add an option to eagerly pipe the stream to the merge stream\n // ideally, using assitant-stream w sync run method + piping to a sync WritableStream runs in the same microtask\n // this is useful because we often use AssistantStreams internally as a serialization utility, e. g. AssistantTransformStream\n // idea: avoid reader.read() by instead using a WritableStream & if (!hasPendingPull) await waitForPull()?\n item.promise = item.reader\n .read()\n .then(({ done, value }) => {\n item.promise = undefined;\n if (done) {\n list.splice(list.indexOf(item), 1);\n if (sealed && list.length === 0) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n\n currentPull?.resolve();\n currentPull = undefined;\n })\n .catch((e) => {\n console.error(e);\n\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n\n controller.error(e);\n\n currentPull?.reject(e);\n currentPull = undefined;\n });\n }\n };\n\n const readable = new ReadableStream<AssistantStreamChunk>({\n start(c) {\n controller = c;\n },\n pull() {\n currentPull = promiseWithResolvers();\n list.forEach((item) => {\n handlePull(item);\n });\n\n return currentPull.promise;\n },\n cancel() {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n },\n });\n\n return {\n readable,\n isSealed() {\n return sealed;\n },\n seal() {\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: ReadableStream<AssistantStreamChunk>) {\n if (sealed)\n throw new Error(\n \"Cannot add streams after the run callback has settled.\",\n );\n\n const item = { reader: stream.getReader() };\n list.push(item);\n handlePull(item);\n },\n enqueue(chunk: AssistantStreamChunk) {\n this.addStream(\n new ReadableStream({\n start(c) {\n c.enqueue(chunk);\n c.close();\n },\n }),\n );\n },\n };\n};\n\n// TODO\n// export class SpanContainerMerger {\n// public get isSealed() {\n// return this.mergeStream.isSealed();\n// }\n\n// public get readable() {\n// return this.mergeStream.readable;\n// }\n\n// private subAllocator = new Counter();\n// private mergeStream = createMergeStream();\n\n// constructor() {\n// // id 0 is auto allocated\n// this.subAllocator.up();\n// }\n\n// add(stream: ReadableStream<AssistantStreamChunk>) {\n// this.mergeStream.addStream(\n// stream.pipeThrough(new SpanParentEncoder(this.subAllocator)),\n// );\n// }\n\n// enqueue(chunk: AssistantStreamChunk & { parentId: 0 }) {\n// this.mergeStream.addStream(\n// new ReadableStream({\n// start(c) {\n// c.enqueue(chunk);\n// c.close();\n// },\n// }),\n// );\n// }\n\n// seal() {\n// this.mergeStream.seal();\n// }\n// }\n\n// export class SpanContainerSplitter {\n// public writable;\n\n// private isSealed = false;\n// private writers = new Map<\n// number,\n// WritableStreamDefaultWriter<AssistantStreamChunk>\n// >();\n\n// private closeTasks: Promise<void>[] = [];\n\n// private allocator = new Counter();\n// private subAllocator = new Counter();\n\n// constructor() {\n// // id 0 is auto-allocated\n// this.allocator.up();\n\n// this.writable = new WritableStream({\n// write: (chunk) => {\n// const { type, parentId } = chunk;\n\n// const writer = this.writers.get(parentId);\n// if (writer === undefined) throw new Error(\"Parent id not found\");\n\n// writer.write(chunk);\n\n// if (type === \"span\") {\n// // allocate a new span id\n// this.writers.set(this.allocator.up(), writer);\n// }\n// if (type === \"finish\") {\n// this.writers.delete(parentId);\n// writer.close();\n\n// if (this.writers.size === 0) {\n// const closeTask = this.writable.close();\n// this.closeTasks.push(closeTask);\n// closeTask.then(() => {\n// this.closeTasks.splice(this.closeTasks.indexOf(closeTask), 1);\n// });\n// }\n// }\n// },\n// close: async () => {\n// if (this.writers.size > 0) throw new Error(\"Not all writers closed\");\n\n// // await and throw on any errors\n// await Promise.all(this.closeTasks);\n// },\n// });\n// }\n\n// add(stream: WritableStream<AssistantStreamChunk>) {\n// if (this.isSealed) throw new Error(\"Cannot add streams after sealing\");\n\n// const decoder = new SpanParentDecoder(this.subAllocator);\n// decoder.readable.pipeTo(stream);\n\n// this.writers.set(this.allocator.up(), decoder.writable.getWriter());\n// }\n\n// seal() {\n// this.isSealed = true;\n// if (this.writers.size === 0) this.writable.close();\n// }\n// }\n"],"mappings":"AACA,SAAS,4BAA4B;AAO9B,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/utils/stream/merge.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { promiseWithResolvers } from \"../../../utils/promiseWithResolvers\";\n\ntype MergeStreamItem = {\n reader: ReadableStreamDefaultReader<AssistantStreamChunk>;\n promise?: Promise<unknown> | undefined;\n};\n\nexport const createMergeStream = () => {\n const list: MergeStreamItem[] = [];\n let sealed = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers<void>> | undefined;\n\n const handlePull = (item: MergeStreamItem) => {\n if (!item.promise) {\n // TODO for most streams, we can directly pipeTo to avoid the microTask queue\n // add an option to eagerly pipe the stream to the merge stream\n // ideally, using assitant-stream w sync run method + piping to a sync WritableStream runs in the same microtask\n // this is useful because we often use AssistantStreams internally as a serialization utility, e. g. AssistantTransformStream\n // idea: avoid reader.read() by instead using a WritableStream & if (!hasPendingPull) await waitForPull()?\n item.promise = item.reader\n .read()\n .then(({ done, value }) => {\n item.promise = undefined;\n if (done) {\n list.splice(list.indexOf(item), 1);\n if (sealed && list.length === 0) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n\n currentPull?.resolve();\n currentPull = undefined;\n })\n .catch((e) => {\n console.error(e);\n\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n\n controller.error(e);\n\n currentPull?.reject(e);\n currentPull = undefined;\n });\n }\n };\n\n const readable = new ReadableStream<AssistantStreamChunk>({\n start(c) {\n controller = c;\n },\n pull() {\n currentPull = promiseWithResolvers();\n list.forEach((item) => {\n handlePull(item);\n });\n\n return currentPull.promise;\n },\n cancel() {\n list.forEach((item) => {\n item.reader.cancel();\n });\n list.length = 0;\n },\n });\n\n return {\n readable,\n isSealed() {\n return sealed;\n },\n seal() {\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: ReadableStream<AssistantStreamChunk>) {\n if (sealed)\n throw new Error(\n \"Cannot add streams after the run callback has settled.\",\n );\n\n const item = { reader: stream.getReader() };\n list.push(item);\n handlePull(item);\n },\n enqueue(chunk: AssistantStreamChunk) {\n this.addStream(\n new ReadableStream({\n start(c) {\n c.enqueue(chunk);\n c.close();\n },\n }),\n );\n },\n };\n};\n\n// TODO\n// export class SpanContainerMerger {\n// public get isSealed() {\n// return this.mergeStream.isSealed();\n// }\n\n// public get readable() {\n// return this.mergeStream.readable;\n// }\n\n// private subAllocator = new Counter();\n// private mergeStream = createMergeStream();\n\n// constructor() {\n// // id 0 is auto allocated\n// this.subAllocator.up();\n// }\n\n// add(stream: ReadableStream<AssistantStreamChunk>) {\n// this.mergeStream.addStream(\n// stream.pipeThrough(new SpanParentEncoder(this.subAllocator)),\n// );\n// }\n\n// enqueue(chunk: AssistantStreamChunk & { parentId: 0 }) {\n// this.mergeStream.addStream(\n// new ReadableStream({\n// start(c) {\n// c.enqueue(chunk);\n// c.close();\n// },\n// }),\n// );\n// }\n\n// seal() {\n// this.mergeStream.seal();\n// }\n// }\n\n// export class SpanContainerSplitter {\n// public writable;\n\n// private isSealed = false;\n// private writers = new Map<\n// number,\n// WritableStreamDefaultWriter<AssistantStreamChunk>\n// >();\n\n// private closeTasks: Promise<void>[] = [];\n\n// private allocator = new Counter();\n// private subAllocator = new Counter();\n\n// constructor() {\n// // id 0 is auto-allocated\n// this.allocator.up();\n\n// this.writable = new WritableStream({\n// write: (chunk) => {\n// const { type, parentId } = chunk;\n\n// const writer = this.writers.get(parentId);\n// if (writer === undefined) throw new Error(\"Parent id not found\");\n\n// writer.write(chunk);\n\n// if (type === \"span\") {\n// // allocate a new span id\n// this.writers.set(this.allocator.up(), writer);\n// }\n// if (type === \"finish\") {\n// this.writers.delete(parentId);\n// writer.close();\n\n// if (this.writers.size === 0) {\n// const closeTask = this.writable.close();\n// this.closeTasks.push(closeTask);\n// closeTask.then(() => {\n// this.closeTasks.splice(this.closeTasks.indexOf(closeTask), 1);\n// });\n// }\n// }\n// },\n// close: async () => {\n// if (this.writers.size > 0) throw new Error(\"Not all writers closed\");\n\n// // await and throw on any errors\n// await Promise.all(this.closeTasks);\n// },\n// });\n// }\n\n// add(stream: WritableStream<AssistantStreamChunk>) {\n// if (this.isSealed) throw new Error(\"Cannot add streams after sealing\");\n\n// const decoder = new SpanParentDecoder(this.subAllocator);\n// decoder.readable.pipeTo(stream);\n\n// this.writers.set(this.allocator.up(), decoder.writable.getWriter());\n// }\n\n// seal() {\n// this.isSealed = true;\n// if (this.writers.size === 0) this.writable.close();\n// }\n// }\n"],"mappings":";AACA,SAAS,4BAA4B;AAO9B,IAAM,oBAAoB,MAAM;AACrC,QAAM,OAA0B,CAAC;AACjC,MAAI,SAAS;AACb,MAAI;AACJ,MAAI;AAEJ,QAAM,aAAa,CAAC,SAA0B;AAC5C,QAAI,CAAC,KAAK,SAAS;AAMjB,WAAK,UAAU,KAAK,OACjB,KAAK,EACL,KAAK,CAAC,EAAE,MAAM,MAAM,MAAM;AACzB,aAAK,UAAU;AACf,YAAI,MAAM;AACR,eAAK,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC;AACjC,cAAI,UAAU,KAAK,WAAW,GAAG;AAC/B,uBAAW,MAAM;AAAA,UACnB;AAAA,QACF,OAAO;AACL,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AAEA,qBAAa,QAAQ;AACrB,sBAAc;AAAA,MAChB,CAAC,EACA,MAAM,CAAC,MAAM;AACZ,gBAAQ,MAAM,CAAC;AAEf,aAAK,QAAQ,CAACA,UAAS;AACrB,UAAAA,MAAK,OAAO,OAAO;AAAA,QACrB,CAAC;AACD,aAAK,SAAS;AAEd,mBAAW,MAAM,CAAC;AAElB,qBAAa,OAAO,CAAC;AACrB,sBAAc;AAAA,MAChB,CAAC;AAAA,IACL;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,eAAqC;AAAA,IACxD,MAAM,GAAG;AACP,mBAAa;AAAA,IACf;AAAA,IACA,OAAO;AACL,oBAAc,qBAAqB;AACnC,WAAK,QAAQ,CAAC,SAAS;AACrB,mBAAW,IAAI;AAAA,MACjB,CAAC;AAED,aAAO,YAAY;AAAA,IACrB;AAAA,IACA,SAAS;AACP,WAAK,QAAQ,CAAC,SAAS;AACrB,aAAK,OAAO,OAAO;AAAA,MACrB,CAAC;AACD,WAAK,SAAS;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AACT,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,eAAS;AACT,UAAI,KAAK,WAAW,EAAG,YAAW,MAAM;AAAA,IAC1C;AAAA,IACA,UAAU,QAA8C;AACtD,UAAI;AACF,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAEF,YAAM,OAAO,EAAE,QAAQ,OAAO,UAAU,EAAE;AAC1C,WAAK,KAAK,IAAI;AACd,iBAAW,IAAI;AAAA,IACjB;AAAA,IACA,QAAQ,OAA6B;AACnC,WAAK;AAAA,QACH,IAAI,eAAe;AAAA,UACjB,MAAM,GAAG;AACP,cAAE,QAAQ,KAAK;AACf,cAAE,MAAM;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;","names":["item"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AssistantStreamChunk } from "../../AssistantStreamChunk";
|
|
2
|
+
import { Counter } from "../Counter";
|
|
3
|
+
export declare class PathAppendEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
|
|
4
|
+
constructor(idx: number);
|
|
5
|
+
}
|
|
6
|
+
export declare class PathAppendDecoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
|
|
7
|
+
constructor(idx: number);
|
|
8
|
+
}
|
|
9
|
+
export declare class PathMergeEncoder extends TransformStream<AssistantStreamChunk, AssistantStreamChunk> {
|
|
10
|
+
constructor(counter: Counter);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=path-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/stream/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,qBAAa,iBAAkB,SAAQ,eAAe,CACpD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,GAAG,EAAE,MAAM;CAUxB;AAED,qBAAa,iBAAkB,SAAQ,eAAe,CACpD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,GAAG,EAAE,MAAM;CAiBxB;AAED,qBAAa,gBAAiB,SAAQ,eAAe,CACnD,oBAAoB,EACpB,oBAAoB,CACrB;gBACa,OAAO,EAAE,OAAO;CAwB7B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// src/core/utils/stream/path-utils.ts
|
|
2
|
+
import { Counter } from "../Counter.js";
|
|
3
|
+
var PathAppendEncoder = class extends TransformStream {
|
|
3
4
|
constructor(idx) {
|
|
4
5
|
super({
|
|
5
6
|
transform(chunk, controller) {
|
|
@@ -10,8 +11,8 @@ class PathAppendEncoder extends TransformStream {
|
|
|
10
11
|
}
|
|
11
12
|
});
|
|
12
13
|
}
|
|
13
|
-
}
|
|
14
|
-
|
|
14
|
+
};
|
|
15
|
+
var PathAppendDecoder = class extends TransformStream {
|
|
15
16
|
constructor(idx) {
|
|
16
17
|
super({
|
|
17
18
|
transform(chunk, controller) {
|
|
@@ -27,8 +28,8 @@ class PathAppendDecoder extends TransformStream {
|
|
|
27
28
|
}
|
|
28
29
|
});
|
|
29
30
|
}
|
|
30
|
-
}
|
|
31
|
-
|
|
31
|
+
};
|
|
32
|
+
var PathMergeEncoder = class extends TransformStream {
|
|
32
33
|
constructor(counter) {
|
|
33
34
|
const innerCounter = new Counter();
|
|
34
35
|
const mapping = /* @__PURE__ */ new Map();
|
|
@@ -51,7 +52,7 @@ class PathMergeEncoder extends TransformStream {
|
|
|
51
52
|
}
|
|
52
53
|
});
|
|
53
54
|
}
|
|
54
|
-
}
|
|
55
|
+
};
|
|
55
56
|
export {
|
|
56
57
|
PathAppendDecoder,
|
|
57
58
|
PathAppendEncoder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/utils/stream/path-utils.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { Counter } from \"../Counter\";\n\nexport class PathAppendEncoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(idx: number) {\n super({\n transform(chunk, controller) {\n controller.enqueue({\n ...chunk,\n path: [idx, ...chunk.path],\n });\n },\n });\n }\n}\n\nexport class PathAppendDecoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(idx: number) {\n super({\n transform(chunk, controller) {\n const {\n path: [idx2, ...path],\n } = chunk;\n\n if (idx !== idx2)\n throw new Error(`Path mismatch: expected ${idx}, got ${idx2}`);\n\n controller.enqueue({\n ...chunk,\n path,\n });\n },\n });\n }\n}\n\nexport class PathMergeEncoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(counter: Counter) {\n const innerCounter = new Counter();\n const mapping = new Map<number, number>();\n super({\n transform(chunk, controller) {\n if (chunk.type === \"part-start\" && chunk.path.length === 0) {\n mapping.set(innerCounter.up(), counter.up());\n }\n\n const [idx, ...path] = chunk.path;\n if (idx === undefined) {\n controller.enqueue(chunk);\n return;\n }\n const mappedIdx = mapping.get(idx);\n if (mappedIdx === undefined) throw new Error(\"Path not found\");\n\n controller.enqueue({\n ...chunk,\n path: [mappedIdx, ...path],\n });\n },\n });\n }\n}\n"],"mappings":"AACA,SAAS,eAAe;AAEjB,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/utils/stream/path-utils.ts"],"sourcesContent":["import { AssistantStreamChunk } from \"../../AssistantStreamChunk\";\nimport { Counter } from \"../Counter\";\n\nexport class PathAppendEncoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(idx: number) {\n super({\n transform(chunk, controller) {\n controller.enqueue({\n ...chunk,\n path: [idx, ...chunk.path],\n });\n },\n });\n }\n}\n\nexport class PathAppendDecoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(idx: number) {\n super({\n transform(chunk, controller) {\n const {\n path: [idx2, ...path],\n } = chunk;\n\n if (idx !== idx2)\n throw new Error(`Path mismatch: expected ${idx}, got ${idx2}`);\n\n controller.enqueue({\n ...chunk,\n path,\n });\n },\n });\n }\n}\n\nexport class PathMergeEncoder extends TransformStream<\n AssistantStreamChunk,\n AssistantStreamChunk\n> {\n constructor(counter: Counter) {\n const innerCounter = new Counter();\n const mapping = new Map<number, number>();\n super({\n transform(chunk, controller) {\n if (chunk.type === \"part-start\" && chunk.path.length === 0) {\n mapping.set(innerCounter.up(), counter.up());\n }\n\n const [idx, ...path] = chunk.path;\n if (idx === undefined) {\n controller.enqueue(chunk);\n return;\n }\n const mappedIdx = mapping.get(idx);\n if (mappedIdx === undefined) throw new Error(\"Path not found\");\n\n controller.enqueue({\n ...chunk,\n path: [mappedIdx, ...path],\n });\n },\n });\n }\n}\n"],"mappings":";AACA,SAAS,eAAe;AAEjB,IAAM,oBAAN,cAAgC,gBAGrC;AAAA,EACA,YAAY,KAAa;AACvB,UAAM;AAAA,MACJ,UAAU,OAAO,YAAY;AAC3B,mBAAW,QAAQ;AAAA,UACjB,GAAG;AAAA,UACH,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,oBAAN,cAAgC,gBAGrC;AAAA,EACA,YAAY,KAAa;AACvB,UAAM;AAAA,MACJ,UAAU,OAAO,YAAY;AAC3B,cAAM;AAAA,UACJ,MAAM,CAAC,MAAM,GAAG,IAAI;AAAA,QACtB,IAAI;AAEJ,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,2BAA2B,GAAG,SAAS,IAAI,EAAE;AAE/D,mBAAW,QAAQ;AAAA,UACjB,GAAG;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,mBAAN,cAA+B,gBAGpC;AAAA,EACA,YAAY,SAAkB;AAC5B,UAAM,eAAe,IAAI,QAAQ;AACjC,UAAM,UAAU,oBAAI,IAAoB;AACxC,UAAM;AAAA,MACJ,UAAU,OAAO,YAAY;AAC3B,YAAI,MAAM,SAAS,gBAAgB,MAAM,KAAK,WAAW,GAAG;AAC1D,kBAAQ,IAAI,aAAa,GAAG,GAAG,QAAQ,GAAG,CAAC;AAAA,QAC7C;AAEA,cAAM,CAAC,KAAK,GAAG,IAAI,IAAI,MAAM;AAC7B,YAAI,QAAQ,QAAW;AACrB,qBAAW,QAAQ,KAAK;AACxB;AAAA,QACF;AACA,cAAM,YAAY,QAAQ,IAAI,GAAG;AACjC,YAAI,cAAc,OAAW,OAAM,IAAI,MAAM,gBAAgB;AAE7D,mBAAW,QAAQ;AAAA,UACjB,GAAG;AAAA,UACH,MAAM,CAAC,WAAW,GAAG,IAAI;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ReadonlyJSONObject, ReadonlyJSONValue } from "../../utils/json/json-value";
|
|
2
|
+
type TextStatus = {
|
|
3
|
+
type: "running";
|
|
4
|
+
} | {
|
|
5
|
+
type: "complete";
|
|
6
|
+
reason: "stop" | "unknown";
|
|
7
|
+
} | {
|
|
8
|
+
type: "incomplete";
|
|
9
|
+
reason: "cancelled" | "length" | "content-filter" | "other";
|
|
10
|
+
};
|
|
11
|
+
export type TextPart = {
|
|
12
|
+
type: "text";
|
|
13
|
+
text: string;
|
|
14
|
+
status: TextStatus;
|
|
15
|
+
};
|
|
16
|
+
export type ReasoningPart = {
|
|
17
|
+
type: "reasoning";
|
|
18
|
+
text: string;
|
|
19
|
+
status: TextStatus;
|
|
20
|
+
};
|
|
21
|
+
type ToolCallStatus = {
|
|
22
|
+
type: "running";
|
|
23
|
+
isArgsComplete: boolean;
|
|
24
|
+
} | {
|
|
25
|
+
type: "requires-action";
|
|
26
|
+
reason: "tool-call-result";
|
|
27
|
+
} | {
|
|
28
|
+
type: "complete";
|
|
29
|
+
reason: "stop" | "unknown";
|
|
30
|
+
} | {
|
|
31
|
+
type: "incomplete";
|
|
32
|
+
reason: "cancelled" | "length" | "content-filter" | "other";
|
|
33
|
+
};
|
|
34
|
+
export type ToolCallPart = {
|
|
35
|
+
type: "tool-call";
|
|
36
|
+
state: "partial-call" | "call" | "result";
|
|
37
|
+
status: ToolCallStatus;
|
|
38
|
+
toolCallId: string;
|
|
39
|
+
toolName: string;
|
|
40
|
+
argsText: string;
|
|
41
|
+
args: ReadonlyJSONObject;
|
|
42
|
+
artifact?: unknown;
|
|
43
|
+
result?: ReadonlyJSONValue;
|
|
44
|
+
isError?: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type SourcePart = {
|
|
47
|
+
type: "source";
|
|
48
|
+
sourceType: "url";
|
|
49
|
+
id: string;
|
|
50
|
+
url: string;
|
|
51
|
+
title?: string;
|
|
52
|
+
};
|
|
53
|
+
export type FilePart = {
|
|
54
|
+
type: "file";
|
|
55
|
+
data: string;
|
|
56
|
+
mimeType: string;
|
|
57
|
+
};
|
|
58
|
+
export type AssistantMessagePart = TextPart | ReasoningPart | ToolCallPart | SourcePart | FilePart;
|
|
59
|
+
type AssistantMessageStepUsage = {
|
|
60
|
+
promptTokens: number;
|
|
61
|
+
completionTokens: number;
|
|
62
|
+
};
|
|
63
|
+
type AssistantMessageStepMetadata = {
|
|
64
|
+
state: "started";
|
|
65
|
+
messageId: string;
|
|
66
|
+
} | {
|
|
67
|
+
state: "finished";
|
|
68
|
+
messageId: string;
|
|
69
|
+
finishReason: "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
|
|
70
|
+
usage?: AssistantMessageStepUsage;
|
|
71
|
+
isContinued: boolean;
|
|
72
|
+
};
|
|
73
|
+
export type AssistantMessageStatus = {
|
|
74
|
+
type: "running";
|
|
75
|
+
} | {
|
|
76
|
+
type: "requires-action";
|
|
77
|
+
reason: "tool-calls";
|
|
78
|
+
} | {
|
|
79
|
+
type: "complete";
|
|
80
|
+
reason: "stop" | "unknown";
|
|
81
|
+
} | {
|
|
82
|
+
type: "incomplete";
|
|
83
|
+
reason: "cancelled" | "tool-calls" | "length" | "content-filter" | "other" | "error";
|
|
84
|
+
error?: ReadonlyJSONValue;
|
|
85
|
+
};
|
|
86
|
+
export type AssistantMessage = {
|
|
87
|
+
role: "assistant";
|
|
88
|
+
status: AssistantMessageStatus;
|
|
89
|
+
parts: AssistantMessagePart[];
|
|
90
|
+
/**
|
|
91
|
+
* @deprecated Use `parts` instead.
|
|
92
|
+
*/
|
|
93
|
+
content: AssistantMessagePart[];
|
|
94
|
+
metadata: {
|
|
95
|
+
unstable_data: ReadonlyJSONValue[];
|
|
96
|
+
unstable_annotations: ReadonlyJSONValue[];
|
|
97
|
+
steps: AssistantMessageStepMetadata[];
|
|
98
|
+
custom: Record<string, unknown>;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAErC,KAAK,UAAU,GACX;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;CAC7D,CAAC;AAMN,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,KAAK,cAAc,GACf;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;CAC7D,CAAC;AAEN,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,KAAK,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,UAAU,GACV,QAAQ,CAAC;AAEb,KAAK,yBAAyB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,KAAK,4BAA4B,GAC7B;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EACR,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,CAAC;IACd,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,sBAAsB,GAC9B;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;CACtB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EACF,WAAW,GACX,YAAY,GACZ,QAAQ,GACR,gBAAgB,GAChB,OAAO,GACP,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,QAAQ,EAAE;QACR,aAAa,EAAE,iBAAiB,EAAE,CAAC;QACnC,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;QAC1C,KAAK,EAAE,4BAA4B,EAAE,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withPromiseOrValue.d.ts","sourceRoot":"","sources":["../../../src/core/utils/withPromiseOrValue.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAClC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,EACnD,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GACzD,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAe1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/utils/withPromiseOrValue.ts"],"sourcesContent":["export function withPromiseOrValue<T>(\n callback: () => T | PromiseLike<T>,\n thenHandler: (value: T) => PromiseLike<void> | void,\n catchHandler: (error: unknown) => PromiseLike<void> | void,\n): PromiseLike<void> | void {\n try {\n const promiseOrValue = callback();\n if (\n typeof promiseOrValue === \"object\" &&\n promiseOrValue !== null &&\n \"then\" in promiseOrValue\n ) {\n return promiseOrValue.then(thenHandler, catchHandler);\n } else {\n thenHandler(promiseOrValue);\n }\n } catch (e) {\n catchHandler(e);\n }\n}\n"],"mappings":"AAAO,SAAS,mBACd,UACA,aACA,cAC0B;AAC1B,MAAI;AACF,UAAM,iBAAiB,SAAS;AAChC,QACE,OAAO,mBAAmB,YAC1B,mBAAmB,QACnB,UAAU,gBACV;AACA,aAAO,eAAe,KAAK,aAAa,YAAY;AAAA,IACtD,OAAO;AACL,kBAAY,cAAc;AAAA,IAC5B;AAAA,EACF,SAAS,GAAG;AACV,iBAAa,CAAC;AAAA,EAChB;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/utils/withPromiseOrValue.ts"],"sourcesContent":["export function withPromiseOrValue<T>(\n callback: () => T | PromiseLike<T>,\n thenHandler: (value: T) => PromiseLike<void> | void,\n catchHandler: (error: unknown) => PromiseLike<void> | void,\n): PromiseLike<void> | void {\n try {\n const promiseOrValue = callback();\n if (\n typeof promiseOrValue === \"object\" &&\n promiseOrValue !== null &&\n \"then\" in promiseOrValue\n ) {\n return promiseOrValue.then(thenHandler, catchHandler);\n } else {\n thenHandler(promiseOrValue);\n }\n } catch (e) {\n catchHandler(e);\n }\n}\n"],"mappings":";AAAO,SAAS,mBACd,UACA,aACA,cAC0B;AAC1B,MAAI;AACF,UAAM,iBAAiB,SAAS;AAChC,QACE,OAAO,mBAAmB,YAC1B,mBAAmB,QACnB,UAAU,gBACV;AACA,aAAO,eAAe,KAAK,aAAa,YAAY;AAAA,IACtD,OAAO;AACL,kBAAY,cAAc;AAAA,IAC5B;AAAA,EACF,SAAS,GAAG;AACV,iBAAa,CAAC;AAAA,EAChB;AACF;","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./core\";\n"],"mappings":"AAAA,cAAc;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./core\";\n"],"mappings":";AAAA,cAAc;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncIterableStream.d.ts","sourceRoot":"","sources":["../../src/utils/AsyncIterableStream.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAiB1E,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,mBAAmB,CAAC,CAAC,CAAC,CAIxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/AsyncIterableStream.ts"],"sourcesContent":["export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\nasync function* streamGeneratorPolyfill<T>(\n this: ReadableStream<T>,\n): AsyncIterator<T, undefined, unknown> {\n const reader = this.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function asAsyncIterableStream<T>(\n source: ReadableStream<T>,\n): AsyncIterableStream<T> {\n (source as AsyncIterableStream<T>)[Symbol.asyncIterator] ??=\n streamGeneratorPolyfill;\n return source as AsyncIterableStream<T>;\n}\n"],"mappings":"AAEA,gBAAgB,0BAEwB;AACtC,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AACV,YAAM;AAAA,IACR;AAAA,EACF,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;AAEO,SAAS,sBACd,QACwB;AACxB,EAAC,OAAkC,OAAO,aAAa,MACrD;AACF,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/AsyncIterableStream.ts"],"sourcesContent":["export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\nasync function* streamGeneratorPolyfill<T>(\n this: ReadableStream<T>,\n): AsyncIterator<T, undefined, unknown> {\n const reader = this.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function asAsyncIterableStream<T>(\n source: ReadableStream<T>,\n): AsyncIterableStream<T> {\n (source as AsyncIterableStream<T>)[Symbol.asyncIterator] ??=\n streamGeneratorPolyfill;\n return source as AsyncIterableStream<T>;\n}\n"],"mappings":";AAEA,gBAAgB,0BAEwB;AACtC,QAAM,SAAS,KAAK,UAAU;AAC9B,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AACV,YAAM;AAAA,IACR;AAAA,EACF,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;AAEO,SAAS,sBACd,QACwB;AACxB,EAAC,OAAkC,OAAO,aAAa,MACrD;AACF,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-json.d.ts","sourceRoot":"","sources":["../../../src/utils/json/fix-json.ts"],"names":[],"mappings":"AA+DA,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAwazD"}
|