SilverElixir commited on
Commit
1dfad36
·
1 Parent(s): e04f308

Presplit glued bullets before chunking so lists survive cutting

Browse files
lumen_formatting.py CHANGED
@@ -779,6 +779,9 @@ def _split_text_chunks(text: str, max_len: int = 4096) -> list[str]:
779
  if is_fence:
780
  md_chunks.extend(_chunk_fence_block(seg, max_len))
781
  else:
 
 
 
782
  md_chunks.extend(_chunk_plain(seg, max_len))
783
  out: list[str] = []
784
  for chunk in md_chunks:
 
779
  if is_fence:
780
  md_chunks.extend(_chunk_fence_block(seg, max_len))
781
  else:
782
+ # Слипшиеся буллеты разносим ДО резки: иначе чанкер рвёт список
783
+ # по ". " и куски с 1 маркером мимо порога сплиттера (прод 07.10.2026).
784
+ seg = _split_inline_numbered(_split_inline_bullets(seg))
785
  md_chunks.extend(_chunk_plain(seg, max_len))
786
  out: list[str] = []
787
  for chunk in md_chunks:
tests/test_lumen_formatting.py CHANGED
@@ -127,6 +127,19 @@ def test_split_chunks_merge_short_fenced_message_back():
127
  assert chunks == [text]
128
 
129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  def test_md_to_html_link_with_inline_code_has_no_placeholder_leak():
131
  # Код внутри метки ссылки: плейсхолдер не протекает, оба тега на месте.
132
  html = lumen_formatting._md_to_html("[`code` текст](https://example.com)")
 
127
  assert chunks == [text]
128
 
129
 
130
+ def test_split_chunks_presplit_inline_bullets_before_cutting():
131
+ # Прод 07.10.2026: чанкер резал слипшийся список по ". " до сплиттера,
132
+ # куски с 1 маркером не делились и в чат уходила каша.
133
+ text = (
134
+ "Лучше проприетарные системы, когда: • Требуется гарантированная поддержка "
135
+ "с длинным пояснением для набора длины строки. • Важна интеграция из коробки "
136
+ "с длинным пояснением для набора длины строки. • Нужна безопасность за счет "
137
+ "сокрытия с длинным пояснением для набора длины строки."
138
+ )
139
+ chunks = lumen_formatting._split_text_chunks(text, 4096)
140
+ assert any("\n• " in c for c in chunks)
141
+
142
+
143
  def test_md_to_html_link_with_inline_code_has_no_placeholder_leak():
144
  # Код внутри метки ссылки: плейсхолдер не протекает, оба тега на месте.
145
  html = lumen_formatting._md_to_html("[`code` текст](https://example.com)")