From 2d977a3c4d2f392ba52a18412c065070143c44a7 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Fri, 6 Mar 2026 18:48:34 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20omit=20synthesized=20reasoning=20items?= =?UTF-8?q?=20in=20Chat=E2=86=92Responses=20translation=20(#224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../translator/request/openai-responses.ts | 27 +++---------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/open-sse/translator/request/openai-responses.ts b/open-sse/translator/request/openai-responses.ts index 2091bf9f1a..c623086316 100644 --- a/open-sse/translator/request/openai-responses.ts +++ b/open-sse/translator/request/openai-responses.ts @@ -275,30 +275,11 @@ export function openaiToOpenAIResponsesRequest( // Convert assistant messages if (role === "assistant") { - // Add reasoning content before assistant output - if (msg.reasoning_content) { - input.push({ - type: "reasoning", - id: `reasoning_${input.length}`, - summary: [{ type: "summary_text", text: toString(msg.reasoning_content) }], - }); - } + // Skip reasoning_content — OpenAI Responses API requires server-generated + // rs_* IDs for reasoning items. Synthesizing client-side IDs (e.g. reasoning_N) + // causes 400 errors from Responses-compatible upstreams. (#224) - // Handle thinking blocks in array content - if (Array.isArray(msg.content)) { - for (const blockValue of msg.content) { - const block = toRecord(blockValue); - if (block.type === "thinking" || block.type === "redacted_thinking") { - input.push({ - type: "reasoning", - id: `reasoning_${input.length}`, - summary: [ - { type: "summary_text", text: toString(block.thinking || block.data, "...") }, - ], - }); - } - } - } + // Skip thinking blocks in array content — same rs_* ID constraint applies // Build assistant output content const outputContent: unknown[] = [];