> 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 full documentation content, see https://docs.nvidia.com/nemo/relay/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/relay/_mcp/server.

# Struct OpenAI Chat Streaming Codec

> Streaming counterpart to `OpenAIChatCodec`.

Generated from `cargo doc --no-deps -p nemo-relay -p nemo-relay-adaptive -p nemo-relay-ffi`.

```rust
pub struct OpenAIChatStreamingCodec { /* private fields */ }
```

Streaming counterpart to [`OpenAIChatCodec`](/reference/api/rust-library-reference/nemo-relay/codec/openai_chat/struct-openaichatcodec).

Replays the OpenAI Chat Completions SSE chunk sequence into the same JSON shape returned for a non-streaming request (`{id, object, created, model, choices: [{message, finish_reason}], usage}`). Once finalized, the assembled JSON can be fed back through [`OpenAIChatCodec::decode_response`](/reference/api/rust-library-reference/nemo-relay/codec/openai_chat/struct-openaichatcodec) to produce the canonical [`AnnotatedLlmResponse`](/reference/api/rust-library-reference/nemo-relay/codec/response/struct-annotatedllmresponse).

## Strategy

Chat Completions streams untyped SSE chunks of `{choices: [{index, delta: {...}, finish_reason: ...}]}`. Each delta may carry a `role` (typically only on the first chunk), incremental `content` text, or partial `tool_calls` whose `function.arguments` stream as a JSON-encoded string fragment-by-fragment. Top-level fields (`id`, `model`, `created`) are repeated on every chunk; we capture them once. Final-chunk `usage` is preserved when emitted (only sent when `stream_options.include_usage` is set on the request).

The OpenAI `[DONE]` end-of-stream sentinel is dropped by the SSE event decoder before reaching the collector, so this codec never sees it.

Internal state lives behind `Arc<Mutex<...>>` so the `&self`-produced collector and finalizer closures share access. Each instance is single-use because [`LlmFinalizerFn`](/reference/api/rust-library-reference/nemo-relay/api/runtime/callbacks/type-llmfinalizerfn) consumes the finalize step.

## Implementations

### `impl OpenAIChatStreamingCodec`

<pre />

#### `new`

<pre />

Creates a fresh streaming codec with empty accumulator state.

## Trait Implementations

### `impl Default for OpenAIChatStreamingCodec`

<pre />

#### `default`

<pre />

### `impl StreamingCodec for OpenAIChatStreamingCodec`

<pre />

#### `collector`

<pre />

#### `finalizer`

<pre />