From 0fcc02fbea046c06ea91c5418950f11187cc19dd Mon Sep 17 00:00:00 2001 From: trph <894304504@qq.com> Date: Sun, 29 Mar 2026 22:10:28 +0800 Subject: [PATCH] fix: tighten responses SSE review follow-up --- .../openai/openai_responses_handlers.go | 8 ++++++-- .../openai_responses_handlers_stream_test.go | 18 +++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/sdk/api/handlers/openai/openai_responses_handlers.go b/sdk/api/handlers/openai/openai_responses_handlers.go index 4fb00af6..9d722162 100644 --- a/sdk/api/handlers/openai/openai_responses_handlers.go +++ b/sdk/api/handlers/openai/openai_responses_handlers.go @@ -33,9 +33,13 @@ func writeResponsesSSEChunk(w io.Writer, chunk []byte) { return } if bytes.HasSuffix(chunk, []byte("\n")) { - _, _ = w.Write([]byte("\n")) + if _, err := w.Write([]byte("\n")); err != nil { + return + } } else { - _, _ = w.Write([]byte("\n\n")) + if _, err := w.Write([]byte("\n\n")); err != nil { + return + } } } diff --git a/sdk/api/handlers/openai/openai_responses_handlers_stream_test.go b/sdk/api/handlers/openai/openai_responses_handlers_stream_test.go index 8fa908bb..185a455a 100644 --- a/sdk/api/handlers/openai/openai_responses_handlers_stream_test.go +++ b/sdk/api/handlers/openai/openai_responses_handlers_stream_test.go @@ -35,14 +35,18 @@ func TestForwardResponsesStreamSeparatesDataOnlySSEChunks(t *testing.T) { h.forwardResponsesStream(c, flusher, func(error) {}, data, errs) body := recorder.Body.String() + parts := strings.Split(strings.TrimSpace(body), "\n\n") + if len(parts) != 2 { + t.Fatalf("expected 2 SSE events, got %d. Body: %q", len(parts), body) + } - if !strings.Contains(body, "data: {\"type\":\"response.output_item.done\"") { - t.Fatalf("expected first SSE data chunk, got: %q", body) + expectedPart1 := "data: {\"type\":\"response.output_item.done\",\"item\":{\"type\":\"function_call\",\"arguments\":\"{}\"}}" + if parts[0] != expectedPart1 { + t.Errorf("unexpected first event.\nGot: %q\nWant: %q", parts[0], expectedPart1) } - if !strings.Contains(body, "\n\ndata: {\"type\":\"response.completed\"") { - t.Fatalf("expected blank-line separation before second SSE event, got: %q", body) - } - if strings.Contains(body, "arguments\":\"{}\"}}data: {\"type\":\"response.completed\"") { - t.Fatalf("second SSE event was concatenated onto first event body: %q", body) + + expectedPart2 := "data: {\"type\":\"response.completed\",\"response\":{\"id\":\"resp-1\",\"output\":[]}}" + if parts[1] != expectedPart2 { + t.Errorf("unexpected second event.\nGot: %q\nWant: %q", parts[1], expectedPart2) } }