UNPKG

together-ai-sdk

Version:

A typescript SDK for the Together AI API

52 lines (51 loc) 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.streamEvents = void 0; const caseConverter_1 = require("../utils/caseConverter"); const removeFront_1 = require("../utils/removeFront"); /** * Streams events from a reader and calls a callback with each event. * The reader can return partial events or multiple events in a single read, * so this function handles those cases * @param reader - the reader to stream from * @param callback - the callback to call with each event */ const streamEvents = async (reader, callback) => { let isDone = false; let partialResponse = ''; while (true) { const { done, value } = await reader.read(); const text = new TextDecoder().decode(value); const fullText = (partialResponse + text).trim(); // console.log(text) for (const line of fullText.split('\n')) { const trimmedLine = line.trim(); if (trimmedLine.length === 0) continue; if (trimmedLine === 'data: [DONE]') { isDone = true; await callback('done'); break; } const rawObj = (0, removeFront_1.removeFront)(trimmedLine, 'data:').trim(); let json = {}; try { json = JSON.parse(rawObj); } catch { partialResponse = rawObj; continue; } partialResponse = ''; await callback((0, caseConverter_1.snakeCase2camelCase)(json)); } if (done) { break; } } // If we didn't recieve a done event, call the callback with done if (!isDone) { await callback('done'); } }; exports.streamEvents = streamEvents;