Applies CCCL cub/agent/agent_for.cuh design:
- consume_tile<true> skips boundary checks for complete tiles
- consume_tile<false> does per-element bounds checking for tail
- Translated: is_full_tile check on messages array — when all messages
are valid dicts with content (common case), skip entire normalization
loop. Only enter per-element fixup for partial tiles (tool_calls,
reasoning_content, null content messages).