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);
