From a53ccf1343c16d446fcad75b7689848bbf6f015f Mon Sep 17 00:00:00 2001 From: Anurag Saxena Date: Mon, 6 Apr 2026 22:46:28 -0400 Subject: [PATCH] fix: strip reasoning_content from non-streaming responses (closes #509) (#517) --- open-sse/handlers/chatCore/nonStreamingHandler.js | 8 ++++++++ open-sse/handlers/chatCore/sseToJsonHandler.js | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/open-sse/handlers/chatCore/nonStreamingHandler.js b/open-sse/handlers/chatCore/nonStreamingHandler.js index 3b42612..93d3d88 100644 --- a/open-sse/handlers/chatCore/nonStreamingHandler.js +++ b/open-sse/handlers/chatCore/nonStreamingHandler.js @@ -185,6 +185,14 @@ export async function handleNonStreamingResponse({ providerResponse, provider, m translatedResponse.usage = filterUsageForFormat(addBufferToUsage(translatedResponse.usage), sourceFormat); } + // Strip reasoning_content — some clients (e.g. Firecrawl AI SDK) have JSON parsers that + // break on this non-standard field, even though OpenAI allows it in extensions. + if (translatedResponse?.choices) { + for (const choice of translatedResponse.choices) { + if (choice?.message) delete choice.message.reasoning_content; + } + } + reqLogger.logConvertedResponse(translatedResponse); const totalLatency = Date.now() - requestStartTime; diff --git a/open-sse/handlers/chatCore/sseToJsonHandler.js b/open-sse/handlers/chatCore/sseToJsonHandler.js index a3a69a1..b7fabe3 100644 --- a/open-sse/handlers/chatCore/sseToJsonHandler.js +++ b/open-sse/handlers/chatCore/sseToJsonHandler.js @@ -210,6 +210,13 @@ export async function handleForcedSSEToJson({ providerResponse, sourceFormat, pr status: "success" }, { endpoint: clientRawRequest?.endpoint || null })).catch(() => {}); + // Strip reasoning_content — breaks JSON parsers in some clients (e.g. Firecrawl AI SDK) + if (parsed?.choices) { + for (const choice of parsed.choices) { + if (choice?.message) delete choice.message.reasoning_content; + } + } + return { success: true, response: new Response(JSON.stringify(parsed), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }) }; } catch (err) { console.error("[ChatCore] Chat Completions SSE→JSON failed:", err);