From 644a3ad220deab0c6b1f0677a4ac7bc3ed96ce28 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Mon, 29 Sep 2025 17:25:41 +0800 Subject: [PATCH] feat(translator): emit `response.output_item.done` event for reasoning summary completion - Added `response.output_item.done` event emission in OpenAI responses. - Enhanced reasoning output finalization with additional response event for improved tracking. --- .../openai/responses/gemini_openai-responses_response.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go b/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go index 5dabf5c6..ff77e4da 100644 --- a/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go +++ b/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go @@ -78,12 +78,21 @@ func ConvertGeminiResponseToOpenAIResponses(_ context.Context, modelName string, textDone, _ = sjson.Set(textDone, "output_index", st.ReasoningIndex) textDone, _ = sjson.Set(textDone, "text", full) out = append(out, emitEvent("response.reasoning_summary_text.done", textDone)) + partDone := `{"type":"response.reasoning_summary_part.done","sequence_number":0,"item_id":"","output_index":0,"summary_index":0,"part":{"type":"summary_text","text":""}}` partDone, _ = sjson.Set(partDone, "sequence_number", nextSeq()) partDone, _ = sjson.Set(partDone, "item_id", st.ReasoningItemID) partDone, _ = sjson.Set(partDone, "output_index", st.ReasoningIndex) partDone, _ = sjson.Set(partDone, "part.text", full) out = append(out, emitEvent("response.reasoning_summary_part.done", partDone)) + + itemDone := `{"type":"response.output_item.done","sequence_number":0,"output_index":0,"item":{"id":"","type":"reasoning","encrypted_content":"","summary":[{"type":"summary_text","text":""}]}}` + itemDone, _ = sjson.Set(itemDone, "sequence_number", nextSeq()) + itemDone, _ = sjson.Set(itemDone, "item.id", st.ReasoningItemID) + itemDone, _ = sjson.Set(itemDone, "output_index", st.ReasoningIndex) + itemDone, _ = sjson.Set(itemDone, "item.summary.0.text", full) + out = append(out, emitEvent("response.output_item.done", itemDone)) + st.ReasoningClosed = true }