UNPKG

assistant-stream

Version:

Streaming utilities for AI assistants

56 lines (51 loc) • 1.4 kB
import sjson from "secure-json-parse"; import { PipeableTransformStream } from "./PipeableTransformStream"; import { createSSEJsonDecoder, createSSEJsonEncoder, SSE_HEADERS, } from "./SSEJson"; export class SSEEncoder<T> extends PipeableTransformStream< T, Uint8Array<ArrayBuffer> > { static readonly headers = new Headers(SSE_HEADERS); headers = SSEEncoder.headers; constructor() { super(createSSEJsonEncoder<T>()); } } export class SSEDecoder<T> extends PipeableTransformStream< Uint8Array<ArrayBuffer>, T > { constructor(options: { strict?: boolean | undefined } = {}) { const strict = options.strict ?? true; const ignoredEvents = new Set<string>(); super( createSSEJsonDecoder<T>({ parse(data, controller) { let value; try { value = sjson.parse(data); } catch { console.warn(`Dropped invalid SSE message: ${data.slice(0, 200)}`); return; } controller.enqueue(value); }, ...(strict ? { strict: true } : { strict: false, onUnknownEvent(event) { if (!ignoredEvents.has(event)) { ignoredEvents.add(event); console.error(`Ignored unknown SSE event type: ${event}`); } }, }), }), ); } }