From 3eafe7a9a06fe059a5a8d85f50e47ba3d4839f2d Mon Sep 17 00:00:00 2001 From: tbosancheros39 <274782549+tbosancheros39@users.noreply.github.com> Date: Wed, 24 Jun 2026 19:02:58 +0200 Subject: [PATCH] fix(proxy): Buffer/String + [DONE] ordering crashes Bug 1: eventsource-parser.feed() expected string but HTTP data event delivered Buffer. Convert chunk to string before parsing. Bug 2: finish_reason JSON.parse ran before [DONE] guard check. Move [DONE] guard above the JSON.parse call. Both crash the proxy on the first streaming chat request. Fixes #1 --- proxy/proxy.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/proxy/proxy.js b/proxy/proxy.js index f08e26e..566ad39 100644 --- a/proxy/proxy.js +++ b/proxy/proxy.js @@ -189,6 +189,8 @@ function createStreamParser(sessionId, onComplete) { const line = event.event ? `event: ${event.event}\ndata: ${event.data}\n\n` : `data: ${event.data}\n\n` chunks.push(line) + if (!event.data || event.data === '[DONE]') return + if (event.event === 'done' || JSON.parse(event.data || '{}')?.choices?.[0]?.finish_reason) { if (reasoningBuffer) { onComplete(assistantIndex, reasoningBuffer) @@ -198,8 +200,6 @@ function createStreamParser(sessionId, onComplete) { return } - if (!event.data || event.data === '[DONE]') return - try { const parsed = JSON.parse(event.data) const delta = parsed.choices?.[0]?.delta @@ -222,7 +222,7 @@ function createStreamParser(sessionId, onComplete) { return { feed(chunk) { chunks.length = 0 - parser.feed(chunk) + parser.feed(typeof chunk === 'string' ? chunk : chunk.toString('utf8')) return chunks.join('') }, flush() {