ModelChunk
One item of a Model.send stream: a text delta, a finished output part, the final done chunk, or one terminal rejected chunk when the send failed before any content.
A union discriminated by kind.
delta
kind"delta"required"delta": a piece of streamed text, shown live and not recorded on its own.
partnumberrequiredThe index this text will have in the committed response content (text parts only). An adapter that can't name it sends no deltas; the parts still arrive whole.
textstringrequiredThe new text of that part since its last delta.
part
kind"part"required"part": one finished output part.
partOutputPartrequiredThe finished part (text, tool call, reasoning or hosted tool result). Parts are recorded in the order they arrive.
done
kind"done"required"done": the last chunk of a successful send, with its stop reason and usage.
stop_reasonModelResponseEvent.data.stop_reasonrequiredOnly end_turn, stop_sequence and refusal complete a turn; tool_use dispatches; max_tokens continues; pause_turn re-requests with the paused content as-is, up to context.max_pause_continuations; context_window_exceeded ends the turn context_exhausted; other (a reason the adapter can't name) ends it error.
usageUsagerequiredPer-field measured-or-unknown usage.
rejected
kind"rejected"required"rejected": the send failed before any content; always the stream's only and last chunk.
reason"rate_limited" | "overloaded" | "server_error" | "prompt_too_long" | "provider_error" | "stale_epoch" | "content_unsupported" | "continuation_unsupported" | "transport_fence_unsupported"requiredThe terminal error of a send: exactly Model.send returns.errors. Provider classes are recorded as model_attempt_abandoned{provider_outcome: failed}; stale_epoch appends nothing (the writer lost its lease); content_unsupported, continuation_unsupported and transport_fence_unsupported are recorded as not_sent and end the turn with that code, never retried.
http_statusnumberThe provider's HTTP status code (for example 429 or 529), recorded with the abandoned attempt. Omitted when there was no HTTP response.
retry_after_msnumberThe provider's retry-after hint in milliseconds. When present the retry waits this long instead of backing off, and a hint longer than the retry policy's max_retry_after_ms ends the turn. Omitted when the provider gave none.
billingModelAttemptAbandonedEvent.data.billingnot_billed only when provider_outcome is not_sent or the adapter's declared billing contract (in the system prompt adapter settings) states this rejection class is not billed; a status code alone is not proof.