llm-json-fix
Version:
Fix malformed JSON outputs from Large Language Models (LLMs)
52 lines (51 loc) • 1.85 kB
JavaScript
/* eslint-disable @typescript-eslint/no-unused-vars */
import { Transform } from 'stream';
import { BufferLimitExceededError } from '../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
*/
export 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 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 BufferLimitExceededError) {
callback(new 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;
}