UNPKG

@langchain/langgraph-sdk

Version:

Client library for interacting with the LangGraph API

81 lines (80 loc) • 2.6 kB
const require_media = require("../../client/stream/media.cjs"); const require_namespace = require("../namespace.cjs"); const require_runtime = require("./runtime.cjs"); //#region src/stream/projections/media.ts function createMediaProjection(kind, namespace, buildAssembler, options) { const ns = [...namespace]; return { key: `${kind}|${require_namespace.namespaceKey(ns)}`, namespace: ns, initial: [], open({ thread, store, rootBus }) { const assembler = buildAssembler((media) => { store.setValue([...store.getSnapshot(), media]); }, options); if (require_namespace.isRootNamespace(ns) && rootBus.channels.includes("messages")) { const unsubscribe = rootBus.subscribe((event) => { if (event.method !== "messages") return; if (!require_namespace.isRootNamespace(event.params.namespace)) return; assembler.consume(event); }); return { async dispose() { unsubscribe(); for (const media of store.getSnapshot()) try { media.revoke(); } catch {} assembler.close(); } }; } const runtime = require_runtime.openProjectionSubscription({ thread, channels: ["messages"], namespace: ns, onEvent(event) { if (event.method !== "messages") return; assembler.consume(event); }, onFinally() { assembler.close(); } }); return { async dispose() { for (const media of store.getSnapshot()) try { media.revoke(); } catch {} assembler.close(); await runtime.dispose(); } }; } }; } function audioProjection(namespace, options) { return createMediaProjection("audio", namespace, (push, opts) => new require_media.MediaAssembler({ fetch: opts?.fetch, onAudio: (m) => push(m) }), options); } function imagesProjection(namespace, options) { return createMediaProjection("images", namespace, (push, opts) => new require_media.MediaAssembler({ fetch: opts?.fetch, onImage: (m) => push(m) }), options); } function videoProjection(namespace, options) { return createMediaProjection("video", namespace, (push, opts) => new require_media.MediaAssembler({ fetch: opts?.fetch, onVideo: (m) => push(m) }), options); } function filesProjection(namespace, options) { return createMediaProjection("files", namespace, (push, opts) => new require_media.MediaAssembler({ fetch: opts?.fetch, onFile: (m) => push(m) }), options); } //#endregion exports.audioProjection = audioProjection; exports.filesProjection = filesProjection; exports.imagesProjection = imagesProjection; exports.videoProjection = videoProjection; //# sourceMappingURL=media.cjs.map