패턴
제대로 된 Python Ollama streaming client가 챙기는 세 가지:
timeout=None— Cold model의 첫 토큰 latency가 수십 초 갈 수 있어. Default httpx timeout이 warm-up 중간에 stream 죽임. None으로 설정하고 server에 맡겨.iter_lines()— HTTP client가 newline까지 buffer하다가 완성된 줄 yield. Raw byte 읽어서 직접 줄 재조립하지 마.flush=True— 토큰 출력할 때. 안 하면 stdio buffer가 streaming 느낌 삼켜.
Production에서 어디 쓰여
이게 자체 backend의 streaming endpoint 빌딩 블록. 피파의 Ollama vessel이 정확히 이 패턴 — Ollama에서 NDJSON stream, 각 chunk를 universal StreamChunk로 변환, JSONL ground truth에 write, frontend로 yield.
흔한 실수
timeout=None잊기. Default timeout이 cold start에서 죽임.- 줄 단위가 아니라 char 단위 buffering.
iter_text()는 network 경계에서 chunk되고,iter_lines()가 경계 문제 처리해줘. - 빈 마지막 chunk 처리 안 함.
done: true가 빈 content와 함께 옴. Print 전에 break.