UNPKG

@ai-sdk/provider-utils

Version:
34 lines (31 loc) 929 B
import { EventSourceParserStream, type EventSourceMessage, } from 'eventsource-parser/stream'; import { safeParseJSON, type ParseResult } from './parse-json'; import type { FlexibleSchema } from './schema'; /** * Parses a JSON event stream into a stream of parsed JSON objects. */ export function parseJsonEventStream<T>({ stream, schema, }: { stream: ReadableStream<Uint8Array>; schema: FlexibleSchema<T>; }): ReadableStream<ParseResult<T>> { return stream .pipeThrough(new TextDecoderStream()) .pipeThrough(new EventSourceParserStream()) .pipeThrough( new TransformStream<EventSourceMessage, ParseResult<T>>({ async transform({ data }, controller) { // ignore the 'DONE' event that e.g. OpenAI sends: if (data === '[DONE]') { return; } controller.enqueue(await safeParseJSON({ text: data, schema })); }, }), ); }