assistant-stream 0.3.26 → 0.3.28
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/core/AssistantStream.d.ts.map +1 -1
- package/dist/core/AssistantStreamChunk.d.ts +3 -3
- package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
- package/dist/core/accumulators/AssistantMessageStream.js +0 -1
- package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.js +65 -28
- package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
- package/dist/core/converters/toGenericMessages.js.map +1 -1
- package/dist/core/gorp/GorpStreamAccumulator.d.ts +15 -0
- package/dist/core/gorp/GorpStreamAccumulator.d.ts.map +1 -0
- package/dist/core/{object/ObjectStreamAccumulator.js → gorp/GorpStreamAccumulator.js} +11 -9
- package/dist/core/gorp/GorpStreamAccumulator.js.map +1 -0
- package/dist/core/gorp/GorpStreamDeltaTracker.d.ts +17 -0
- package/dist/core/gorp/GorpStreamDeltaTracker.d.ts.map +1 -0
- package/dist/core/gorp/GorpStreamDeltaTracker.js +38 -0
- package/dist/core/gorp/GorpStreamDeltaTracker.js.map +1 -0
- package/dist/core/gorp/GorpStreamResponse.d.ts +16 -0
- package/dist/core/gorp/GorpStreamResponse.d.ts.map +1 -0
- package/dist/core/gorp/GorpStreamResponse.js +51 -0
- package/dist/core/gorp/GorpStreamResponse.js.map +1 -0
- package/dist/core/gorp/changeTree.d.ts +16 -0
- package/dist/core/gorp/changeTree.d.ts.map +1 -0
- package/dist/core/gorp/changeTree.js +77 -0
- package/dist/core/gorp/changeTree.js.map +1 -0
- package/dist/core/gorp/createGorpStream.d.ts +16 -0
- package/dist/core/gorp/createGorpStream.d.ts.map +1 -0
- package/dist/core/{object/createObjectStream.js → gorp/createGorpStream.js} +13 -8
- package/dist/core/gorp/createGorpStream.js.map +1 -0
- package/dist/core/{object → gorp}/types.d.ts +6 -5
- package/dist/core/gorp/types.d.ts.map +1 -0
- package/dist/core/modules/assistant-stream.d.ts +5 -4
- package/dist/core/modules/assistant-stream.d.ts.map +1 -1
- package/dist/core/modules/assistant-stream.js +10 -6
- package/dist/core/modules/assistant-stream.js.map +1 -1
- package/dist/core/modules/tool-call.d.ts.map +1 -1
- package/dist/core/modules/tool-call.js +3 -3
- package/dist/core/modules/tool-call.js.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.js +91 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.js +48 -48
- package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.d.ts +25 -24
- package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.js +22 -23
- package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
- package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/serialization.js +14 -2
- package/dist/core/serialization/data-stream/serialization.js.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js +12 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
- package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
- package/dist/core/tool/ToolCallReader.js.map +1 -1
- package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
- package/dist/core/tool/ToolExecutionStream.js +9 -1
- package/dist/core/tool/ToolExecutionStream.js.map +1 -1
- package/dist/core/tool/ToolResponse.d.ts.map +1 -1
- package/dist/core/tool/tool-types.d.ts +6 -0
- package/dist/core/tool/tool-types.d.ts.map +1 -1
- package/dist/core/tool/toolResultStream.d.ts.map +1 -1
- package/dist/core/tool/toolResultStream.js +7 -2
- package/dist/core/tool/toolResultStream.js.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/SSE.d.ts.map +1 -1
- package/dist/core/utils/stream/SSE.js +11 -2
- package/dist/core/utils/stream/SSE.js.map +1 -1
- package/dist/core/utils/stream/SSEEventDecoder.d.ts.map +1 -1
- package/dist/core/utils/stream/merge.d.ts +2 -0
- package/dist/core/utils/stream/merge.d.ts.map +1 -1
- package/dist/core/utils/stream/merge.js +27 -8
- package/dist/core/utils/stream/merge.js.map +1 -1
- package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
- package/dist/index.d.ts +25 -4
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -0
- package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
- package/dist/resumable/ResumableStreamContext.js +12 -5
- package/dist/resumable/ResumableStreamContext.js.map +1 -1
- package/dist/resumable/errors.d.ts.map +1 -1
- package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
- package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
- package/dist/utils/AsyncIterableStream.js +18 -3
- package/dist/utils/AsyncIterableStream.js.map +1 -1
- package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/core/AssistantStreamChunk.ts +3 -3
- package/src/core/accumulators/AssistantMessageStream.ts +3 -1
- package/src/core/accumulators/assistant-message-accumulator.test.ts +374 -1
- package/src/core/accumulators/assistant-message-accumulator.ts +75 -26
- package/src/core/converters/toGenericMessages.test.ts +3 -39
- package/src/core/{object/ObjectStream.test.ts → gorp/GorpStream.test.ts} +86 -25
- package/src/core/gorp/GorpStreamAccumulator.test.ts +28 -0
- package/src/core/{object/ObjectStreamAccumulator.ts → gorp/GorpStreamAccumulator.ts} +13 -15
- package/src/core/gorp/GorpStreamDeltaTracker.test.ts +212 -0
- package/src/core/gorp/GorpStreamDeltaTracker.ts +55 -0
- package/src/core/{object/ObjectStreamResponse.test.ts → gorp/GorpStreamResponse.test.ts} +6 -6
- package/src/core/gorp/GorpStreamResponse.ts +88 -0
- package/src/core/gorp/changeTree.ts +96 -0
- package/src/core/{object/createObjectStream.ts → gorp/createGorpStream.ts} +23 -17
- package/src/core/{object → gorp}/types.ts +5 -3
- package/src/core/modules/assistant-stream.test.ts +154 -2
- package/src/core/modules/assistant-stream.ts +16 -6
- package/src/core/modules/tool-call.test.ts +67 -0
- package/src/core/modules/tool-call.ts +7 -4
- package/src/core/serialization/assistant-transport/AssistantTransport.test.ts +174 -1
- package/src/core/serialization/assistant-transport/AssistantTransport.ts +77 -1
- package/src/core/serialization/data-stream/DataStream.ts +1 -1
- package/src/core/serialization/data-stream/chunk-types.ts +26 -24
- package/src/core/serialization/data-stream/serialization.test.ts +133 -0
- package/src/core/serialization/data-stream/serialization.ts +20 -2
- package/src/core/serialization/ui-message-stream/UIMessageStream.test.ts +135 -0
- package/src/core/serialization/ui-message-stream/UIMessageStream.ts +21 -1
- package/src/core/tool/ToolCallReader.ts +5 -1
- package/src/core/tool/ToolExecutionStream.ts +10 -0
- package/src/core/tool/tool-types.ts +7 -0
- package/src/core/tool/toolResultStream.test.ts +50 -0
- package/src/core/tool/toolResultStream.ts +7 -2
- package/src/core/utils/stream/SSE.test.ts +97 -0
- package/src/core/utils/stream/SSE.ts +13 -2
- package/src/core/utils/stream/merge.ts +31 -9
- package/src/gorp.test.ts +32 -0
- package/src/index.ts +21 -6
- package/src/resumable/ResumableStreamContext.test.ts +116 -1
- package/src/resumable/ResumableStreamContext.ts +32 -5
- package/src/resumable/createResumableAssistantStreamResponse.test.ts +1 -25
- package/src/utils/AsyncIterableStream.test.ts +61 -0
- package/src/utils/AsyncIterableStream.ts +18 -3
- package/dist/core/object/ObjectStreamAccumulator.d.ts +0 -15
- package/dist/core/object/ObjectStreamAccumulator.d.ts.map +0 -1
- package/dist/core/object/ObjectStreamAccumulator.js.map +0 -1
- package/dist/core/object/ObjectStreamResponse.d.ts +0 -16
- package/dist/core/object/ObjectStreamResponse.d.ts.map +0 -1
- package/dist/core/object/ObjectStreamResponse.js +0 -57
- package/dist/core/object/ObjectStreamResponse.js.map +0 -1
- package/dist/core/object/createObjectStream.d.ts +0 -16
- package/dist/core/object/createObjectStream.d.ts.map +0 -1
- package/dist/core/object/createObjectStream.js.map +0 -1
- package/dist/core/object/types.d.ts.map +0 -1
- package/src/core/accumulators/TimingTracker.test.ts +0 -100
- package/src/core/object/ObjectStreamResponse.ts +0 -114
- /package/dist/core/{object → gorp}/types.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","names":[],"sources":["../../../../src/core/utils/stream/merge.ts"],"sourcesContent":["import type { 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 assistant-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
|
|
1
|
+
{"version":3,"file":"merge.js","names":[],"sources":["../../../../src/core/utils/stream/merge.ts"],"sourcesContent":["import type { 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 cancelled = false;\n let errored = false;\n let controller: ReadableStreamDefaultController<AssistantStreamChunk>;\n let currentPull: ReturnType<typeof promiseWithResolvers<void>> | undefined;\n\n const cancelAllReaders = () => {\n list.forEach((item) => {\n void item.reader.cancel().catch(() => undefined);\n });\n list.length = 0;\n };\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 assistant-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 (cancelled || errored) return;\n\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 if (cancelled || errored) return;\n\n errored = true;\n console.error(e);\n cancelAllReaders();\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 cancelled = true;\n cancelAllReaders();\n currentPull?.resolve();\n currentPull = undefined;\n },\n });\n\n return {\n readable,\n isSealed() {\n return sealed;\n },\n isCancelled() {\n return cancelled;\n },\n isErrored() {\n return errored;\n },\n seal() {\n if (cancelled || errored) return;\n sealed = true;\n if (list.length === 0) controller.close();\n },\n addStream(stream: ReadableStream<AssistantStreamChunk>) {\n if (cancelled || errored) {\n void stream.cancel().catch(() => undefined);\n return;\n }\n\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":";;AAQA,MAAa,0BAA0B;CACrC,MAAM,OAA0B,CAAC;CACjC,IAAI,SAAS;CACb,IAAI,YAAY;CAChB,IAAI,UAAU;CACd,IAAI;CACJ,IAAI;CAEJ,MAAM,yBAAyB;EAC7B,KAAK,SAAS,SAAS;GACrB,KAAU,OAAO,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;EACjD,CAAC;EACD,KAAK,SAAS;CAChB;CAEA,MAAM,cAAc,SAA0B;EAC5C,IAAI,CAAC,KAAK,SAMR,KAAK,UAAU,KAAK,OACjB,KAAK,CAAC,CACN,MAAM,EAAE,MAAM,YAAY;GACzB,KAAK,UAAU,KAAA;GACf,IAAI,aAAa,SAAS;GAE1B,IAAI,MAAM;IACR,KAAK,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC;IACjC,IAAI,UAAU,KAAK,WAAW,GAC5B,WAAW,MAAM;GAErB,OACE,WAAW,QAAQ,KAAK;GAG1B,aAAa,QAAQ;GACrB,cAAc,KAAA;EAChB,CAAC,CAAC,CACD,OAAO,MAAM;GACZ,IAAI,aAAa,SAAS;GAE1B,UAAU;GACV,QAAQ,MAAM,CAAC;GACf,iBAAiB;GAEjB,WAAW,MAAM,CAAC;GAElB,aAAa,OAAO,CAAC;GACrB,cAAc,KAAA;EAChB,CAAC;CAEP;CAsBA,OAAO;EACL,UAAA,IArBmB,eAAqC;GACxD,MAAM,GAAG;IACP,aAAa;GACf;GACA,OAAO;IACL,cAAc,qBAAqB;IACnC,KAAK,SAAS,SAAS;KACrB,WAAW,IAAI;IACjB,CAAC;IAED,OAAO,YAAY;GACrB;GACA,SAAS;IACP,YAAY;IACZ,iBAAiB;IACjB,aAAa,QAAQ;IACrB,cAAc,KAAA;GAChB;EACF,CAGS;EACP,WAAW;GACT,OAAO;EACT;EACA,cAAc;GACZ,OAAO;EACT;EACA,YAAY;GACV,OAAO;EACT;EACA,OAAO;GACL,IAAI,aAAa,SAAS;GAC1B,SAAS;GACT,IAAI,KAAK,WAAW,GAAG,WAAW,MAAM;EAC1C;EACA,UAAU,QAA8C;GACtD,IAAI,aAAa,SAAS;IACxB,OAAY,OAAO,CAAC,CAAC,YAAY,KAAA,CAAS;IAC1C;GACF;GAEA,IAAI,QACF,MAAM,IAAI,MACR,wDACF;GAEF,MAAM,OAAO,EAAE,QAAQ,OAAO,UAAU,EAAE;GAC1C,KAAK,KAAK,IAAI;GACd,WAAW,IAAI;EACjB;EACA,QAAQ,OAA6B;GACnC,KAAK,UACH,IAAI,eAAe,EACjB,MAAM,GAAG;IACP,EAAE,QAAQ,KAAK;IACf,EAAE,MAAM;GACV,EACF,CAAC,CACH;EACF;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-utils.d.ts","names":[],"sources":["../../../../src/core/utils/stream/path-utils.ts"],"mappings":";;;cAGa,0BAA0B,gBACrC,sBACA;
|
|
1
|
+
{"version":3,"file":"path-utils.d.ts","names":[],"sources":["../../../../src/core/utils/stream/path-utils.ts"],"mappings":";;;cAGa,0BAA0B,gBACrC,sBACA;EAEY,YAAA;;cAYD,0BAA0B,gBACrC,sBACA;EAEY,YAAA;;cAmBD,yBAAyB,gBACpC,sBACA;EAEY,YAAA,SAAS"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
+
import { ReadonlyJSONValue } from "./utils/json/json-value.js";
|
|
1
2
|
import { TextStreamController } from "./core/modules/text.js";
|
|
2
3
|
import { McpServerConfig, ProviderOptions, Tool, ToolCallReader, ToolDeclaration, ToolModelContentPart, ToolModelOutputFunction } from "./core/tool/tool-types.js";
|
|
3
4
|
import { ToolResponse, ToolResponseLike } from "./core/tool/ToolResponse.js";
|
|
4
5
|
import { ToolCallStreamController } from "./core/modules/tool-call.js";
|
|
5
6
|
import { AssistantMessage, AssistantMessageTiming, DataPart, ToolCallTiming } from "./core/utils/types.js";
|
|
6
7
|
import { AssistantStreamController, createAssistantStream, createAssistantStreamController, createAssistantStreamResponse } from "./core/modules/assistant-stream.js";
|
|
7
|
-
import
|
|
8
|
+
import "./utils.js";
|
|
9
|
+
import { AssistantTransportStateOperation, GorpStreamChunk, GorpStreamOperation } from "./core/gorp/types.js";
|
|
8
10
|
import { AssistantStreamChunk } from "./core/AssistantStreamChunk.js";
|
|
9
11
|
import { AssistantStream } from "./core/AssistantStream.js";
|
|
10
12
|
import { AssistantMessageStream } from "./core/accumulators/AssistantMessageStream.js";
|
|
11
13
|
import { AssistantMessageAccumulator, createInitialMessage } from "./core/accumulators/assistant-message-accumulator.js";
|
|
12
14
|
import { GenericAssistantMessage, GenericFilePart, GenericMessage, GenericSystemMessage, GenericTextPart, GenericToolCallPart, GenericToolMessage, GenericToolResultPart, GenericUserMessage, toGenericMessages } from "./core/converters/toGenericMessages.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
+
import { GorpStreamDeltaTracker } from "./core/gorp/GorpStreamDeltaTracker.js";
|
|
16
|
+
import { GorpStreamResponse } from "./core/gorp/GorpStreamResponse.js";
|
|
15
17
|
import { PlainTextDecoder, PlainTextEncoder } from "./core/serialization/PlainText.js";
|
|
16
18
|
import { AssistantTransportDecoder, AssistantTransportEncoder } from "./core/serialization/assistant-transport/AssistantTransport.js";
|
|
17
19
|
import { DataStreamDecoder, DataStreamEncoder } from "./core/serialization/data-stream/DataStream.js";
|
|
@@ -20,4 +22,23 @@ import { UIMessageStreamDecoder, UIMessageStreamDecoderOptions } from "./core/se
|
|
|
20
22
|
import { ToolExecutionStream } from "./core/tool/ToolExecutionStream.js";
|
|
21
23
|
import { ToToolsJSONSchemaOptions, ToolJSONSchema, toJSONSchema, toPartialJSONSchema, toToolsJSONSchema } from "./core/tool/schema-utils.js";
|
|
22
24
|
import { ToolResultStreamOptions, toolResultStream, unstable_runPendingTools } from "./core/tool/toolResultStream.js";
|
|
23
|
-
|
|
25
|
+
//#region src/index.d.ts
|
|
26
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
27
|
+
declare const createObjectStream: ({ execute, defaultValue }: {
|
|
28
|
+
execute: (controller: {
|
|
29
|
+
readonly abortSignal: AbortSignal;
|
|
30
|
+
enqueue(operations: readonly GorpStreamOperation[]): void;
|
|
31
|
+
}) => void | PromiseLike<void>;
|
|
32
|
+
defaultValue?: ReadonlyJSONValue;
|
|
33
|
+
}) => ReadableStream<GorpStreamChunk>;
|
|
34
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
35
|
+
declare const ObjectStreamResponse: typeof GorpStreamResponse;
|
|
36
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
37
|
+
type ObjectStreamResponse = GorpStreamResponse;
|
|
38
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
39
|
+
declare const fromObjectStreamResponse: (response: Response) => ReadableStream<GorpStreamChunk>;
|
|
40
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
41
|
+
type ObjectStreamChunk = GorpStreamChunk;
|
|
42
|
+
//#endregion
|
|
43
|
+
export { type AssistantMessage, AssistantMessageAccumulator, AssistantMessageStream, type AssistantMessageTiming, AssistantStream, type AssistantStreamChunk, type AssistantStreamController, AssistantTransportDecoder, GorpStreamDeltaTracker as AssistantTransportDeltaTracker, AssistantTransportEncoder, type AssistantTransportStateOperation, type DataPart, DataStreamDecoder, DataStreamEncoder, type GenericAssistantMessage, type GenericFilePart, type GenericMessage, type GenericSystemMessage, type GenericTextPart, type GenericToolCallPart, type GenericToolMessage, type GenericToolResultPart, type GenericUserMessage, type McpServerConfig, ObjectStreamChunk, ObjectStreamResponse, PlainTextDecoder, PlainTextEncoder, type ProviderOptions, type TextStreamController, type ToToolsJSONSchemaOptions, type Tool, type ToolCallReader, type ToolCallStreamController, type ToolCallTiming, type ToolDeclaration, ToolExecutionStream, type ToolJSONSchema, type ToolModelContentPart, type ToolModelOutputFunction, ToolResponse, type ToolResponseLike, type ToolResultStreamOptions, type UIMessageStreamChunk, type UIMessageStreamDataChunk, UIMessageStreamDecoder, type UIMessageStreamDecoderOptions, createAssistantStream, createAssistantStreamController, createAssistantStreamResponse, createObjectStream, fromObjectStreamResponse, toGenericMessages, toJSONSchema, toPartialJSONSchema, toToolsJSONSchema, createInitialMessage as unstable_createInitialMessage, unstable_runPendingTools, toolResultStream as unstable_toolResultStream };
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;cA4Ea,uBAAkB,SAAA;;;;;;MAAmB,eAAA;;cAErC,6BAAoB;;KAErB,uBAAuB;;cAEtB,2BAAwB,UAAA,aAAA,eAAA;;KAEzB,oBAAoB"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,18 @@ import { ToolResponse } from "./core/tool/ToolResponse.js";
|
|
|
10
10
|
import { ToolExecutionStream } from "./core/tool/ToolExecutionStream.js";
|
|
11
11
|
import { toolResultStream, unstable_runPendingTools } from "./core/tool/toolResultStream.js";
|
|
12
12
|
import { toJSONSchema, toPartialJSONSchema, toToolsJSONSchema } from "./core/tool/schema-utils.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
13
|
+
import { createGorpStream } from "./core/gorp/createGorpStream.js";
|
|
14
|
+
import { GorpStreamResponse, fromGorpStreamResponse } from "./core/gorp/GorpStreamResponse.js";
|
|
15
|
+
import { GorpStreamDeltaTracker } from "./core/gorp/GorpStreamDeltaTracker.js";
|
|
15
16
|
import { toGenericMessages } from "./core/converters/toGenericMessages.js";
|
|
16
|
-
|
|
17
|
+
//#region src/index.ts
|
|
18
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
19
|
+
const createObjectStream = createGorpStream;
|
|
20
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
21
|
+
const ObjectStreamResponse = GorpStreamResponse;
|
|
22
|
+
/** @deprecated Use the assistant-transport surface instead. */
|
|
23
|
+
const fromObjectStreamResponse = fromGorpStreamResponse;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { AssistantMessageAccumulator, AssistantMessageStream, AssistantStream, AssistantTransportDecoder, GorpStreamDeltaTracker as AssistantTransportDeltaTracker, AssistantTransportEncoder, DataStreamDecoder, DataStreamEncoder, ObjectStreamResponse, PlainTextDecoder, PlainTextEncoder, ToolExecutionStream, ToolResponse, UIMessageStreamDecoder, createAssistantStream, createAssistantStreamController, createAssistantStreamResponse, createObjectStream, fromObjectStreamResponse, toGenericMessages, toJSONSchema, toPartialJSONSchema, toToolsJSONSchema, createInitialMessage as unstable_createInitialMessage, unstable_runPendingTools, toolResultStream as unstable_toolResultStream };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export {\n createAssistantStream,\n createAssistantStreamResponse,\n createAssistantStreamController,\n} from \"./core/modules/assistant-stream\";\nexport {\n AssistantMessageAccumulator,\n createInitialMessage as unstable_createInitialMessage,\n} from \"./core/accumulators/assistant-message-accumulator\";\nexport { AssistantStream } from \"./core/AssistantStream\";\nexport type { AssistantStreamController } from \"./core/modules/assistant-stream\";\nexport type { AssistantStreamChunk } from \"./core/AssistantStreamChunk\";\nexport {\n DataStreamDecoder,\n DataStreamEncoder,\n} from \"./core/serialization/data-stream/DataStream\";\nexport {\n PlainTextDecoder,\n PlainTextEncoder,\n} from \"./core/serialization/PlainText\";\nexport {\n AssistantTransportDecoder,\n AssistantTransportEncoder,\n} from \"./core/serialization/assistant-transport/AssistantTransport\";\nexport {\n UIMessageStreamDecoder,\n type UIMessageStreamChunk,\n type UIMessageStreamDataChunk,\n type UIMessageStreamDecoderOptions,\n} from \"./core/serialization/ui-message-stream/UIMessageStream\";\nexport { AssistantMessageStream } from \"./core/accumulators/AssistantMessageStream\";\nexport type {\n AssistantMessage,\n AssistantMessageTiming,\n DataPart,\n ToolCallTiming,\n} from \"./core/utils/types\";\n\nexport type {\n Tool,\n ToolDeclaration,\n McpServerConfig,\n ToolModelContentPart,\n ToolModelOutputFunction,\n} from \"./core/tool/tool-types\";\nexport { ToolResponse, type ToolResponseLike } from \"./core/tool/ToolResponse\";\nexport { ToolExecutionStream } from \"./core/tool/ToolExecutionStream\";\nexport type { ProviderOptions, ToolCallReader } from \"./core/tool/tool-types\";\nexport {\n toolResultStream as unstable_toolResultStream,\n unstable_runPendingTools,\n type ToolResultStreamOptions,\n} from \"./core/tool/toolResultStream\";\nexport {\n toJSONSchema,\n toPartialJSONSchema,\n toToolsJSONSchema,\n type ToolJSONSchema,\n type ToToolsJSONSchemaOptions,\n} from \"./core/tool/schema-utils\";\n\nexport type { TextStreamController } from \"./core/modules/text\";\nexport type { ToolCallStreamController } from \"./core/modules/tool-call\";\n\nimport { createGorpStream } from \"./core/gorp/createGorpStream\";\nimport {\n GorpStreamResponse,\n fromGorpStreamResponse,\n} from \"./core/gorp/GorpStreamResponse\";\nimport type { GorpStreamChunk } from \"./core/gorp/types\";\nimport { GorpStreamDeltaTracker } from \"./core/gorp/GorpStreamDeltaTracker\";\n\nexport { GorpStreamDeltaTracker as AssistantTransportDeltaTracker };\nexport type { AssistantTransportStateOperation } from \"./core/gorp/types\";\n\n/** @deprecated Use the assistant-transport surface instead. */\nexport const createObjectStream = createGorpStream;\n/** @deprecated Use the assistant-transport surface instead. */\nexport const ObjectStreamResponse = GorpStreamResponse;\n/** @deprecated Use the assistant-transport surface instead. */\nexport type ObjectStreamResponse = GorpStreamResponse;\n/** @deprecated Use the assistant-transport surface instead. */\nexport const fromObjectStreamResponse = fromGorpStreamResponse;\n/** @deprecated Use the assistant-transport surface instead. */\nexport type ObjectStreamChunk = GorpStreamChunk;\n\nexport {\n toGenericMessages,\n type GenericMessage,\n type GenericSystemMessage,\n type GenericUserMessage,\n type GenericAssistantMessage,\n type GenericToolMessage,\n type GenericTextPart,\n type GenericFilePart,\n type GenericToolCallPart,\n type GenericToolResultPart,\n} from \"./core/converters/toGenericMessages\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AA4EA,MAAa,qBAAqB;;AAElC,MAAa,uBAAuB;;AAIpC,MAAa,2BAA2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResumableStreamContext.d.ts","names":[],"sources":["../../src/resumable/ResumableStreamContext.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ResumableStreamContext.d.ts","names":[],"sources":["../../src/resumable/ResumableStreamContext.ts"],"mappings":";;KAQY;WACD,OAAO;WACP;;;;;;WAMA,aAAa,SAAS;WACtB,aAAa,kBAAkB,MAAM;WACrC,YAAY,kBAAkB;WAC9B,cACP,kBACA,0BACA;WAEO,WAAW,kBAAkB;;UAGvB;;EAEf,IACE,kBACA,kBAAkB,eAAe,cAChC,QAAQ,eAAe;;EAG1B,OAAO,mBAAmB,QAAQ,eAAe;;EAGjD,cAAc,mBAAmB,QAAQ,eAAe;EAExD,OAAO,mBAAmB,QAAQ;EAElC,OAAO,mBAAmB;;iBAkBZ,6BACd,SAAS,gCACR"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
+
import { withPromiseOrValue } from "../core/utils/withPromiseOrValue.js";
|
|
1
2
|
import { ResumableStreamError } from "./errors.js";
|
|
2
3
|
//#region src/resumable/ResumableStreamContext.ts
|
|
4
|
+
const invokeObservabilityHook = (name, hook, ...args) => {
|
|
5
|
+
if (!hook) return;
|
|
6
|
+
withPromiseOrValue(() => hook(...args), () => {}, (error) => {
|
|
7
|
+
console.error(`resumable stream ${name} hook failed:`, error);
|
|
8
|
+
});
|
|
9
|
+
};
|
|
3
10
|
function createResumableStreamContext(options) {
|
|
4
11
|
const { store, waitUntil, onAcquire, onAppend, onFinalize, onError } = options;
|
|
5
12
|
const acquireOptions = options.ttlMs !== void 0 ? { ttlMs: options.ttlMs } : void 0;
|
|
6
13
|
return {
|
|
7
14
|
async run(streamId, makeStream) {
|
|
8
15
|
const role = await store.acquire(streamId, acquireOptions);
|
|
9
|
-
onAcquire
|
|
16
|
+
invokeObservabilityHook("onAcquire", onAcquire, streamId, role);
|
|
10
17
|
if (role === "producer") startProducerTask(store, streamId, makeStream, {
|
|
11
18
|
waitUntil,
|
|
12
19
|
onAppend,
|
|
@@ -42,13 +49,13 @@ function startProducerTask(store, streamId, makeStream, hooks) {
|
|
|
42
49
|
const { done, value } = await reader.read();
|
|
43
50
|
if (done) break;
|
|
44
51
|
await store.append(streamId, value);
|
|
45
|
-
onAppend
|
|
52
|
+
invokeObservabilityHook("onAppend", onAppend, streamId, value.byteLength);
|
|
46
53
|
}
|
|
47
54
|
await store.finalize(streamId, "done");
|
|
48
|
-
onFinalize
|
|
55
|
+
invokeObservabilityHook("onFinalize", onFinalize, streamId, "done");
|
|
49
56
|
} catch (err) {
|
|
50
57
|
cancelled = true;
|
|
51
|
-
onError
|
|
58
|
+
invokeObservabilityHook("onError", onError, streamId, err);
|
|
52
59
|
const message = err instanceof Error ? err.message : String(err);
|
|
53
60
|
try {
|
|
54
61
|
await reader?.cancel(err);
|
|
@@ -57,7 +64,7 @@ function startProducerTask(store, streamId, makeStream, hooks) {
|
|
|
57
64
|
}
|
|
58
65
|
try {
|
|
59
66
|
await store.finalize(streamId, "error", message);
|
|
60
|
-
onFinalize
|
|
67
|
+
invokeObservabilityHook("onFinalize", onFinalize, streamId, "error", message);
|
|
61
68
|
} catch (finalizeErr) {
|
|
62
69
|
console.error("resumable stream finalize failed:", finalizeErr);
|
|
63
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResumableStreamContext.js","names":[],"sources":["../../src/resumable/ResumableStreamContext.ts"],"sourcesContent":["import { ResumableStreamError } from \"./errors\";\nimport type {\n ResumableStreamRole,\n ResumableStreamStatus,\n ResumableStreamStore,\n} from \"./types\";\n\nexport type ResumableStreamContextOptions = {\n readonly store: ResumableStreamStore;\n readonly ttlMs?: number;\n /**\n * Required on serverless runtimes that terminate background work when the\n * request handler returns (Vercel, Cloudflare). Pass `after` from\n * `next/server` so the producer task outlives the response.\n */\n readonly waitUntil?: (promise: Promise<unknown>) => void;\n readonly onAcquire?: (streamId: string, role: ResumableStreamRole) => void;\n readonly onAppend?: (streamId: string, byteLength: number) => void;\n readonly onFinalize?: (\n streamId: string,\n status: \"done\" | \"error\",\n error?: string,\n ) => void;\n readonly onError?: (streamId: string, error: unknown) => void;\n};\n\nexport interface ResumableStreamContext {\n /** Producer or consumer entrypoint. Atomically elects the role. */\n run(\n streamId: string,\n makeStream: () => ReadableStream<Uint8Array>,\n ): Promise<ReadableStream<Uint8Array>>;\n\n /** Returns `null` when the stream does not exist. */\n resume(streamId: string): Promise<ReadableStream<Uint8Array> | null>;\n\n /** Throws `ResumableStreamError(\"missing\")` when the stream does not exist. */\n requireResume(streamId: string): Promise<ReadableStream<Uint8Array>>;\n\n status(streamId: string): Promise<ResumableStreamStatus>;\n\n delete(streamId: string): Promise<void>;\n}\n\nexport function createResumableStreamContext(\n options: ResumableStreamContextOptions,\n): ResumableStreamContext {\n const { store, waitUntil, onAcquire, onAppend, onFinalize, onError } =\n options;\n const acquireOptions =\n options.ttlMs !== undefined ? { ttlMs: options.ttlMs } : undefined;\n\n return {\n async run(streamId, makeStream) {\n const role = await store.acquire(streamId, acquireOptions);\n onAcquire
|
|
1
|
+
{"version":3,"file":"ResumableStreamContext.js","names":[],"sources":["../../src/resumable/ResumableStreamContext.ts"],"sourcesContent":["import { ResumableStreamError } from \"./errors\";\nimport { withPromiseOrValue } from \"../core/utils/withPromiseOrValue\";\nimport type {\n ResumableStreamRole,\n ResumableStreamStatus,\n ResumableStreamStore,\n} from \"./types\";\n\nexport type ResumableStreamContextOptions = {\n readonly store: ResumableStreamStore;\n readonly ttlMs?: number;\n /**\n * Required on serverless runtimes that terminate background work when the\n * request handler returns (Vercel, Cloudflare). Pass `after` from\n * `next/server` so the producer task outlives the response.\n */\n readonly waitUntil?: (promise: Promise<unknown>) => void;\n readonly onAcquire?: (streamId: string, role: ResumableStreamRole) => void;\n readonly onAppend?: (streamId: string, byteLength: number) => void;\n readonly onFinalize?: (\n streamId: string,\n status: \"done\" | \"error\",\n error?: string,\n ) => void;\n readonly onError?: (streamId: string, error: unknown) => void;\n};\n\nexport interface ResumableStreamContext {\n /** Producer or consumer entrypoint. Atomically elects the role. */\n run(\n streamId: string,\n makeStream: () => ReadableStream<Uint8Array>,\n ): Promise<ReadableStream<Uint8Array>>;\n\n /** Returns `null` when the stream does not exist. */\n resume(streamId: string): Promise<ReadableStream<Uint8Array> | null>;\n\n /** Throws `ResumableStreamError(\"missing\")` when the stream does not exist. */\n requireResume(streamId: string): Promise<ReadableStream<Uint8Array>>;\n\n status(streamId: string): Promise<ResumableStreamStatus>;\n\n delete(streamId: string): Promise<void>;\n}\n\nconst invokeObservabilityHook = <TArgs extends unknown[]>(\n name: string,\n hook: ((...args: TArgs) => void) | undefined,\n ...args: TArgs\n): void => {\n if (!hook) return;\n void withPromiseOrValue(\n () => hook(...args),\n () => {},\n (error) => {\n console.error(`resumable stream ${name} hook failed:`, error);\n },\n );\n};\n\nexport function createResumableStreamContext(\n options: ResumableStreamContextOptions,\n): ResumableStreamContext {\n const { store, waitUntil, onAcquire, onAppend, onFinalize, onError } =\n options;\n const acquireOptions =\n options.ttlMs !== undefined ? { ttlMs: options.ttlMs } : undefined;\n\n return {\n async run(streamId, makeStream) {\n const role = await store.acquire(streamId, acquireOptions);\n invokeObservabilityHook(\"onAcquire\", onAcquire, streamId, role);\n if (role === \"producer\") {\n startProducerTask(store, streamId, makeStream, {\n waitUntil,\n onAppend,\n onFinalize,\n onError,\n });\n }\n return readFromStore(store, streamId);\n },\n\n async resume(streamId) {\n const status = await store.status(streamId);\n if (status === \"missing\") return null;\n return readFromStore(store, streamId);\n },\n\n async requireResume(streamId) {\n const status = await store.status(streamId);\n if (status === \"missing\") {\n throw new ResumableStreamError(\n \"missing\",\n `resumable stream not found: ${streamId}`,\n );\n }\n return readFromStore(store, streamId);\n },\n\n async status(streamId) {\n return store.status(streamId);\n },\n\n async delete(streamId) {\n await store.delete(streamId);\n },\n };\n}\n\ntype ProducerHooks = {\n readonly waitUntil: ((promise: Promise<unknown>) => void) | undefined;\n readonly onAppend:\n | ((streamId: string, byteLength: number) => void)\n | undefined;\n readonly onFinalize:\n | ((streamId: string, status: \"done\" | \"error\", error?: string) => void)\n | undefined;\n readonly onError: ((streamId: string, error: unknown) => void) | undefined;\n};\n\nfunction startProducerTask(\n store: ResumableStreamStore,\n streamId: string,\n makeStream: () => ReadableStream<Uint8Array>,\n hooks: ProducerHooks,\n): void {\n const { waitUntil, onAppend, onFinalize, onError } = hooks;\n const task = (async () => {\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n let cancelled = false;\n try {\n reader = makeStream().getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n await store.append(streamId, value);\n invokeObservabilityHook(\n \"onAppend\",\n onAppend,\n streamId,\n value.byteLength,\n );\n }\n await store.finalize(streamId, \"done\");\n invokeObservabilityHook(\"onFinalize\", onFinalize, streamId, \"done\");\n } catch (err) {\n cancelled = true;\n invokeObservabilityHook(\"onError\", onError, streamId, err);\n const message = err instanceof Error ? err.message : String(err);\n try {\n await reader?.cancel(err);\n } catch (cancelErr) {\n console.error(\"resumable stream reader cancel failed:\", cancelErr);\n }\n try {\n await store.finalize(streamId, \"error\", message);\n invokeObservabilityHook(\n \"onFinalize\",\n onFinalize,\n streamId,\n \"error\",\n message,\n );\n } catch (finalizeErr) {\n console.error(\"resumable stream finalize failed:\", finalizeErr);\n }\n } finally {\n if (!cancelled) reader?.releaseLock();\n }\n })();\n\n if (waitUntil) waitUntil(task);\n task.catch((err) => {\n console.error(\"resumable producer task failed:\", err);\n });\n}\n\nfunction readFromStore(\n store: ResumableStreamStore,\n streamId: string,\n): ReadableStream<Uint8Array> {\n const ac = new AbortController();\n let iterator: AsyncIterator<{ chunk: Uint8Array }> | undefined;\n\n return new ReadableStream<Uint8Array>({\n start() {\n iterator = store.read(streamId, \"\", ac.signal)[Symbol.asyncIterator]();\n },\n async pull(controller) {\n try {\n if (!iterator) return;\n const { done, value } = await iterator.next();\n if (done) {\n controller.close();\n return;\n }\n controller.enqueue(value.chunk);\n } catch (err) {\n // the platform never calls cancel() on errored streams, so unwind\n // the store iterator and abort the signal explicitly.\n ac.abort();\n try {\n await iterator?.return?.();\n } catch {}\n controller.error(err);\n }\n },\n cancel() {\n ac.abort();\n iterator?.return?.().catch(() => {});\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","names":[],"sources":["../../src/resumable/errors.ts"],"mappings":";KAAY;cAMC,6BAA6B;WAC/B,MAAM;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","names":[],"sources":["../../src/resumable/errors.ts"],"mappings":";KAAY;cAMC,6BAA6B;WAC/B,MAAM;EAEH,YAAA,MAAM,0BAA0B;;iBAS9B,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-impl.d.ts","names":[],"sources":["../../../src/resumable/stores/redis-impl.ts"],"mappings":";;KAsBY;WAEG;WACA;WACA,QAAQ,wBAAwB;;WAEhC;WAAyB;WAAsB;;WAE/C;WACA;WACA;WACA;;;;;;;UAQE;EACf,MAAM,aAAa,eAAe,iBAAiB;EACnD,IAAI,aAAa,eAAe,iBAAiB;EACjD,IAAI,cAAc;EAClB,OAAO,aAAa,iBAAiB;EACrC,OAAO,cAAc;EACrB,IAAI,iBAAiB;EACrB,KACE,aACA,QAAQ,wBAAwB,cAC/B;EACH,OACE,aACA,eACA,cACC,QACD;IAAQ;IAAY,QAAQ,wBAAwB;;;EAGtD,SAAS,mBAAmB,oBAAoB;;KAGtC;WACD;WACA;;WAEA;WACA;;cAGE,qCAAqC;mBAC/B;mBACA;mBACA;mBACA;mBACA;
|
|
1
|
+
{"version":3,"file":"redis-impl.d.ts","names":[],"sources":["../../../src/resumable/stores/redis-impl.ts"],"mappings":";;KAsBY;WAEG;WACA;WACA,QAAQ,wBAAwB;;WAEhC;WAAyB;WAAsB;;WAE/C;WACA;WACA;WACA;;;;;;;UAQE;EACf,MAAM,aAAa,eAAe,iBAAiB;EACnD,IAAI,aAAa,eAAe,iBAAiB;EACjD,IAAI,cAAc;EAClB,OAAO,aAAa,iBAAiB;EACrC,OAAO,cAAc;EACrB,IAAI,iBAAiB;EACrB,KACE,aACA,QAAQ,wBAAwB,cAC/B;EACH,OACE,aACA,eACA,cACC,QACD;IAAQ;IAAY,QAAQ,wBAAwB;;;EAGtD,SAAS,mBAAmB,oBAAoB;;KAGtC;WACD;WACA;;WAEA;WACA;;cAGE,qCAAqC;mBAC/B;mBACA;mBACA;mBACA;mBACA;EAGf,YAAA,QAAQ,iBACR,UAAS;EASL,QACJ,kBACA,UAAU,gCACT,QAAQ;EAiBL,OAAO,kBAAkB,OAAO,aAAa;EA8B7C,SACJ,kBACA,0BACA,iBACC;EA6BI,KACL,kBACA,gBACA,QAAQ,cACP,cAAc;EA2CX,OAAO,mBAAmB,QAAQ;EAWlC,OAAO,mBAAmB;UAKlB;UAQN;UAIA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncIterableStream.d.ts","names":[],"sources":["../../src/utils/AsyncIterableStream.ts"],"mappings":";KAAY,oBAAoB,KAAK,cAAc,KAAK,eAAe;
|
|
1
|
+
{"version":3,"file":"AsyncIterableStream.d.ts","names":[],"sources":["../../src/utils/AsyncIterableStream.ts"],"mappings":";KAAY,oBAAoB,KAAK,cAAc,KAAK,eAAe;iBAgCvD,sBAAsB,GACpC,QAAQ,eAAe,KACtB,oBAAoB"}
|
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
//#region src/utils/AsyncIterableStream.ts
|
|
2
2
|
async function* streamGeneratorPolyfill() {
|
|
3
3
|
const reader = this.getReader();
|
|
4
|
+
let shouldCancel = true;
|
|
4
5
|
try {
|
|
5
6
|
while (true) {
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
let result;
|
|
8
|
+
try {
|
|
9
|
+
result = await reader.read();
|
|
10
|
+
} catch (error) {
|
|
11
|
+
shouldCancel = false;
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
if (result.done) {
|
|
15
|
+
shouldCancel = false;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
const { value } = result;
|
|
8
19
|
yield value;
|
|
9
20
|
}
|
|
10
21
|
} finally {
|
|
11
|
-
|
|
22
|
+
try {
|
|
23
|
+
if (shouldCancel) await reader.cancel();
|
|
24
|
+
} finally {
|
|
25
|
+
reader.releaseLock();
|
|
26
|
+
}
|
|
12
27
|
}
|
|
13
28
|
}
|
|
14
29
|
function asAsyncIterableStream(source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncIterableStream.js","names":[],"sources":["../../src/utils/AsyncIterableStream.ts"],"sourcesContent":["export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\nasync function* streamGeneratorPolyfill<T>(\n this: ReadableStream<T>,\n): AsyncGenerator<T, undefined, unknown> {\n const reader = this.getReader();\n try {\n while (true) {\n
|
|
1
|
+
{"version":3,"file":"AsyncIterableStream.js","names":[],"sources":["../../src/utils/AsyncIterableStream.ts"],"sourcesContent":["export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\nasync function* streamGeneratorPolyfill<T>(\n this: ReadableStream<T>,\n): AsyncGenerator<T, undefined, unknown> {\n const reader = this.getReader();\n let shouldCancel = true;\n try {\n while (true) {\n let result: ReadableStreamReadResult<T>;\n try {\n result = await reader.read();\n } catch (error) {\n shouldCancel = false;\n throw error;\n }\n if (result.done) {\n shouldCancel = false;\n break;\n }\n const { value } = result;\n yield value;\n }\n } finally {\n try {\n if (shouldCancel) await reader.cancel();\n } finally {\n reader.releaseLock();\n }\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,0BAEyB;CACvC,MAAM,SAAS,KAAK,UAAU;CAC9B,IAAI,eAAe;CACnB,IAAI;EACF,OAAO,MAAM;GACX,IAAI;GACJ,IAAI;IACF,SAAS,MAAM,OAAO,KAAK;GAC7B,SAAS,OAAO;IACd,eAAe;IACf,MAAM;GACR;GACA,IAAI,OAAO,MAAM;IACf,eAAe;IACf;GACF;GACA,MAAM,EAAE,UAAU;GAClB,MAAM;EACR;CACF,UAAU;EACR,IAAI;GACF,IAAI,cAAc,MAAM,OAAO,OAAO;EACxC,UAAU;GACR,OAAO,YAAY;EACrB;CACF;AACF;AAEA,SAAgB,sBACd,QACwB;CACxB,OAAmC,OAAO,mBACxC;CACF,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promiseWithResolvers.d.ts","names":[],"sources":["../../src/utils/promiseWithResolvers.ts"],"mappings":";cAAa,uBAAwB;;
|
|
1
|
+
{"version":3,"file":"promiseWithResolvers.d.ts","names":[],"sources":["../../src/utils/promiseWithResolvers.ts"],"mappings":";cAAa,uBAAwB;;EACb,UAAA,OAAA,IAAI,YAAY;EACf,SAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assistant-stream",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.28",
|
|
4
4
|
"description": "Streaming utilities for AI assistants",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"ioredis": "^5.11.1",
|
|
68
68
|
"redis": "^6.1.0",
|
|
69
69
|
"vitest": "^4.1.10",
|
|
70
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
70
|
+
"@assistant-ui/x-buildutils": "0.0.20"
|
|
71
71
|
},
|
|
72
72
|
"publishConfig": {
|
|
73
73
|
"access": "public",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReadonlyJSONValue } from "../utils/json/json-value";
|
|
2
|
-
import type {
|
|
2
|
+
import type { AssistantTransportStateOperation } from "./gorp/types";
|
|
3
3
|
import type { ToolModelContentPart } from "./tool/tool-types";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -136,8 +136,8 @@ export type AssistantStreamChunk = { readonly path: readonly number[] } & (
|
|
|
136
136
|
readonly severity?: "critical" | "warning" | "info";
|
|
137
137
|
}
|
|
138
138
|
| {
|
|
139
|
-
/** Applies
|
|
139
|
+
/** Applies gorp-stream operations to state carried by this stream. */
|
|
140
140
|
readonly type: "update-state";
|
|
141
|
-
readonly operations:
|
|
141
|
+
readonly operations: AssistantTransportStateOperation[];
|
|
142
142
|
}
|
|
143
143
|
);
|
|
@@ -3,7 +3,9 @@ import type { AssistantMessage } from "../utils/types";
|
|
|
3
3
|
import { AssistantMessageAccumulator } from "./assistant-message-accumulator";
|
|
4
4
|
|
|
5
5
|
export class AssistantMessageStream {
|
|
6
|
-
|
|
6
|
+
public readonly readable: ReadableStream<AssistantMessage>;
|
|
7
|
+
|
|
8
|
+
constructor(readable: ReadableStream<AssistantMessage>) {
|
|
7
9
|
this.readable = readable;
|
|
8
10
|
}
|
|
9
11
|
|