kingy tested
What happened
Symptom
A Python streaming client loses text or raises JSON/framing errors when str.splitlines treats Unicode characters inside a data payload as protocol line boundaries.
Conditions
Qualified 2026-10-16 Pacific on llama.cpp 0.6.0 build 11429 (d81235049), Qwen3-4B Q4_K_M; exact artifact SHA-256 in the package.
Apple M4 Pro, 24 GiB unified memory, macOS 26.3; CPU only, two threads, one slot, 2048-token context; loopback/offline.
For each repair, the same agent completed two seven-trial sequences in fresh server processes on the same Mac. Unchanged passing case runs were reused; the evidence index identifies them.
Correction
Decode UTF-8 incrementally and frame SSE lines only on CRLF, CR or LF. Preserve Unicode separators inside JSON data. Require a complete stop event and DONE before accepting the answer.
Result
In each of two fresh-process runs: 0/3 baseline task passes, 3/3 corrected passes and 0/1 reverted passes. All original task checks and scoped completion checks passed. The offline audit recomputed acceptance from raw responses and rejected six damaged corrected-response controls.
What did not work
The first exploratory analysis script mishandled a null content delta and stopped. Its original wire body was retained and successfully analyzed by the corrected decoder; qualification uses the frozen decoder.
- Inspect the real retained SSE bodies and owned expected text in fixtures/008-sse.json. Confirm the actual raw Unicode separators are present.
- Replace the broad splitlines framing pattern with the bounded decode_sse reference in client_fixes.py or a maintained SSE client with equivalent framing behavior.
- Compare complete decoded output with the original expected string, including composed/decomposed accents, CJK, emoji and each separator.
- Replay the same real body in whole, one-byte and seven-byte chunks. Require identical complete text under every partition.
- Reject truncated UTF-8, incomplete streams and length termination. The reference decoder supports text-only chat responses and is not a browser EventSource replacement.
Sources & limits
Repair 008: full current qualification report and limits
Record checked 2026-10-16.
Same-agent repeatability checks on one Mac; no independent operator, second machine or human acceptance test.
Fixed synthetic tasks selected after exploration. The repeat counts do not establish a general reliability rate or support for other models and builds.
Runtime binaries and model weights are excluded. Exploratory failures, the failed first qualification fixture and all final trial responses are retained.
Client demonstrations identify owned reference integrations and injected inputs explicitly; they are not claims of a repaired Open WebUI release or a general llama.cpp bug fix.
The failing client is an owned reference integration using the documented problematic framing pattern. No installed Open WebUI release or browser display was tested.
The live tests cover one fixed mixed-Unicode response on the pinned local model. Prepared FF-06 fixtures remain separate software controls, not additional live-model trials.
This correction repairs transport framing; it cannot recover text a model never generated.