When a chat-completions message has no usable content parts (empty array, empty text part, or filtered-out image part), marshalChatInputContent marshalled a nil slice to JSON null. The upstream Responses API rejects a null content field with HTTP 400. Fall back to an empty string instead. Fixes #2515