llm-json-fix
Version:
Fix malformed JSON outputs from Large Language Models (LLMs)
55 lines (54 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLLMJsonFixStream = createLLMJsonFixStream;
/* eslint-disable @typescript-eslint/no-unused-vars */
const stream_1 = require("stream");
const errors_1 = require("../utils/errors");
const DEFAULT_MAX_BUFFER_SIZE = 1024 * 1024; // 1 MB
const DEFAULT_CHUNK_SIZE = 1024; // 1 KB
/**
* Create a transform stream that fixes malformed JSON from LLMs
*/
function createLLMJsonFixStream(options = {}) {
const bufferSize = options.bufferSize || DEFAULT_MAX_BUFFER_SIZE;
const model = options.model || 'general';
const preserveComments = options.preserveComments || false;
const verbose = options.verbose || false;
// Create a transform stream for our implementation
const transform = new stream_1.Transform({
readableObjectMode: false,
writableObjectMode: false,
transform(chunk, encoding, callback) {
try {
// For now, just pass through chunks
callback(null, chunk);
}
catch (err) {
if (err instanceof Error) {
if (err instanceof errors_1.BufferLimitExceededError) {
callback(new errors_1.BufferLimitExceededError(`Buffer limit exceeded. The JSON document is too large or malformed. ` +
`Increase the buffer size or fix the JSON document.`));
}
else {
callback(err);
}
}
else {
callback(err);
}
}
},
flush(callback) {
try {
// End the process
callback();
}
catch (err) {
callback(err instanceof Error ? err : new Error(String(err)));
}
}
});
const stack = [];
const changes = [];
return transform;
}