AI / LLM Dev Tools

SSE parserRead every dispatched event

Paste a captured stream or open a local UTF-8 file. The event list follows the blank-line dispatch rules; select a row to inspect its data.

SSE parser

SSE stream input

Parsed events

Event list

No dispatched events yet.

Pasted text and local files stay in this browser. No endpoint request is sent.

Input changed. Parse again before exporting.

An API log contains many data lines, yet your client appears to receive fewer messages. The SSE parser shows which blocks actually dispatch and which final block was left unfinished.

Use this SSE event viewer to inspect a capture without reconnecting to the server. It preserves raw data beside an optional JSON view, so a plain-text marker such as [DONE] remains an event rather than an invented protocol error.

Why use this SSE parser?

See the event stream the way an EventSource client would dispatch it.

Find the block that never became an event

The SSE parser treats a blank line as the dispatch boundary. A capture ending after only one newline keeps its last block out of the event list and points to its starting line, matching the browser rule instead of guessing an extra event.

Several stream blocks separated by blank lines become event cards, while an unfinished final block remains outside the event list.

Keep text and JSON views distinct

For each dispatched event, raw data remains intact. A valid JSON payload can be expanded for reading; malformed JSON-looking text and a [DONE] marker stay visible without erasing the SSE event. This makes the SSE parser useful for mixed AI and ordinary streams.

One selected event shows its unchanged raw data beside a structured JSON inspection card; a separate text marker remains plain text.

Trace a capture without changing its meaning

01

Choose a complete capture

Open a UTF-8 file or replace the sample with pasted text. The basic, AI-style and boundary examples reveal different cases; replacing existing input first shows line and byte counts and can be undone.

02

Watch the dispatch boundary

Auto parse waits 350 ms after edits. Turn it off to run the SSE stream parser with the button or Ctrl/Cmd+Enter. An input edit immediately disables export until the current capture has been parsed again.

03

Read detail before export

Select an event to compare inherited ID, retry and raw data. The list reveals 50 events at a time; JSON array or NDJSON export always includes every dispatched event, even when an event-type filter hides rows on screen.

Inspect the fields that explain a stream

Protocol-accurate event boundaries

LF, CRLF and CR are accepted as line endings. Consecutive data fields join with LF; a block without data dispatches nothing. The SSE parser records original line ranges beside each emitted event.

Follow IDs and retry values

An ID persists into later events until an empty id clears it. Only ASCII digits update retry milliseconds; an invalid retry is diagnosed and the earlier value remains visible.

Inspect mixed payloads

Strict JSON parsing marks a structured payload, while arbitrary text remains valid SSE data. A JSON-looking failure receives a separate warning and never removes its event.

Export a complete event set

Copy or download all dispatched events as a JSON array or one JSON object per NDJSON line. Event type filtering changes the visible list only, so the export scope stays predictable.

Know what an offline capture can prove

No live endpoint connection
This SSE parser reads pasted or local UTF-8 captures. It never sends a request, adds credentials, bypasses CORS or confirms whether a server reconnects. A retry field is parsed as a value, not tested against a server.
A final blank line matters
A block that reaches end of file without a blank line is discarded under the EventSource parsing rule. The diagnostic names its input line; the tool does not silently repair the capture or manufacture a last event.
Data does not have to be JSON
The data field is text. JSON inspection is optional and strict; a [DONE] marker is neither JSON nor a universal stop command. Invalid JSON-looking text is reported separately from SSE field parsing.
Finite local input
The SSE event viewer accepts at most 2 MiB of UTF-8 input and rejects invalid UTF-8 files instead of loading a partial result. For larger logs, split the capture before opening it here.
No provider-specific reconstruction
The tool does not merge OpenAI or Anthropic token deltas, construct streams, repair lines, or run JSONPath and regex searches. Those actions require a different schema or editing workflow; this page keeps the original event sequence inspectable.

SSE parser questions

Why does the parser show fewer events than I expected?

Only a blank line dispatches a data-bearing block. A final block ending after one line break is not emitted, and comment-only or retry-only blocks create no event. The diagnostics point to those lines.

Can I parse SSE streams from APIs other than OpenAI and Anthropic?

Yes. The SSE parser reads the standard event, data, id and retry fields without assuming a provider schema. It does not reconstruct a model's final response from token fields.

Why does my Anthropic stream show many events with no content?

Some provider events may carry metadata or control payloads. This page shows each dispatched SSE event and its raw data; it does not decide which provider-specific field should count as generated text.

Is this tool private?

Yes. Pasted captures and local files are processed in this browser. The SSE parser does not send their contents to a server or connect to a live endpoint.

Why is the python client not receiving SSE events?

This offline page cannot inspect the Python connection. In a saved capture, first check whether each data block ends with a blank line; a final block without one is not dispatched. Then inspect the client's buffering and HTTP response separately.

Still investigating a stream?

Inspect the next capture with the SSE parser

Start with a short example, then open the saved stream you need to explain. Keep its raw data in view while you check exactly which events were dispatched.

All parsing happens in your browser.