Content of the message, can be any string
OptionalreasoningThe turn's reasoning blocks in replayable form (see ChatReasoningBlock). thinking
above is the readable text; this is what the driver needs to send the turn back. Copy it onto
the ChatMessage that replays this turn. Absent when the driver keeps none.
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.