# `HuggingfaceClient.Inference.SSE`
[🔗](https://github.com/huggingface/huggingface_client/blob/v0.1.0/lib/huggingface_client/inference/sse.ex#L1)

Server-Sent Events (SSE) parser for streaming inference responses.

Implements the [WHATWG SSE spec](https://html.spec.whatwg.org/multipage/server-sent-events.html)
as a pure Elixir byte-stream parser, faithfully mirroring the logic in
`vendor/fetch-event-source/parse.ts` from the JS package.

## Key properties

- Handles `\r\n`, `\r`, and `\n` line endings
- Accumulates partial lines across chunk boundaries (no data loss)
- Ignores `:comment` lines
- Dispatches a message on each blank line
- Filters `data: [DONE]` sentinel values
- JSON-decodes data fields and surfaces `{"error": ...}` as exceptions

## Example

    chunks = ["data: {"choices":[{}]}\n\n", "data: [DONE]\n\n"]
    Enum.to_list(HuggingfaceClient.Inference.SSE.parse_stream_json(chunks))
    # => [%{"choices" => [%{}]}]

# `event`

```elixir
@type event() :: %{
  id: String.t(),
  event: String.t(),
  data: String.t(),
  retry: non_neg_integer() | nil
}
```

# `parse_stream`

```elixir
@spec parse_stream(Enumerable.t()) :: Enumerable.t()
```

Wraps an enumerable of binary chunks into a lazy stream of parsed SSE events.

Each element is an `%{id, event, data, retry}` map.
`[DONE]` messages and empty-data events are filtered out.

# `parse_stream_json`

```elixir
@spec parse_stream_json(Enumerable.t()) :: Enumerable.t()
```

Parses SSE chunks and JSON-decodes each `.data` field.

Returns a stream of decoded maps. Events where data isn't valid JSON are
logged at `:warning` level and skipped. Events containing `{"error": ...}`
are raised as `ProviderApiError`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
