UNPKG

assistant-stream

Version:

Streaming utilities for AI assistants

32 lines (31 loc) • 1.68 kB
import { createAssistantStream } from "../core/modules/assistant-stream.js"; import { DataStreamEncoder } from "../core/serialization/data-stream/DataStream.js"; // src/resumable/createResumableAssistantStreamResponse.ts const RESUMABLE_STREAM_ID_HEADER = "x-resumable-stream-id"; async function createResumableAssistantStreamResponse(options) { const encoder = (options.encoder ?? (() => new DataStreamEncoder()))(); const stream = await options.context.run(options.streamId, () => { return createAssistantStream(options.callback).pipeThrough(encoder); }); return new Response(stream, { headers: mergeHeaders(encoder.headers, options.headers, options.streamId) }); } async function createResumeAssistantStreamResponse(options) { const stream = await options.context.resume(options.streamId); if (!stream) return options.missingResponse?.() ?? defaultMissingResponse(); const encoder = (options.encoder ?? (() => new DataStreamEncoder()))(); return new Response(stream, { headers: mergeHeaders(encoder.headers, options.headers, options.streamId) }); } function defaultMissingResponse() { return new Response(JSON.stringify({ error: "stream not found" }), { status: 404, headers: { "Content-Type": "application/json" } }); } function mergeHeaders(encoderHeaders, extra, streamId) { const merged = new Headers(encoderHeaders ?? {}); if (extra) for (const [key, value] of new Headers(extra)) merged.set(key, value); merged.set(RESUMABLE_STREAM_ID_HEADER, streamId); return merged; } export { RESUMABLE_STREAM_ID_HEADER, createResumableAssistantStreamResponse, createResumeAssistantStreamResponse }; //# sourceMappingURL=createResumableAssistantStreamResponse.js.map