type TProcessFunction = (input: string) => Promise; interface ISmartAiOptions { processFunction: TProcessFunction; } class SmartAi { private processFunction: TProcessFunction; private inputStreamWriter: WritableStreamDefaultWriter | null = null; private outputStreamController: ReadableStreamDefaultController | null = null; constructor(options: ISmartAiOptions) { this.processFunction = options.processFunction; } private setupOutputStream(): ReadableStream { return new ReadableStream({ start: (controller) => { this.outputStreamController = controller; } }); } private setupInputStream(): WritableStream { return new WritableStream({ write: async (chunk) => { const processedData = await this.processFunction(chunk); if (this.outputStreamController) { this.outputStreamController.enqueue(processedData); } }, close: () => { this.outputStreamController?.close(); }, abort: (err) => { console.error('Stream aborted', err); this.outputStreamController?.error(err); } }); } public getInputStreamWriter(): WritableStreamDefaultWriter { if (!this.inputStreamWriter) { const inputStream = this.setupInputStream(); this.inputStreamWriter = inputStream.getWriter(); } return this.inputStreamWriter; } public getOutputStream(): ReadableStream { return this.setupOutputStream(); } }