fix: add server-side retry logic for intermittent LLM JSON parse failures

This commit is contained in:
2026-06-03 22:55:33 +02:00
parent 2fda90729e
commit 8d09b17467
+14 -3
View File
@@ -367,6 +367,11 @@ async function handleGenerate(req, res) {
const signal = combinedSignal(req); const signal = combinedSignal(req);
const MAX_ATTEMPTS = 2;
let lastErr;
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
if (signal.aborted) break;
try { try {
const content = await callProvider( const content = await callProvider(
[ [
@@ -386,14 +391,20 @@ async function handleGenerate(req, res) {
} }
const result = body.section === 'all' ? parsed : pickResultForSection(body.section, parsed); const result = body.section === 'all' ? parsed : pickResultForSection(body.section, parsed);
json(res, result); return json(res, result);
} catch (err) { } catch (err) {
if (err && (err.name === 'AbortError' || /client disconnected/i.test(err.message))) { if (err && (err.name === 'AbortError' || /client disconnected/i.test(err.message))) {
return; return;
} }
console.error('[generate]', err); lastErr = err;
json(res, { error: err.message || 'Generation failed' }, 500); if (attempt < MAX_ATTEMPTS) {
console.warn(`[generate] attempt ${attempt} failed, retrying… (${err.message})`);
} }
}
}
console.error('[generate]', lastErr);
json(res, { error: lastErr?.message || 'Generation failed' }, 500);
} }
// ────────────────────────────────────────────────────────────────────────────── // ──────────────────────────────────────────────────────────────────────────────