fix: safety valve only flushes partial openers, not real tags
Long cleanup tags (e.g. collapse summaries) can span 30+ SSE deltas. The safety valve was flushing after 6 deltas regardless, dumping incomplete tags into the output. Now only flushes when buffering a partial opener (<m, <y) that never resolved — never when inside a confirmed tag.
This commit is contained in:
parent
ad2c296ba3
commit
e0af1edadf
1 changed files with 10 additions and 3 deletions
|
|
@ -220,9 +220,16 @@ class SSECleanupFilter:
|
|||
has_close = bool(_TAG_CLOSE_RE.search(self._buf))
|
||||
partial = _has_partial_tag(self._buf)
|
||||
|
||||
# Safety valve: if we've buffered too many deltas without resolving
|
||||
# a tag, this is just prose containing '<' — flush everything.
|
||||
if self._buffered_deltas > self._MAX_BUFFERED_DELTAS and not has_close:
|
||||
# Safety valve: if we've buffered many deltas waiting for a *partial*
|
||||
# opener to resolve (e.g. "<m" that turned out to be prose "<model>"),
|
||||
# flush everything. But NEVER flush when _inside_tag is True — that
|
||||
# means we matched a real opening tag and are waiting for the close.
|
||||
# Real tags (e.g. long collapse summaries) can span 30+ deltas.
|
||||
if (
|
||||
self._buffered_deltas > self._MAX_BUFFERED_DELTAS
|
||||
and not self._inside_tag
|
||||
and not has_close
|
||||
):
|
||||
result = self._buf
|
||||
self._buf = ""
|
||||
self._inside_tag = False
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue