Lee un stream SSE de chat
Con stream: true, la API de chat compatible con OpenAI responde con Server-Sent Events. Junta los fragmentos de texto y para en [DONE].
Un stream SSE llega como texto con una línea por evento: data: {json}. Cada JSON trae el fragmento en choices[0].delta.content, que puede faltar (por ejemplo, el primer evento solo trae role). Las líneas que empiezan por : son comentarios (keep-alive) y las vacías separan eventos.
Escribe parseSSE(text) que devuelva el texto completo. Ignora comentarios, líneas vacías y cualquier línea que no empiece por data:. Cuando llegue data: [DONE], para: lo que venga después no cuenta. El espacio tras data: es opcional.
La variable SAMPLE contiene un stream de ejemplo.
Un reto más usa LIVE: la salida real de tu propio Ollama si activas «Mi Ollama», o una muestra distinta si no. Ese reto mira la estructura, no las palabras exactas.
Retos 0/5
- Junta el texto de SAMPLE
- Ignora eventos sin content (no añade 'undefined')
- Para en data: [DONE]
- Acepta data: sin espacio e ignora otras líneas
- Funciona con el stream real de tu modelo (Mi Ollama) o con otra muestra
function parseSSE(text) {
// 1. separa en líneas
// 2. quédate solo con las líneas que empiezan por 'data:'; para en [DONE]
// 3. JSON.parse y añade choices[0].delta.content cuando exista
let out = '';
for (const line of text.split('\n')) {
if (line.startsWith('data: ')) {
const chunk = JSON.parse(line.slice(6));
out += chunk.choices[0].delta.content;
}
}
return out;
}
try { console.log(parseSSE(SAMPLE)); } catch (e) { console.error(e.message); }Para profundizar: la referencia de MDN (en inglés) →
¿Esto en producción, con tus datos? Hablemos 15 minutos →