Content of the message, can be any string
Role of the message in the conversation. For completions, this is always 'assistant'.
OptionalthinkingWhen using a reasoning model, this field can contain the reasoning behind the response. Not all providers/models support this field.
OptionaltoolTool calls the model made on this turn, normalized across providers. Absent or empty when the model did not call a tool.
A turn can carry BOTH content and toolCalls — the tool-capable providers structurally
allow it (Anthropic text + tool_use blocks, OpenAI nullable content alongside
tool_calls, Gemini text + functionCall parts) — so this is never an either/or with
content. Equally, nothing downstream may assume content is non-empty on a tool-call
turn: a forced ChatToolChoice usually suppresses text entirely.
Defines the shape of an individual message from the model in response to a chat completion request.