Launch offer: the first 1,000 users get Settl free for a year*Claim your spot
settlbuilding in public

Stream Human-Readable AI Output and Buffer Machine Data

Streaming improves the wait, not the amount of work. The model may still take the same total time, but a person can start reading after the first useful sentence instead of staring at a spinner.

That does not mean every response should stream. A parser cannot safely use half a JSON object.

Choose from the consumer

Stream when the output is prose a person can understand incrementally: an explanation, draft, summary, or long answer.

Buffer when another program needs the complete value: strict JSON, tool arguments, a signed payload, a database record, or anything validated as one unit.

If you want both, use two channels. Stream labeled display text to the UI, then send a separate final structured object after it passes schema validation.

A streamed response needs states

The interface should distinguish:

connecting -> streaming -> complete
                       -> cancelled
                       -> failed

Partial text is not final. Do not enable copy-to-record, send, or save actions until completion. Keep an abort signal from browser to provider, and release the upstream connection when the user cancels.

Handle a stream that fails after useful text appears. Preserve the partial draft if that helps the person, label it incomplete, and offer a deliberate retry. Do not stitch a second model response onto it as if both came from one generation.

Test the infrastructure in the middle

Some proxies and platforms buffer chunks. A local demo can stream perfectly while production holds everything until the connection closes. Test through the real CDN, proxy, and server runtime.

Measure:

Nothing got faster if total completion is unchanged. The product still improved if the user can read, decide, or cancel earlier. Say which metric moved.

Keep structured output whole

Buffer the full model response, parse once, validate the schema, and only then pass it to business logic. Incremental JSON parsers exist, but they do not make incomplete business data safe to act on.

Claude can draft either type of output. Your application decides when bytes become visible and when a result becomes valid.

Run the starter locally

npm test
npm run validate
npm run sample

The dry-run records a stream-or-buffer decision and executes no model call. Docker Compose includes n8n and the Node boundary for a reviewable workflow.

Download the runnable pack

Get the next one in your inbox