Spoold Logo
Home

LLM stream log viewer

SSE / NDJSON stream pretty-printer

Paste raw Server-Sent Events (data: lines) or one JSON object per line (NDJSON). We reconstruct assistant text and merge OpenAI-style tool-call argument fragments.

FormatDetected: ndjson · 0 JSON chunks
Input
Assistant text
— No text deltas found —
Tool calls (merged)

— None —

Guide: LLM stream log viewer

↑ Back to tool

What is this tool?

A free LLM streaming log viewer and SSE / NDJSON pretty-printer for pasted captures. When you debug Chat Completions, Responses API-style streams, or Anthropic Messages streams, raw logs are often Server-Sent Events (data: lines) or newline-delimited JSON (one JSON object per line). This page parses chunks in your browser, reconstructs assistant text from deltas, and merges OpenAI-style tool_call argument fragments by index. Use it to read DevTools Network tabs, terminal redirects, or saved log files — not for live proxying or production logging.

Common names & synonyms

The same workflow goes by many names — this page is an LLM stream log viewer, SSE stream pretty-printer, OpenAI streaming response debugger, Chat Completions chunk parser, GPT stream log viewer, NDJSON LLM output viewer, assistant delta reconstructor, function calling / tool_calls merge tool, Anthropic Messages stream viewer, text/event-stream log viewer, JSON Lines stream parser, and Server-Sent Events JSON viewer. If you searched for “pretty print OpenAI stream”, “parse SSE data lines”, “merge streaming tool_calls”, or “DevTools LLM response copy”, you are in the right place.

  • Vendor-neutral — Works on pasted logs that follow OpenAI-style choices[] chunks, Anthropic content_block_delta, or simple text/token NDJSON.
  • Not the same as — A live API client, tokenizer, or billing dashboard; it only helps you read captured stream text offline.

SSE & NDJSON

  • Auto — If any non-empty line starts with data:, the parser uses SSE mode; otherwise NDJSON.
  • SSE — Processes lines whose trimmed form starts with data:; JSON follows the prefix. Lines data: [DONE] and comment lines (:) are skipped.
  • NDJSON — Each non-empty line must be a single JSON object. Multi-line pretty-printed JSON is not auto-joined; reformat to one chunk per line or use SSE mode with data: lines.

Glossary

  • SSEServer-Sent Events; HTTP stream where the server pushes lines (often Content-Type: text/event-stream). LLM APIs wrap JSON in data: … lines.
  • NDJSON / JSON LinesNewline-delimited JSON: one JSON value per line — common for aggregated logs or batch exports.
  • Delta — A partial update in a stream chunk (e.g. choices[0].delta) — many deltas concatenate into the final assistant message.
  • tool_calls / function calling — Model-emitted tool use; streaming APIs often split function.name and function.arguments across many chunks — this tool merges them by index.
  • [DONE] — Sentinel line in many OpenAI-style SSE streams meaning the stream ended (we skip it when parsing).

API chunk shapes (best-effort)

  • OpenAI-stylechoices[0].delta.content for streaming text; choices[0].delta.tool_calls for incremental function arguments; optional choices[0].message.tool_calls for final tool payloads; choices[0].finish_reason when present.
  • Anthropic Messages streamtype: "content_block_delta" with delta.type === "text_delta" and delta.text appends to assistant text. Tool streaming shapes may differ; unsupported lines may show as parse errors.
  • Generic NDJSON — Top-level text or token string fields are concatenated when present (simple adapters / lab logs).

Features

  • Assistant text panel — Rebuilt string from content deltas; shows finish reason when seen.
  • Merged tool calls — One block per tool index; arguments pretty-printed when valid JSON.
  • Copy — Copy assistant text or per-call arguments.
  • Demos — Built-in text stream and tool-call stream samples.
  • localStorage — Draft text and format mode persist as spoold-stream-log (best effort).
  • Parse errors — Non-JSON lines listed with line number and snippet (capped list in UI).

How to use

  1. Capture — Copy raw stream output from browser DevTools, a CLI log, or a .txt file.
  2. Paste — Into the input area. Use Auto or force SSE / NDJSON if detection is wrong.
  3. Read — Check reconstructed assistant text and merged tool calls on the right.
  4. Copy — Copy text or arguments for tickets, docs, or diffs.
  5. Optional — Try Load text demo or Load tool-call demo to see the layout.

Use cases

ScenarioHow this helps
Streaming bugsSee the final assistant string and tool JSON without manually stitching JSON lines.
Function-calling QAVerify merged arguments after fragmented deltas.
Support & reprosPaste a redacted log into a ticket with a readable reconstruction.
TeachingShow how SSE chunks relate to the final reply vs tool payloads.

Limits

  • Best-effort parsing — Provider schemas and beta APIs change; unknown shapes may appear as invalid lines.
  • No live stream — Paste-only; this is not a proxy or WebSocket client.
  • Secrets — Don't paste API keys or PII you wouldn't put in a local editor.
  • Token / cost math — Use the Token calculator or your provider's usage API for billing counts.

Vendors: OpenAI streaming response debug, chat completions stream log, Responses API stream parse, GPT-4 streaming chunk viewer, OpenAI DevTools copy stream, Anthropic stream log pretty print, Claude streaming JSON viewer, Gemini stream paste (shape-dependent).

Formats: SSE data line parser, Server-Sent Events JSON viewer, text/event-stream log viewer, NDJSON LLM log viewer, parse event stream data lines, online SSE JSON prettifier, JSON Lines stream parser.

Tools: tool_calls merge online, function calling arguments merge, streaming delta content concatenator, LLM API stream inspector, assistant delta reconstructor.

Also known as: stream replay viewer, chunk log decoder, multimodal stream text extractor (text path only), Cursor / IDE adjacent debugging (paste from terminal), CI log pretty-print, and triage when fragmented arguments breaks JSON. Pair with Token calculator and JSON format — not every vendor uses the same JSON shape.

FAQ

Is the stream log viewer free?

Yes. Parsing runs entirely in your browser.

How do I copy an OpenAI stream from Chrome DevTools?

Open Network, select the streaming request, open the Response or EventStream panel (wording varies by browser), and copy the raw body text — or save HAR and extract the stream lines. Paste the SSE or NDJSON here.

What is SSE vs WebSocket?

SSE is one-way HTTP streaming (typical for many LLM chat streams). WebSockets are bidirectional; this tool does not connect over WS — paste captured text only.

Why are some lines listed as invalid JSON?

Only lines that parse as a single JSON object (after the data: prefix in SSE mode) are treated as chunks. Heartbeats, metadata lines, or multi-line JSON may fail — adjust the capture or split lines.

Does this match OpenAI’s billing token count?

No. It reconstructs text and tool arguments for readability. Use your provider’s tokenizer or dashboard for exact token usage.

Can I use this for Gemini or other APIs?

Only if chunks match supported shapes (e.g. OpenAI-like choices, Anthropic content_block_delta, or generic text/token fields). Otherwise you may see parse errors or empty panels.

What does Auto format detection do?

If any non-empty line starts with data:, the parser treats the paste as SSE; otherwise it expects NDJSON (one JSON object per line).

Similar tools

Format, diff, and HTTP debugging on Spoold:

Conclusion

Use LLM stream log viewer to turn noisy SSE or NDJSON captures into readable assistant output and merged tool calls. Pair with JSON format for pretty payloads, Token calculator for length estimates, and curl compare when debugging HTTP differences.