diff --git a/package.json b/package.json index 236dae5..483bab7 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "limiter": "^3.0.0", "marked": "^16.1.1", "node-fetch": "^3.3.2", - "p-queue": "^8.1.0", + "p-queue": "^9.0.0", "puppeteer": "^24.10.1", "sass": "^1.89.2", "strict-csp": "^1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 322c74d..8236481 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -78,8 +78,8 @@ importers: specifier: ^3.3.2 version: 3.3.2 p-queue: - specifier: ^8.1.0 - version: 8.1.1 + specifier: ^9.0.0 + version: 9.0.0 puppeteer: specifier: ^24.10.1 version: 24.22.3(typescript@5.9.3) @@ -5288,13 +5288,13 @@ packages: resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} engines: {node: '>=18'} - p-queue@8.1.1: - resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} - engines: {node: '>=18'} + p-queue@9.0.0: + resolution: {integrity: sha512-KO1RyxstL9g1mK76530TExamZC/S2Glm080Nx8PE5sTd7nlduDQsAfEl4uXX+qZjLiwvDauvzXavufy3+rJ9zQ==} + engines: {node: '>=20'} - p-timeout@6.1.4: - resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} - engines: {node: '>=14.16'} + p-timeout@7.0.0: + resolution: {integrity: sha512-DhZ7ydOE3JXtXzDf2wz/KEamkKAD7Il5So09I2tOz4i+9pLcdghDKKmODkkoHKJ0TyczmhcHNxyTeTrsENT81A==} + engines: {node: '>=20'} pac-proxy-agent@7.2.0: resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} @@ -12821,12 +12821,12 @@ snapshots: p-map@7.0.3: {} - p-queue@8.1.1: + p-queue@9.0.0: dependencies: eventemitter3: 5.0.1 - p-timeout: 6.1.4 + p-timeout: 7.0.0 - p-timeout@6.1.4: {} + p-timeout@7.0.0: {} pac-proxy-agent@7.2.0: dependencies: diff --git a/runner/orchestration/gateways/local_gateway.ts b/runner/orchestration/gateways/local_gateway.ts index 75cd970..066c159 100644 --- a/runner/orchestration/gateways/local_gateway.ts +++ b/runner/orchestration/gateways/local_gateway.ts @@ -84,7 +84,6 @@ export class LocalGateway implements Gateway { reject(err); }); }), - {throwOnTimeout: true}, ); } diff --git a/runner/orchestration/generate.ts b/runner/orchestration/generate.ts index 95b12c4..16bcfd2 100644 --- a/runner/orchestration/generate.ts +++ b/runner/orchestration/generate.ts @@ -152,60 +152,57 @@ export async function generateCodeAndAssess(options: { for (const rootPromptDef of promptsToProcess) { allTasks.push( - appConcurrencyQueue.add( - async () => { - const evalID = await env.gateway.initializeEval(); - let results: AssessmentResult[] | undefined; - - try { - results = await callWithTimeout( - `Evaluation of ${rootPromptDef.name}`, - async abortSignal => - startEvaluationTask( - evalID, - env, - env.gateway, - ratingLlm, - options.model, - rootPromptDef, - options.localMode, - options.skipScreenshots, - options.outputDirectory, - options.ragEndpoint, - abortSignal, - options.skipAxeTesting, - !!options.enableUserJourneyTesting, - !!options.enableAutoCsp, - workerConcurrencyQueue, - progress, - options.autoraterModel || DEFAULT_AUTORATER_MODEL_NAME, - options.a11yRepairAttempts ?? 0, - ), - // 10min max per app evaluation. We just want to make sure it never gets stuck. - 10, - ); - return results; - } catch (e: unknown) { - failedPrompts.push({ - promptName: rootPromptDef.name, - error: `${e}`, - stack: e instanceof Error ? e.stack : undefined, - }); - - let details = `Error: ${e}`; - if (e instanceof Error && e.stack) { - details += `\nStack: ${e.stack}`; - } - - progress.log(rootPromptDef, 'error', 'Failed to evaluate code', details); - return [] satisfies AssessmentResult[]; - } finally { - progress.evalFinished(rootPromptDef, results || []); - await env.gateway.finalizeEval(evalID); + appConcurrencyQueue.add(async () => { + const evalID = await env.gateway.initializeEval(); + let results: AssessmentResult[] | undefined; + + try { + results = await callWithTimeout( + `Evaluation of ${rootPromptDef.name}`, + async abortSignal => + startEvaluationTask( + evalID, + env, + env.gateway, + ratingLlm, + options.model, + rootPromptDef, + options.localMode, + options.skipScreenshots, + options.outputDirectory, + options.ragEndpoint, + abortSignal, + options.skipAxeTesting, + !!options.enableUserJourneyTesting, + !!options.enableAutoCsp, + workerConcurrencyQueue, + progress, + options.autoraterModel || DEFAULT_AUTORATER_MODEL_NAME, + options.a11yRepairAttempts ?? 0, + ), + // 10min max per app evaluation. We just want to make sure it never gets stuck. + 10, + ); + return results; + } catch (e: unknown) { + failedPrompts.push({ + promptName: rootPromptDef.name, + error: `${e}`, + stack: e instanceof Error ? e.stack : undefined, + }); + + let details = `Error: ${e}`; + if (e instanceof Error && e.stack) { + details += `\nStack: ${e.stack}`; } - }, - {throwOnTimeout: true}, - ), + + progress.log(rootPromptDef, 'error', 'Failed to evaluate code', details); + return [] satisfies AssessmentResult[]; + } finally { + progress.evalFinished(rootPromptDef, results || []); + await env.gateway.finalizeEval(evalID); + } + }), ); } diff --git a/runner/orchestration/serve-testing-worker.ts b/runner/orchestration/serve-testing-worker.ts index 5406b13..83835e6 100644 --- a/runner/orchestration/serve-testing-worker.ts +++ b/runner/orchestration/serve-testing-worker.ts @@ -73,7 +73,6 @@ export async function serveAndTestApp( reject(err); }); }), - {throwOnTimeout: true}, ); }, );