> 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 Responses Streaming Codec

> Streaming counterpart to `OpenAIResponsesCodec`.

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

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

Streaming counterpart to [`OpenAIResponsesCodec`](/reference/api/rust-library-reference/nemo-relay/codec/openai_responses/struct-openairesponsescodec).

Replays the OpenAI Responses SSE event sequence into the same JSON shape the API returns for a non-streaming request (`{id, model, status, output, usage, incomplete_details, ...}`). Once finalized, the assembled JSON can be fed back through [`OpenAIResponsesCodec::decode_response`](/reference/api/rust-library-reference/nemo-relay/codec/openai_responses/struct-openairesponsescodec) to produce the canonical [`AnnotatedLlmResponse`](/reference/api/rust-library-reference/nemo-relay/codec/response/struct-annotatedllmresponse).

## Strategy

The Responses API is a relatively forgiving streaming target because every event carries either the full `response` snapshot (`response.created`, `response.in_progress`, `response.completed`, `response.failed`, `response.incomplete`) or the final-state output item (`response.output_item.done`). We:

1. Track the latest `response` snapshot - terminal events (`completed`/`failed`/`incomplete`) typically carry the complete state including `output`, so we prefer those when present.
2. Track output items by `output_index` - `output_item.done` events deliver the final per-item state, used as a fallback when the terminal `response.output` is missing or empty.
3. Per-token `output_text.delta` and `function_call_arguments.delta` events are ignored because their content is redelivered in the matching `output_item.done` event. Skipping deltas keeps the codec resilient to schema additions and avoids double-accumulation.

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 OpenAIResponsesStreamingCodec`

<pre />

#### `new`

<pre />

Creates a fresh streaming codec with empty accumulator state.

## Trait Implementations

### `impl Default for OpenAIResponsesStreamingCodec`

<pre />

#### `default`

<pre />

### `impl StreamingCodec for OpenAIResponsesStreamingCodec`

<pre />

#### `collector`

<pre />

#### `finalizer`

<pre />