fix: resolver FUNCTION_INVOCATION_FAILED y pipeline de Instagram

- transcriptor: restaurar await toFile() — sin él Whisper recibía una
  Promise en vez del archivo y devolvía 400
- transcriptor: detectar MIME type real (m4a para Instagram, mp3 TikTok)
- analizar: normalizar duración (TikTok→ms, Instagram→s float) a entero
  antes de guardar en Supabase y pasar a GPT-4o
- analizar/server: reemplazar .catch() en insert de error por try/catch —
  el builder de Supabase no expone .catch() directamente; el TypeError
  escapaba al outer catch y causaba FUNCTION_INVOCATION_FAILED en Vercel
- validador: fallback de último recurso en enums cuando GPT-4o devuelve
  valor inválido (ej. "ninguno" para desarrollo_tipo)

Probado end-to-end: Instagram Reel → OK en 27s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-01 10:57:49 -05:00
parent 4aecbef343
commit b11d57465e
4 changed files with 38 additions and 22 deletions

View File

@ -40,7 +40,12 @@ function normalizarEnum(valor, validos, aliases = {}) {
const matchU = validos.find(v => v.toLowerCase() === underscored)
if (matchU) return matchU
return sinAcentos // sin match → Zod reportará el error
// 6. Fallback de último recurso: "otra" > "ninguna" > "ninguno" > último valor del enum
// GPT-4o a veces devuelve "ninguno" para campos donde no corresponde
if (validos.includes('otra')) return 'otra'
if (validos.includes('ninguna')) return 'ninguna'
if (validos.includes('ninguno')) return 'ninguno'
return validos[validos.length - 1]
}
/** Enum flexible: tolera acentos, mayúsculas, espacios y aliases explícitos */