assistant-stream
Version:
Streaming utilities for AI assistants
45 lines (44 loc) • 1.41 kB
JavaScript
import { Counter } from "../Counter.js";
// src/core/utils/stream/path-utils.ts
var PathAppendEncoder = class extends TransformStream {
constructor(idx) {
super({ transform(chunk, controller) {
const append = (partIndex) => controller.enqueue({
...chunk,
path: [partIndex, ...chunk.path]
});
if (typeof idx === "number") return append(idx);
else if (idx.value !== void 0) return append(idx.value);
else return idx.promise.then(append);
} });
}
};
var PathAppendDecoder = class extends TransformStream {
constructor(idx) {
super({ transform(chunk, controller) {
const { path: [idx2, ...path] } = chunk;
if (idx !== idx2) throw new Error(`Path mismatch: expected ${idx}, got ${idx2}`);
controller.enqueue({
...chunk,
path
});
} });
}
};
const createPathMergeMapper = (nextPartIndex) => {
const innerCounter = new Counter();
const mapping = /* @__PURE__ */ new Map();
return (chunk) => {
if (chunk.type === "part-start" && chunk.path.length === 0) mapping.set(innerCounter.up(), nextPartIndex());
const [idx, ...path] = chunk.path;
if (idx === void 0) return chunk;
const mappedIdx = mapping.get(idx);
if (mappedIdx === void 0) throw new Error("Path not found");
return {
...chunk,
path: [mappedIdx, ...path]
};
};
};
export { PathAppendDecoder, PathAppendEncoder, createPathMergeMapper };
//# sourceMappingURL=path-utils.js.map