diff --git a/openai/responses.go b/openai/responses.go index 4420eec53..4caa564b6 100644 --- a/openai/responses.go +++ b/openai/responses.go @@ -281,7 +281,10 @@ func unmarshalResponsesInputItem(data []byte) (ResponsesInputItem, error) { } return reasoning, nil default: - return nil, fmt.Errorf("unknown input item type: %s", typeField.Type) + if itemType == "" { + return nil, fmt.Errorf("input item missing required 'type' field") + } + return nil, fmt.Errorf("unknown input item type: %q", itemType) } } diff --git a/openai/responses_test.go b/openai/responses_test.go index 3d08f2aa5..bcc79ce19 100644 --- a/openai/responses_test.go +++ b/openai/responses_test.go @@ -253,6 +253,29 @@ func TestUnmarshalResponsesInputItem(t *testing.T) { if err == nil { t.Error("expected error, got nil") } + if err != nil && err.Error() != `unknown input item type: "unknown_type"` { + t.Errorf("unexpected error message: %v", err) + } + }) + + t.Run("missing type field", func(t *testing.T) { + _, err := unmarshalResponsesInputItem([]byte(`{"content": "hello"}`)) + if err == nil { + t.Error("expected error for missing type, got nil") + } + if err != nil && err.Error() != "input item missing required 'type' field" { + t.Errorf("unexpected error message: %v", err) + } + }) + + t.Run("empty type field", func(t *testing.T) { + _, err := unmarshalResponsesInputItem([]byte(`{"type": ""}`)) + if err == nil { + t.Error("expected error for empty type, got nil") + } + if err != nil && err.Error() != "input item missing required 'type' field" { + t.Errorf("unexpected error message: %v", err) + } }) }