controller.ts 974 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. // To store message streaming controller
  2. export const ChatControllerPool = {
  3. controllers: {} as Record<string, AbortController>,
  4. addController(
  5. sessionIndex: number,
  6. messageId: number,
  7. controller: AbortController,
  8. ) {
  9. const key = this.key(sessionIndex, messageId);
  10. this.controllers[key] = controller;
  11. return key;
  12. },
  13. stop(sessionIndex: number, messageId: number) {
  14. const key = this.key(sessionIndex, messageId);
  15. const controller = this.controllers[key];
  16. controller?.abort();
  17. },
  18. stopAll() {
  19. Object.values(this.controllers).forEach((v) => v.abort());
  20. },
  21. hasPending() {
  22. return Object.values(this.controllers).length > 0;
  23. },
  24. remove(sessionIndex: number, messageId: number) {
  25. const key = this.key(sessionIndex, messageId);
  26. this.controllers[key]?.abort();
  27. delete this.controllers[key];
  28. },
  29. key(sessionIndex: number, messageIndex: number) {
  30. return `${sessionIndex},${messageIndex}`;
  31. },
  32. };