Todos los artículos

Streaming response ended before any complete data en Claude Code: causas y solución

Streaming response ended before any complete data en Claude Code: un proxy o gateway rompe el stream. Deja pasar SSE sin búfer y prueba con curl -N.

Claude Code streaming response ended before any complete data
También disponible en中文English

Streaming response ended before any complete data was received significa que la respuesta en streaming de tu proveedor de modelos se cerró sin entregar ni un evento útil, así que Claude Code reenvió la misma petición sin streaming para terminar el turno. La causa habitual es un proxy, gateway o relay entre Claude Code y el proveedor que almacena en búfer, reescribe o descarta el stream. Configúralo para que deje pasar el cuerpo text/event-stream y sus cabeceras sin cambios y pruébalo con curl -N. Reprodujimos el mensaje en Claude Code 2.1.318 el 5 de noviembre de 2026; los detalles siguen la referencia oficial de errores.

El mensaje completo:

Streaming response ended before any complete data was received. Retrying without streaming. If this keeps happening, check any proxy or gateway between Claude Code and your model provider.

Qué significa streaming response ended before any complete data

Claude Code pide cada respuesta como un stream de eventos SSE y los lee uno a uno. Si el stream termina antes de que llegue el primer evento completo, Claude Code pasa a una petición normal y muestra este aviso. Lo que dice la documentación:

  • El aviso aparece una vez por sesión y solo en sesiones interactivas. Antes de la v2.1.239 Claude Code reintentaba sin avisar.
  • Cada petición afectada se envía dos veces: el intento en streaming vacío y el reintento sin streaming.
  • El turno suele terminar bien, porque el reintento obtiene la respuesta. El precio es más latencia y una petición duplicada en cada turno.

Nuestra prueba: un stream vacío en Claude Code 2.1.318

Conectamos un Claude Code 2.1.318 aislado a una API simulada local que responde a las peticiones en streaming con 200, text/event-stream y cuerpo vacío, y a las normales con una respuesta correcta:

❯ say ok
● Streaming response ended before any complete data was received. Retrying without streaming. If this keeps happening, check any proxy or gateway between Claude Code and your model provider.
● ok

# what our mock API received for that one prompt
POST /v1/messages  stream=true   -> 200 text/event-stream, empty body
POST /v1/messages  stream=false  -> 200 JSON message

Un segundo prompt en la misma sesión volvió a generar dos peticiones, pero sin un segundo aviso, como indica la regla de una vez por sesión. Con claude -p no se imprimió nada y la respuesta llegó; solo el log de depuración mostró el cambio:

[ERROR] Stream completed without receiving message_start event - triggering non-streaming fallback
[ERROR] Error streaming, falling back to non-streaming mode: Stream ended without receiving any events

Si usas Claude Code en scripts, revisa la salida de --debug-file o los logs del gateway en busca de pares de peticiones, una con "stream": true y otra sin él.

Cómo solucionar streaming response ended before any complete data

  1. Localiza la capa intermedia. Revisa ANTHROPIC_BASE_URL, HTTPS_PROXY y cualquier proxy corporativo, cliente VPN o relay. Si usas un endpoint de terceros, como en nuestra guía de Claude Code con DeepSeek, ese endpoint también forma parte del camino.
  2. Prueba el stream fuera de Claude Code. Envía una petición en streaming con curl a la misma URL. Si usas un token Bearer, cambia la línea x-api-key por una cabecera Authorization:
  3. Interpreta el resultado. Un endpoint sano imprime los eventos a medida que llegan y termina en message_stop. Un cuerpo vacío, un único JSON, una página HTML o todo de golpe tras una pausa indican que la capa intermedia consume o almacena el stream.
  4. Desactiva el búfer y las transformaciones. Según la referencia del protocolo de gateways, devuelve content-type: text/event-stream en las respuestas en streaming, reenvía los eventos en orden hasta message_delta y message_stop y conserva los eventos ping. En nginx, la opción es proxy_buffering off.
  5. En Amazon Bedrock el stream es binario y tiene sus propias reglas; consulta Streaming errors behind a gateway or proxy.
  6. Vuelve a probar en una sesión interactiva nueva. El aviso no debería reaparecer y el gateway debería registrar una sola petición por turno.
curl -N "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"YOUR_MODEL","max_tokens":32,"stream":true,"messages":[{"role":"user","content":"say ok"}]}'

Una respuesta sana se ve así:

event: message_start
data: {"type":"message_start", ...}

event: content_block_delta
data: {"type":"content_block_delta", ...}
...
event: message_stop
data: {"type":"message_stop"}

Un bloque mínimo de nginx para un proxy inverso delante de una API de modelos:

location /v1/ {
    proxy_pass https://upstream.example.com;
    proxy_http_version 1.1;
    proxy_buffering off;
}
  • API returned an empty or malformed response (HTTP 200) aparece cuando el reintento sin streaming también recibe algo que no es un mensaje de la API de Claude, como una página de inicio de sesión en HTML. El turno termina con error (documentación).
  • Unable to connect to API indica que Claude Code no llegó al endpoint; mira nuestras soluciones para Unable to connect to API.
  • Un 529 viene de un proveedor saturado y no tiene que ver con tu proxy; mira Claude Code error 529.

Preguntas frecuentes

¿Puedo ignorar el aviso?

Las respuestas llegan, pero cada turno hace dos peticiones y espera a las dos. Arreglar el proxy elimina el viaje extra.

¿Se puede desactivar el aviso?

No encontramos ningún ajuste para ello en la documentación de Claude Code a fecha de la 2.1.318.

¿Está mal mi clave de API?

Es poco probable. El proveedor aceptó la petición (200); el problema está en lo que le pasó a la respuesta en el camino de vuelta. Los problemas de autenticación muestran otros mensajes, recogidos en nuestra guía de errores de Claude Code.

Fuentes: referencia de errores de Claude Code, protocolo de LLM gateway, notas de streaming de Amazon Bedrock, nginx proxy_buffering, changelog de Claude Code (2.1.239). No encontramos ningún issue de GitHub que cite este mensaje exacto. Revisado el 5 de noviembre de 2026 con Claude Code 2.1.318.

Deja una idea

Tu dirección de correo no se publicará.