Spaces:
Running
Running
SilverElixir commited on
Commit ·
e9b6d6a
1
Parent(s): 42ce1bc
P3 docs: fix stale formatting comments, requirements-dev name, README test list, dockerignore bloat (AUD-C-002, AUD-N-002, AUD-L-001)
Browse files- .dockerignore +5 -1
- README.md +1 -1
- lumen_formatting.py +7 -9
- requirements-dev.txt +2 -2
.dockerignore
CHANGED
|
@@ -7,12 +7,16 @@
|
|
| 7 |
.gitignore
|
| 8 |
|
| 9 |
# Тесты и dev-инструменты — не нужны в рантайме, только раздувают образ
|
| 10 |
-
|
| 11 |
conftest.py
|
| 12 |
requirements-dev.txt
|
| 13 |
tests.yml
|
| 14 |
.pytest_cache/
|
| 15 |
README.md
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
# Байткод/кэш
|
| 18 |
__pycache__/
|
|
|
|
| 7 |
.gitignore
|
| 8 |
|
| 9 |
# Тесты и dev-инструменты — не нужны в рантайме, только раздувают образ
|
| 10 |
+
test_*.py
|
| 11 |
conftest.py
|
| 12 |
requirements-dev.txt
|
| 13 |
tests.yml
|
| 14 |
.pytest_cache/
|
| 15 |
README.md
|
| 16 |
+
docs/
|
| 17 |
+
assets/
|
| 18 |
+
proxy.ts
|
| 19 |
+
proxy_test.ts
|
| 20 |
|
| 21 |
# Байткод/кэш
|
| 22 |
__pycache__/
|
README.md
CHANGED
|
@@ -109,7 +109,7 @@ pip install -r requirements.txt -r requirements-dev.txt
|
|
| 109 |
pytest -v
|
| 110 |
```
|
| 111 |
|
| 112 |
-
Test files mirror the module split: `test_lumen_formatting.py`, `test_lumen_security.py`, `test_lumen_router_config.py`, and `
|
| 113 |
|
| 114 |
CI (`.github/workflows/ci.yml`) runs `pyflakes` + `pytest` + `pip-audit` on every push and pull request; a successful run triggers `sync-to-hf.yml`, which mirrors the commit to the Hugging Face Space.
|
| 115 |
|
|
|
|
| 109 |
pytest -v
|
| 110 |
```
|
| 111 |
|
| 112 |
+
Test files mirror the module split: `test_lumen_formatting.py`, `test_lumen_security.py`, `test_lumen_router_config.py`, `test_lumen_typing_pace.py`, `test_lumen_images.py`, and `test_lumen_model_speed.py` each test their matching module directly, while `test_bot.py` covers everything defined in `bot.py` itself. `conftest.py` stubs `BOT_TOKEN`/`GEMINI_API_KEY`/`BOT_LOG_PATH` so the suite needs no real secrets.
|
| 113 |
|
| 114 |
CI (`.github/workflows/ci.yml`) runs `pyflakes` + `pytest` + `pip-audit` on every push and pull request; a successful run triggers `sync-to-hf.yml`, which mirrors the commit to the Hugging Face Space.
|
| 115 |
|
lumen_formatting.py
CHANGED
|
@@ -27,10 +27,10 @@ def _split_table_cells(line: str) -> list[str]:
|
|
| 27 |
|
| 28 |
def _convert_markdown_tables_to_lists(text: str) -> str:
|
| 29 |
"""Telegram не рендерит markdown-таблицы НИ В КАКОМ режиме (ни HTML, ни
|
| 30 |
-
MarkdownV2) — реальный найденный при тестировании случай: модель
|
| 31 |
-
|
| 32 |
-
и
|
| 33 |
-
т
|
| 34 |
находит блоки вида "заголовок + строка-разделитель из дефисов + строки
|
| 35 |
данных" и разворачивает их в список пунктов "**Заголовок:** значение",
|
| 36 |
группируя ячейки одной строки в один пункт списка."""
|
|
@@ -69,11 +69,9 @@ def _convert_markdown_tables_to_lists(text: str) -> str:
|
|
| 69 |
# ── Защитная сетка от сырого LaTeX ──────────────────────────────────────────
|
| 70 |
# Реальный найденный при калибровке случай: nemotron-3-nano-30b-a3b:free выдала
|
| 71 |
# "\[ S = \pi r^{2}, \]" и "\(x^{2}+y^{2}=r^{2}\)" вместо юникода в ответе про
|
| 72 |
-
# площадь круга
|
| 73 |
-
#
|
| 74 |
-
#
|
| 75 |
-
# к случайным HTML-тегам в Phase 0 ниже: не полагаемся только на послушание
|
| 76 |
-
# модели, страхуем детерминированной пост-обработкой.
|
| 77 |
_LATEX_SUPERSCRIPT_MAP = {"0": "⁰", "1": "¹", "2": "²", "3": "³", "4": "⁴", "5": "⁵", "6": "⁶", "7": "⁷", "8": "⁸", "9": "⁹", "+": "⁺", "-": "⁻", "n": "ⁿ"}
|
| 78 |
_LATEX_SUBSCRIPT_MAP = {"0": "₀", "1": "₁", "2": "₂", "3": "₃", "4": "₄", "5": "₅", "6": "₆", "7": "₇", "8": "₈", "9": "₉"}
|
| 79 |
# Порядок важен: многобуквенные команды (\times, \infty...) должны замениться
|
|
|
|
| 27 |
|
| 28 |
def _convert_markdown_tables_to_lists(text: str) -> str:
|
| 29 |
"""Telegram не рендерит markdown-таблицы НИ В КАКОМ режиме (ни HTML, ни
|
| 30 |
+
MarkdownV2) — реальный найденный при тестировании случай: модель генерирует
|
| 31 |
+
'|---|---|', пользователь видит вместо аккуратной таблицы сырую кашу из
|
| 32 |
+
символов "|" построчно. Rich-путь (_md_to_rich_html) шлёт настоящие
|
| 33 |
+
<table> (промпт их разрешает), а это — второй рубеж для обычного HTML-пути:
|
| 34 |
находит блоки вида "заголовок + строка-разделитель из дефисов + строки
|
| 35 |
данных" и разворачивает их в список пунктов "**Заголовок:** значение",
|
| 36 |
группируя ячейки одной строки в один пункт списка."""
|
|
|
|
| 69 |
# ── Защитная сетка от сырого LaTeX ──────────────────────────────────────────
|
| 70 |
# Реальный найденный при калибровке случай: nemotron-3-nano-30b-a3b:free выдала
|
| 71 |
# "\[ S = \pi r^{2}, \]" и "\(x^{2}+y^{2}=r^{2}\)" вместо юникода в ответе про
|
| 72 |
+
# площадь круга. Промпт разрешает LaTeX для rich-пути (<tg-math>), а это —
|
| 73 |
+
# второй рубеж для обычного пути: не полагаемся только на послушание модели,
|
| 74 |
+
# страхуем детерминированной пост-обработкой в юникод.
|
|
|
|
|
|
|
| 75 |
_LATEX_SUPERSCRIPT_MAP = {"0": "⁰", "1": "¹", "2": "²", "3": "³", "4": "⁴", "5": "⁵", "6": "⁶", "7": "⁷", "8": "⁸", "9": "⁹", "+": "⁺", "-": "⁻", "n": "ⁿ"}
|
| 76 |
_LATEX_SUBSCRIPT_MAP = {"0": "₀", "1": "₁", "2": "₂", "3": "₃", "4": "₄", "5": "₅", "6": "₆", "7": "₇", "8": "₈", "9": "₉"}
|
| 77 |
# Порядок важен: многобуквенные команды (\times, \infty...) должны замениться
|
requirements-dev.txt
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
-
# Зависимости для запуска тестов (
|
| 2 |
# ставятся отдельно от requirements.txt, который идёт в Docker-образ.
|
| 3 |
#
|
| 4 |
# Использование:
|
| 5 |
# pip install -r requirements.txt -r requirements-dev.txt
|
| 6 |
-
# pytest
|
| 7 |
# pyflakes — обязательный линт-гейт перед каждой поставкой (см. правила проекта),
|
| 8 |
# но раньше нигде не был задекларирован как зависимость — версия и сам факт его
|
| 9 |
# наличия зависели от того, что оказалось установлено в окружении конкретного
|
|
|
|
| 1 |
+
# Зависимости для запуска тестов (test_bot.py, test_lumen_*.py) — не нужны в рантайме,
|
| 2 |
# ставятся отдельно от requirements.txt, который идёт в Docker-образ.
|
| 3 |
#
|
| 4 |
# Использование:
|
| 5 |
# pip install -r requirements.txt -r requirements-dev.txt
|
| 6 |
+
# pytest test_bot.py -v
|
| 7 |
# pyflakes — обязательный линт-гейт перед каждой поставкой (см. правила проекта),
|
| 8 |
# но раньше нигде не был задекларирован как зависимость — версия и сам факт его
|
| 9 |
# наличия зависели от того, что оказалось установлено в окружении конкретного
|