Streaming 가장 중요한 단 하나의 차이
Cloud API들 (OpenAI, Anthropic, Google)은 Server-Sent Events (SSE)로 stream — 각 chunk가 data: {json}\n\n. Ollama는 newline-delimited JSON (NDJSON)으로 stream — 각 chunk가 그냥 {json}\n. data: prefix 없고 double newline 없어.
SSE 파서를 Ollama에 가리키면 거대한 blob 하나로 보고 영원히 안 오는 data: 기다려. JSON 파서를 Ollama에 가리키면 streaming 응답 전체를 토큰 하나로 읽다가 두 번째 { 만나면 깨져.
NDJSON 줄 하나의 모양
각 줄은 완전히 parsing 가능한 JSON 객체. 흥미로운 필드들:
message.content— 텍스트 delta (토큰 하나 또는 몇 개).done— boolean. Incremental chunk면false, 마지막이면true.- 마지막 chunk만: timing 필드 (
total_duration,eval_count,eval_duration등) — 성능 metric용.
Ollama가 NDJSON 고른 이유
NDJSON이 server쪽 produce 단순, client쪽 parse 단순 (newline split, 각 줄 JSON parse), SSE keep-alive comment ritual 안 필요. 비용은 SSE library 손대기 전에 NDJSON임을 알아야 한다는 거.