UNPKG

llm-json-fix

Version:

Fix malformed JSON outputs from Large Language Models (LLMs)

52 lines (51 loc) 1.85 kB
/* 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; }