fix(stage2): повтор и при транзиентных ошибках ЛЛМ (кроме отмены)
This commit is contained in:
@@ -252,8 +252,10 @@ async function stage2Generate({
|
||||
{ role: 'user', content: userContent },
|
||||
];
|
||||
|
||||
// До двух попыток: при обрезке ответа (нет заголовков) повторяем с бо́льшим бюджетом.
|
||||
// До двух попыток: при обрезке ответа (нет заголовков) или транзиентной
|
||||
// ошибке ЛЛМ — повторяем с бо́льшим бюджетом.
|
||||
let budget = maxTokens;
|
||||
let lastError = 'stage2_failed';
|
||||
for (let attempt = 0; attempt < 2; attempt++) {
|
||||
let content;
|
||||
try {
|
||||
@@ -267,7 +269,14 @@ async function stage2Generate({
|
||||
model,
|
||||
});
|
||||
} catch (err) {
|
||||
return { ok: false, error: err && err.code ? err.code : 'stage2_failed' };
|
||||
const code = err && err.code ? err.code : 'stage2_failed';
|
||||
// Отмену клиентом не повторяем.
|
||||
if (code === 'aborted') {
|
||||
return { ok: false, error: code };
|
||||
}
|
||||
lastError = code;
|
||||
budget = Math.min(budget * 2, 4096);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Проверяем наличие обязательных заголовков (П.12).
|
||||
@@ -277,10 +286,11 @@ async function stage2Generate({
|
||||
}
|
||||
|
||||
// Не все заголовки на месте — вероятна обрезка по max_tokens. Повтор с x2.
|
||||
lastError = 'bad_llm_output';
|
||||
budget = Math.min(budget * 2, 4096);
|
||||
}
|
||||
|
||||
return { ok: false, error: 'bad_llm_output' };
|
||||
return { ok: false, error: lastError };
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
Reference in New Issue
Block a user