What a provider says supports an answer text. A Citation lives on the
Text it cites, with a byte Span into that text or none for the
whole block, and the Sources behind it. The list is bound to the text
it was resolved against: once the text is edited, Text::citations
reads empty.
A 64-bit FNV-1a hash of a value’s JSON serialization with every object’s
keys in sorted order and every whole number written as an integer, so a
store that reorders keys (Postgres jsonb, sorted-key dumps) or writes
20.0 as 20 never changes it. It is stored as 16 hex digits, since a
store that reads JSON numbers as doubles would round a 64-bit number.
Text. On an assistant turn, native holds the provider item the block
was decoded from, and Text::citations what the provider says supports
it; user and tool-result text leave both empty.
Describes the document media type of the content. Not every provider supports every media type.
Includes also programming languages as document types for providers who support code running.
Convertible to and from MIME type strings.
Whether no block of the choice is an answer
(AssistantContent::is_answer): reasoning, provider-only items and
blank text are not, even when retained in history.
Why a run fails on a turn, or None when it goes on. A turn that will
not replay (StopReason::is_failure, the rule adapt skips it by)
runs none of its tool calls. A turn the provider failed
(StopReason::Error) fails even when it holds an answer, so the caller
never takes as a success a turn the next request leaves out. A turn that
delivered no answer (turn_delivered_no_answer) also fails when the
output budget or a filter cut it (finish is truncating). A turn that
ended at the token limit with a call is finished, so its call runs.
Every runtime reads this one rule.