ai_agents_test-1.0.0-alpha1/js/group_runner.js

js/group_runner.js
(async function (drupalSettings) {
  // Function to run a test.
  async function runTest(testId) {
    // Add a promise.
    return new Promise((resolve, reject) => {
      // Set the test ID to running.
      let testStatusElement = document.querySelector('.test-status-' + testId);
      if (testStatusElement) {
        testStatusElement.innerHTML = 'running...';
      }
      let testIdElement = document.querySelector('.test-' + testId);
      if (testIdElement) {
        testIdElement.classList.add('running');
      }
      let testDetailsElement = document.querySelector('.test-details-' + testId);

      // Start a test on the ajax endpoint.
      let id = drupalSettings.agentTestGroup.testGroupResultId;
      let provider = encodeURIComponent(drupalSettings.agentTestGroup.providerId || '');
      let model = encodeURIComponent(drupalSettings.agentTestGroup.modelId || '');

      // Build the URL with test execution model parameters.
      let url = drupalSettings.path.baseUrl + 'admin/content/ai-agents-test/group/run/ajax/' + testId + '/' + id;
      let params = new URLSearchParams();

      // Add test execution model parameters.
      if (provider) {
        params.append('provider_id', provider);
      }
      if (model) {
        params.append('model_id', model);
      }

      // Add evaluation model parameters if they exist.
      let evalProvider = drupalSettings.agentTestGroup.evalProviderId;
      let evalModel = drupalSettings.agentTestGroup.evalModelId;

      if (evalProvider) {
        params.append('eval_provider_id', encodeURIComponent(evalProvider));
      }
      if (evalModel) {
        params.append('eval_model_id', encodeURIComponent(evalModel));
      }

      // Append parameters to URL if any exist.
      if (params.toString()) {
        url += '?' + params.toString();
      }

      fetch(url)
      .then(function (response) {
        // Check if the response is ok.
        if (!response.ok) {
          testIdElement.classList.add('error');
          testIdElement.classList.remove('running');
          testStatusElement.innerHTML = 'error';
          throw new Error('Network response was not ok');
        }
        // Get the response as JSON.
        return response.json();
      })
      .then(function (data) {
        // Check if the test was successful.
        if (data.success) {
          testIdElement.classList.add('success');
          testIdElement.classList.remove('running');
          testStatusElement.innerHTML = 'success';
          let link = drupalSettings.path.baseUrl + 'admin/content/ai-agents-test/result/' + data.entity;
          let linkText = '<a href="' + link + '" target="_blank">' + Drupal.t('View result') + '</a>';
          testDetailsElement.innerHTML = linkText;
        }
        else {
          // If the test failed, add the error class.
          testIdElement.classList.add('error');
          testIdElement.classList.remove('running');
          testStatusElement.innerHTML = 'error';

          // If there's an error message in the response, display it.
          if (data.error) {
            testDetailsElement.innerHTML = '<span class="error-message">' + data.error + '</span>';
          }
        }
        resolve();
      })
      .catch(function (error) {
        console.error('Error:', error);
        testIdElement.classList.add('error');
        testIdElement.classList.remove('running');
        testStatusElement.innerHTML = 'error';
        testDetailsElement.innerHTML = '<span class="error-message">Network error</span>';
        // Resolve the promise.
        resolve();
      });
    });
  }

  // Synchronously run all the tests in the group.
  for (let testId of drupalSettings.agentTestGroup.testsToStart) {
    await runTest(testId);
  }
  // Forward to the result page.
  let id = drupalSettings.agentTestGroup.testGroupResultId;
  let url = drupalSettings.path.baseUrl + 'admin/content/ai-agents-test/group/result/' + id;
  window.location.replace(url);
})(drupalSettings);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc