fix(openai): preserve unindexed response output items
This commit is contained in:
@@ -91,6 +91,37 @@ func TestForwardResponsesStreamRepairsEmptyCompletedOutputFromDoneItems(t *testi
|
||||
}
|
||||
}
|
||||
|
||||
func TestForwardResponsesStreamRepairsMixedIndexedAndUnindexedDoneItems(t *testing.T) {
|
||||
h, recorder, c, flusher := newResponsesStreamTestHandler(t)
|
||||
|
||||
data := make(chan []byte, 3)
|
||||
errs := make(chan *interfaces.ErrorMessage)
|
||||
data <- []byte(`data: {"type":"response.output_item.done","output_index":1,"item":{"type":"function_call","id":"fc-1","call_id":"call-1","name":"shell","arguments":"{}","status":"completed"}}`)
|
||||
data <- []byte(`data: {"type":"response.output_item.done","item":{"type":"message","id":"msg-1","role":"assistant","content":[{"type":"output_text","text":"done"}]}}`)
|
||||
data <- []byte(`data: {"type":"response.completed","response":{"id":"resp-1","output":[]}}`)
|
||||
close(data)
|
||||
close(errs)
|
||||
|
||||
h.forwardResponsesStream(c, flusher, func(error) {}, data, errs, nil)
|
||||
|
||||
parts := strings.Split(strings.TrimSpace(recorder.Body.String()), "\n\n")
|
||||
if len(parts) != 3 {
|
||||
t.Fatalf("expected 3 SSE events, got %d. Body: %q", len(parts), recorder.Body.String())
|
||||
}
|
||||
|
||||
payload := strings.TrimPrefix(parts[2], "data: ")
|
||||
output := gjson.Get(payload, "response.output")
|
||||
if !output.IsArray() || len(output.Array()) != 2 {
|
||||
t.Fatalf("expected repaired completed output with 2 items, got %s", output.Raw)
|
||||
}
|
||||
if got := gjson.Get(payload, "response.output.0.name").String(); got != "shell" {
|
||||
t.Fatalf("expected indexed function_call to be preserved first, got %q in %s", got, payload)
|
||||
}
|
||||
if got := gjson.Get(payload, "response.output.1.id").String(); got != "msg-1" {
|
||||
t.Fatalf("expected unindexed message to be appended, got %q in %s", got, payload)
|
||||
}
|
||||
}
|
||||
|
||||
func TestForwardResponsesStreamReassemblesSplitSSEEventChunks(t *testing.T) {
|
||||
h, recorder, c, flusher := newResponsesStreamTestHandler(t)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user