feat: timeout

This commit is contained in:
2026-09-09 11:51:08 +02:00
parent 3ba290031d
commit 4e75eb4a5f
9 changed files with 83 additions and 9 deletions
+8
View File
@@ -10,6 +10,7 @@ const { setTimeout } = require('timers/promises')
// changer sans déploiement et pointer temporairement vers un modèle saturé.
const TEXT_MODEL_NAMES = ['gemini-3.6-flash', 'gemini-3.5-flash', 'gemini-3.1-flash-lite']
const MODERATION_MODEL_NAMES = ['gemini-3.1-flash-lite', 'gemini-3.6-flash', 'gemini-3.5-flash']
const MODEL_REQUEST_TIMEOUT_MS = 35000
const RETRYABLE_STATUS_CODES = new Set([404, 429, 500, 502, 503, 504])
const getErrorStatus = (error) => {
@@ -21,8 +22,14 @@ const canTryFallbackModel = (error) => {
const status = getErrorStatus(error)
if (status && RETRYABLE_STATUS_CODES.has(status)) return true
if (error?.name === 'AbortError' || error?.name === 'TimeoutError' || error?.code === 'ABORT_ERR') {
return true
}
const message = String(error?.message || '').toLowerCase()
return (
message.includes('abort') ||
message.includes('timeout') ||
message.includes('high demand') ||
message.includes('overloaded') ||
message.includes('temporarily unavailable') ||
@@ -41,6 +48,7 @@ const generateWithModelFallback = async ({ ai, modelNames, label, request }) =>
const response = await ai.generate({
...request,
model: googleAI.model(modelName),
abortSignal: AbortSignal.timeout(MODEL_REQUEST_TIMEOUT_MS),
})
if (!response?.output) {
+1
View File
@@ -61,6 +61,7 @@ const STRUCTURE_ALIASES = {
const LYRICS_FUNCTION_OPTIONS = {
region: REGION,
timeoutSeconds: 180,
cors: true,
invoker: 'public',
secrets: [GEMINI_API_KEY],