fix: add server-side retry logic for intermittent LLM JSON parse failures
This commit is contained in:
+14
-3
@@ -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,15 +391,21 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
// ──────────────────────────────────────────────────────────────────────────────
|
// ──────────────────────────────────────────────────────────────────────────────
|
||||||
// Server
|
// Server
|
||||||
|
|||||||
Reference in New Issue
Block a user