feat: timeout
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -61,6 +61,7 @@ const STRUCTURE_ALIASES = {
|
||||
|
||||
const LYRICS_FUNCTION_OPTIONS = {
|
||||
region: REGION,
|
||||
timeoutSeconds: 180,
|
||||
cors: true,
|
||||
invoker: 'public',
|
||||
secrets: [GEMINI_API_KEY],
|
||||
|
||||
Reference in New Issue
Block a user