UNPKG

ai-utils.js

Version:

Build AI applications, chatbots, and agents with JavaScript and TypeScript.

55 lines (54 loc) 2.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseTextDeltaEventSource = exports.createTextDeltaEventSource = void 0; const secure_json_parse_1 = __importDefault(require("secure-json-parse")); const zod_1 = require("zod"); const AsyncQueue_js_1 = require("./AsyncQueue.cjs"); const parseEventSourceReadableStream_js_1 = require("./parseEventSourceReadableStream.cjs"); const textEncoder = new TextEncoder(); const textDeltaEventDataSchema = zod_1.z.object({ textDelta: zod_1.z.string().optional(), isFinished: zod_1.z.boolean(), }); function enqueueData(controller, data) { controller.enqueue(textEncoder.encode(`data: ${JSON.stringify(data)}\n\n`)); } function createTextDeltaEventSource(textDeltas) { return new ReadableStream({ async start(controller) { for await (const textDelta of textDeltas) { enqueueData(controller, { textDelta, isFinished: false }); } enqueueData(controller, { isFinished: true }); }, }); } exports.createTextDeltaEventSource = createTextDeltaEventSource; function parseTextDeltaEventSource(stream, options) { const queue = new AsyncQueue_js_1.AsyncQueue(); // run async (no await on purpose): (0, parseEventSourceReadableStream_js_1.parseEventSourceReadableStream)({ stream, callback: (event) => { if (event.type !== "event") { return; } try { const data = textDeltaEventDataSchema.parse(secure_json_parse_1.default.parse(event.data)); queue.push(data.textDelta); if (data.isFinished) { queue.close(); } } catch (error) { options?.errorHandler(error); queue.close(); } }, }); return queue; } exports.parseTextDeltaEventSource = parseTextDeltaEventSource;