POSTSSE
/api/rag/{espacio}/conversations/streamLa misma pregunta, en vivo
El mismo cuerpo que conversations, pero la respuesta llega por eventos (SSE) mientras se escribe. Sirve para mostrarla a una persona sin hacerla esperar.
- PERMISOlee (vale cualquier clave)
- CRÉDITOSgasta créditos
- AUTENTICACIÓNBearer bth_…
PARÁMETROS
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| espacio | string | SÍ | El id del espacio (sale en GET /api/companies). |
CUERPO · JSON
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| question | string | SÍ | La pregunta. |
| session_id | string | SÍ, EN LA PRÁCTICA | Igual que en conversations. |
| history | array | no | Igual que en conversations. |
EVENTOS
200 con Content-Type: text/event-stream. Cada evento es una línea data: {…} seguida de una línea en blanco. Las líneas que empiezan por : son : keepalive (cada 15 s sin datos): ignóralas.
| CAMPO | TIPO | QUÉ ES |
|---|---|---|
| status | { type, stage: "verifying" } | Solo en espacios con verificación previa: está comprobando antes de generar. |
| chunk | { type, content } | Un pedazo de texto. Al final llega uno con el pie «Referencia: …» si hay fuentes. |
| handoff | { type, handoff_id, reason } | Conviene pasar a una persona (low_confidence o contradiction). Llega antes del done. |
| done | { type, status_code, full_response, confidence, warning, sources } | Cierre normal. Manda su status_code, aunque ya hayan llegado chunks. |
| error | { type, content } | Algo falló después del 200. El stream termina. |
ERRORES DE ESTA RUTA · SIEMPRE {"detail": …}
| STATUS | CUÁNDO | DETAIL LITERAL |
|---|---|---|
| 401 | Antes de abrir el stream: clave inválida | Credencial de servicio inválida o revocada. |
| 402 | Antes de abrir el stream: créditos agotados | — |
| evento | Evento error: el servicio no respondió a tiempo | — |
| evento | Evento error: falta session_id | session_id es obligatorio. |
| evento | Evento error: el servicio está saturado; reintenta con espera creciente | — |
Y los de cualquier ruta —clave inválida, cuenta no al día, IP, límites—, en Errores, límites y créditos.
CONVIENE SABER
- Todo lo que se puede rechazar antes (401, 402, 403, 429) llega como respuesta JSON normal, no como evento. Después del 200, cualquier fallo llega como evento
error. - En espacios con verificación estricta la respuesta llega en un solo
chunk, ya verificada, después de unstatus. - Los
chunkya enviados no se retiran aunque eldonediga"1001": decide con elstatus_codedeldone.