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
Files changed (4) hide show
  1. .dockerignore +5 -1
  2. README.md +1 -1
  3. lumen_formatting.py +7 -9
  4. requirements-dev.txt +2 -2
.dockerignore CHANGED
@@ -7,12 +7,16 @@
7
  .gitignore
8
 
9
  # Тесты и dev-инструменты — не нужны в рантайме, только раздувают образ
10
- test_bot_helpers.py
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 `test_lumen_typing_pace.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
 
 
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
- некоторые модели OpenRouter) игнорирует запрет на таблицы из system_prompt.py
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
- # площадь круга — при том что system_prompt.py прямо запрещает LaTeX и явно
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
- # Зависимости для запуска тестов (test_bot_helpers.py) — не нужны в рантайме,
2
  # ставятся отдельно от requirements.txt, который идёт в Docker-образ.
3
  #
4
  # Использование:
5
  # pip install -r requirements.txt -r requirements-dev.txt
6
- # pytest test_bot_helpers.py -v
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
  # наличия зависели от того, что оказалось установлено в окружении конкретного