Debugging de Streams en Vercel AI SDK: Falsos Positivos HTTP 200
Resolución de cortes abruptos en el flujo de datos (Server-Sent Events) causados por asimetría de configuración entre el entorno local y el despliegue de producción.
1. Contexto y Falla Reportada
Se implementó un chatbot utilizando Next.js App Router, Vercel AI SDK y la API de OpenAI. Al desplegar a producción, la interfaz del chat permitía enviar el mensaje, pero retornaba inmediatamente un mensaje de error genérico en el frontend: "No pude procesar tu mensaje. Inténtalo nuevamente."
La inspección inicial en las DevTools del navegador reveló un comportamiento inusual: la petición POST hacia la ruta /api/chat retornaba un código de estado 200 OK de manera instantánea, pero la respuesta no contenía el payload esperado.
2. Análisis del Defecto (QA)
Dado que la arquitectura utiliza text/event-stream para transmitir la respuesta palabra por palabra, el servidor Next.js abre la conexión y responde con el 200 OK antes de que OpenAI comience a procesar el texto. Al revisar la lógica del backend en el archivo route.ts, se detectaron dos puntos de fallo crítico:
Configuración de Modelo Inválida: El código solicitaba el modelo
"gpt-5.6-luna", un identificador inexistente en la API oficial. OpenAI rechazaba la petición milisegundos después de que Vercel ya había respondido al cliente con el 200 OK, rompiendo el stream.Variables de Entorno Omitidas: La credencial
OPENAI_API_KEYestaba configurada en el archivo local.env, pero por políticas de seguridad de Git, este archivo no se sube al repositorio. El contenedor de producción de Vercel carecía de autorización para comunicarse con el proveedor de IA.
3. Implementación de la Solución
La corrección se ejecutó en dos fases garantizando la alineación entre código e infraestructura:
- Refactorización del bloque
streamTextenapp/api/chat/route.tspara apuntar a un modelo válido y optimizado para respuestas rápidas (gpt-4o-mini). - Inyección manual de la variable de entorno
OPENAI_API_KEYa través del panel de Settings de Vercel, asegurando que la clave secreta resida exclusivamente en el servidor de producción. - Ejecución de un nuevo despliegue (Redeploy) para que la instancia de Vercel absorbiera las nuevas variables de entorno.
4. Impacto
El asistente ahora procesa y transmite las respuestas mediante Server-Sent Events (SSE) sin interrupciones. Este caso valida la importancia de auditar arquitecturas orientadas a flujos en tiempo real, donde un estado HTTP exitoso en el nivel de red no siempre equivale a un procesamiento lógico exitoso en el backend.