together-ai-sdk
Version:
A typescript SDK for the Together AI API
52 lines (51 loc) • 1.79 kB
JavaScript
;
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;