| from __future__ import annotations |
|
|
| import re |
|
|
| EOS_STOP = "<|end▁of▁sentence|>" |
| _NONTEXT_LINE_RE = re.compile(r"(?m)^[ \t]*(?:\[\s*Non(?:[ -]?Text)\s*\]|NonText)[ \t]*(?:\n|$)") |
|
|
|
|
| def _replace_complete_tags(text: str, opening: str, closing: str, *, preserve_content: bool) -> str: |
| """Replace only complete exact tag pairs; malformed input is preserved.""" |
| chunks: list[str] = [] |
| cursor = 0 |
| while True: |
| start = text.find(opening, cursor) |
| if start < 0: |
| chunks.append(text[cursor:]) |
| break |
| end = text.find(closing, start + len(opening)) |
| if end < 0: |
| chunks.append(text[cursor:]) |
| break |
| chunks.append(text[cursor:start]) |
| if preserve_content: |
| chunks.append(text[start + len(opening) : end]) |
| cursor = end + len(closing) |
| return "".join(chunks) |
|
|
|
|
| def clean_model_output(text: str) -> str: |
| """Remove exact model sentinels while preserving recognized content verbatim.""" |
| if text.endswith(EOS_STOP): |
| text = text[: -len(EOS_STOP)] |
| text = _replace_complete_tags(text, "<|ref|>", "<|/ref|>", preserve_content=True) |
| text = _replace_complete_tags(text, "<|det|>", "<|/det|>", preserve_content=False) |
| text = _NONTEXT_LINE_RE.sub("", text) |
| return text.strip() |
|
|
|
|
| def repetition_warning(text: str) -> str | None: |
| """Return a warning for obvious terminal repetition loops.""" |
| lines = [line.strip() for line in text.splitlines() if line.strip()] |
| for index in range(2, len(lines)): |
| if lines[index] == lines[index - 1] == lines[index - 2] and len(lines[index]) >= 8: |
| return f"repeated line detected three times: {lines[index][:80]!r}" |
|
|
| compact = re.sub(r"\s+", " ", text).strip() |
| for width in (64, 48, 32): |
| if len(compact) >= width * 3: |
| tail = compact[-width:] |
| if compact[-width * 3 :] == tail * 3: |
| return f"repeated {width}-character suffix detected" |
| return None |
|
|