// To store message streaming controller export const ChatControllerPool = { controllers: {} as Record, addController( sessionId: string, messageId: string, controller: AbortController, ) { const key = this.key(sessionId, messageId); this.controllers[key] = controller; return key; }, stop(sessionId: string, messageId: string) { const key = this.key(sessionId, messageId); const controller = this.controllers[key]; controller?.abort(); }, stopAll() { Object.values(this.controllers).forEach((v) => v.abort()); }, hasPending() { return Object.values(this.controllers).length > 0; }, remove(sessionId: string, messageId: string) { const key = this.key(sessionId, messageId); delete this.controllers[key]; }, key(sessionId: string, messageIndex: string) { return `${sessionId},${messageIndex}`; }, };