Commit 4a6b37c2 authored by Marcus Johansson's avatar Marcus Johansson
Browse files

Better request handling

parent cb60cd91
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2,5 +2,6 @@ services:
  ai_provider_browser.chat_message_storage:
    class: Drupal\ai_provider_browser\ChatMessageStorage
    arguments:
      - '@tempstore.private'
      - '@tempstore.shared'
      - '@uuid'
      - '@current_user'
+4 −31
Original line number Diff line number Diff line
@@ -651,28 +651,6 @@ const BrowserAiProvider = (function () {
    });
  }

  /**
   * Polls for pending requests and rejects them with a setup failure.
   *
   * Used when the LanguageModel API is not available in the browser so that
   * the PHP provider receives an immediate failure instead of timing out.
   *
   * @param {string} message - The setup failure message.
   */
  async function rejectPendingRequests(message) {
    const data = await fetchPendingRequests();

    if (!data?.data?.length) {
      return;
    }

    for (const request of data.data) {
      if (request.status === CONFIG.requestStatus.received) {
        await reportError(request.requestUuid, message, true);
      }
    }
  }

  /**
   * Initializes the browser AI provider.
   */
@@ -716,18 +694,13 @@ const BrowserAiProvider = (function () {
        break;

      case 'unavailable':
      default: {
        const setupMessage = 'The Browser AI Chat provider requires Google Chrome 138+ with the LanguageModel API enabled. Please ensure you are using a supported version of Google Chrome.';
      default:
        // Do not poll or reject requests here — another browser tab (Chrome)
        // may be handling them. The PHP timeout handles the case where no
        // capable browser is available.
        console.warn('[BrowserAiProvider] LanguageModel API not available');

        // Poll for requests and reject them so the server gets an immediate failure.
        rejectPendingRequests(setupMessage);
        setInterval(function () {
          rejectPendingRequests(setupMessage);
        }, CONFIG.pollingInterval);
        break;
    }
    }

    setupVisibilityHandling();
  }
+258 −155

File changed.

Preview size limit exceeded, changes collapsed.

+49 −19

File changed.

Preview size limit exceeded, changes collapsed.

+2 −7
Original line number Diff line number Diff line
@@ -54,11 +54,8 @@ class ChatMessageRequestHandler extends ControllerBase {
      ]);
    }

    // Get the last request only.
    $one_request = end($requests);

    return new JsonResponse([
      'data' => [$one_request],
      'data' => array_values($requests),
      'count' => count($requests),
    ]);
  }
@@ -117,10 +114,8 @@ class ChatMessageRequestHandler extends ControllerBase {
      ]);
    }

    $one_request = end($requests);

    return new JsonResponse([
      'data' => [$one_request],
      'data' => array_values($requests),
      'count' => count($requests),
    ]);
  }
Loading