> This page is for NeMo Relay, version v0.8.4.
> For other versions, use one of these documentation indexes:
> - Latest (v0.10.0) (default): https://docs.nvidia.com/nemo/relay/latest/llms.txt
> - dev: https://docs.nvidia.com/nemo/relay/dev/llms.txt
> - v0.10.0: https://docs.nvidia.com/nemo/relay/v0.10.0/llms.txt
> - v0.9.4: https://docs.nvidia.com/nemo/relay/v0.9.4/llms.txt
> - v0.8.4: https://docs.nvidia.com/nemo/relay/v0.8.4/llms.txt
> - v0.7.3: https://docs.nvidia.com/nemo/relay/v0.7.3/llms.txt
> - v0.6.0: https://docs.nvidia.com/nemo/relay/v0.6.0/llms.txt
> - v0.5.0: https://docs.nvidia.com/nemo/relay/v0.5.0/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/relay/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/relay/_mcp/server.

# Module stream

> Streaming LLM response wrapper.

Generated from `cargo doc --no-deps -p nemo-relay -p nemo-relay-adaptive -p nemo-relay-pii-redaction -p nemo-relay-ffi -p nemo-relay-types -p nemo-relay-plugin -p nemo-relay-worker-proto -p nemo-relay-worker`.

Streaming LLM response wrapper.

This module provides [`LlmStreamWrapper`](/reference/api/rust-library-reference/nemo-relay/stream/struct-llmstreamwrapper), a \[`Stream`] adapter that sits between the raw stream from an LLM API and the consumer. It feeds chunks to a user-supplied collector, and automatically emits lifecycle events when the stream ends.

### Pipeline

```rust
raw chunk (Json) -> collector(chunk) -> Ok(()) -> yield chunk
                                     -> Err(e) -> terminate stream with error
upstream error -> terminate stream with error -> finalizer() -> queue END sanitization
stream ends -> finalizer() -> queue END sanitization
```

The **collector** receives each chunk (Json) and can accumulate state (e.g., concatenating tokens). If the collector returns `Err`, the stream terminates immediately with that error. Upstream stream errors also terminate the stream immediately. The **finalizer** is called once when the stream terminates and returns the aggregated response as [`Json`](/reference/api/rust-library-reference/nemo-relay/json/type-json). That aggregated response is queued for sanitize response guardrails before being included in the END event. Stream termination does not await that queued observability work.

## Structs

* [LlmStreamWrapper](/reference/api/rust-library-reference/nemo-relay/stream/struct-llmstreamwrapper): Wraps an inner `Stream<Item = Result<Json>>` of raw chunks and: