repo_description: ✨ Light and Fast AI Assistant. Support: Web | iOS | MacOS | Android |  Linux | Windows
repo_topics: calclaude chatgpt claude cross-platform desktop fe gemini gemini-pro gemini-server gemini-ultra gpt-4o groq nextjs ollama react tauri tauri-app vercel webui
code: // To store message streaming controller
  export const ChatControllerPool = {
    controllers: {} as Record<string, AbortController>,
  
    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}`;
    },
  };
  