Provider-neutral chat message.
@type role() :: :system | :user | :assistant | :tool
@type t() :: %Inference.Message{ content: String.t(), metadata: map(), name: String.t() | nil, role: role() }
@spec new(t() | map() | keyword()) :: {:ok, t()} | {:error, Inference.Error.t()}
@spec roles() :: [role()]