The .aio surface
Every method on client.models has an async sibling at client.aio.models. Same arguments, same return shape, but you await them. The same trick applies to client.aio.chats, client.aio.files, etc.
Streaming changes the function name
For streaming, the function name itself changes from generate_content to generate_content_stream. The non-streaming variant returns a single response; the streaming variant returns an iterator (sync) or async iterator (async) of chunks.
Why streaming matters
Time to first token (TTFT) on Flash is typically 200–400ms. Time to last token on a 500-word reply is 3–8 seconds. Streaming lets you start rendering at TTFT instead of waiting for the full reply, which feels dramatically faster even though the total time is the same.
Each chunk is a partial GenerateContentResponse
A chunk has the same shape as a full response but with only a slice of text in chunk.text. You concatenate as you go. usage_metadata appears only on the final chunk.