smartai/ts/smartai.classes.smartai.ts

54 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-03-30 11:45:53 +00:00
type TProcessFunction = (input: string) => Promise<string>;
2024-03-31 00:34:52 +00:00
export interface ISmartAiOptions {
2024-03-30 11:45:53 +00:00
processFunction: TProcessFunction;
}
2024-03-31 00:34:52 +00:00
export class SmartAi {
2024-03-30 11:45:53 +00:00
private processFunction: TProcessFunction;
private inputStreamWriter: WritableStreamDefaultWriter<string> | null = null;
private outputStreamController: ReadableStreamDefaultController<string> | null = null;
constructor(options: ISmartAiOptions) {
this.processFunction = options.processFunction;
}
private setupOutputStream(): ReadableStream<string> {
return new ReadableStream<string>({
start: (controller) => {
this.outputStreamController = controller;
}
});
}
private setupInputStream(): WritableStream<string> {
return new WritableStream<string>({
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<string> {
if (!this.inputStreamWriter) {
const inputStream = this.setupInputStream();
this.inputStreamWriter = inputStream.getWriter();
}
return this.inputStreamWriter;
}
public getOutputStream(): ReadableStream<string> {
return this.setupOutputStream();
}
}