Start here. This is the direct spoken answer to practice first.
Overview
Streaming reduces time to first visible output but exposes partial content before the complete result is known.
I stream typed events such as started, text delta, tool status, completed, refused, and failed rather than forwarding raw provider chunks directly. The client renders partial output as provisional and commits the final result only after the terminal event and required validation. Disconnects propagate cancellation where possible, while the server still records the actual provider outcome.