A single chat message, as stored on a thread.
role mirrors common chat-completion roles ("user", "assistant",
"system", "function", "tool", "norole") - Zep passes this through
largely opaquely, so it is kept as a string here rather than a closed enum
to avoid this client rejecting new role values the API adds later.