← back to Model Arena
fix daily-challenge timeout: 40min cap + fast-poll after settle + partial-result exit
78f2e7e71797ace6acbbf8a239bd3e22d38e19aa · 2026-08-05 04:07:06 -0700 · steve@designerwallcoverings.com
Files touched
M scripts/daily-challenge.js
Diff
commit 78f2e7e71797ace6acbbf8a239bd3e22d38e19aa
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Wed Aug 5 04:07:06 2026 -0700
fix daily-challenge timeout: 40min cap + fast-poll after settle + partial-result exit
---
scripts/daily-challenge.js | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/scripts/daily-challenge.js b/scripts/daily-challenge.js
index 25e31d4..767ed2f 100644
--- a/scripts/daily-challenge.js
+++ b/scripts/daily-challenge.js
@@ -42,16 +42,21 @@ const sleep = ms => new Promise(r => setTimeout(r, ms));
const c = await req('POST', '/api/challenges', { title: pick.t, prompt: pick.p, models: LOCAL });
if (!c.id) { console.error('create failed', c); process.exit(1); }
console.log('created', c.id, '—', pick.t);
- // poll until settled + judged (cap ~20 min)
- for (let i = 0; i < 150; i++) {
- await sleep(8000);
+ // poll until settled + judged (cap ~40 min; reduce sleep to 3s after runs settle)
+ let settledAt = null;
+ for (let i = 0; i < 300; i++) {
+ await sleep(settledAt ? 3000 : 8000);
const cur = await req('GET', '/api/challenges/' + c.id);
- const settled = cur.runs.every(r => r.status === 'done' || r.status === 'error');
- if (settled && !cur.judging && cur.judged_at) {
+ const settled = Array.isArray(cur.runs) && cur.runs.length > 0 &&
+ cur.runs.every(r => r.status === 'done' || r.status === 'error');
+ if (settled && !settledAt) settledAt = Date.now();
+ // exit success once judged, OR after runs settled for 8+ min with no judge (partial result)
+ const judgeTimeout = settledAt && (Date.now() - settledAt) > 8 * 60 * 1000;
+ if (settled && (!cur.judging && cur.judged_at || judgeTimeout)) {
const done = cur.runs.filter(r => r.status === 'done').length;
- const entry = { ts: new Date().toISOString(), id: c.id, title: pick.t, done, aiPick: cur.aiPick };
+ const entry = { ts: new Date().toISOString(), id: c.id, title: pick.t, done, aiPick: cur.aiPick || null, partial: judgeTimeout && !cur.judged_at };
try { fs.appendFileSync(LOG, JSON.stringify(entry) + '\n'); } catch (e) { console.error('LOG APPEND FAILED', e); }
- console.log('DONE', JSON.stringify(entry));
+ console.log(judgeTimeout ? 'PARTIAL (judge timeout)' : 'DONE', JSON.stringify(entry));
return;
}
}
← b362c96 auto-save: 2026-08-04T08:01:22 (1 files) — data/challenges.j
·
back to Model Arena
·
fix judgeTimeout: 8min→35min, PARTIAL exits non-zero to trig 2b08a6e →