docs: сортировка History по темам (sonnet, opus, llm, sse, ux-frontend, upload, infra, plans, tests, base, code-fixes)
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# 2026-08-19 — Бенчмарк UI: 5 прогонов DownLoads.zip (v0.0.49)
|
||||
|
||||
Набор: `files/DownLoads.zip` (21.9 МБ) → распаковывается в 18 файлов
|
||||
(4 docx + 14 pdf, включая `0144-03-2023_отчет об оценке.pdf` 19.0 МБ).
|
||||
|
||||
Условия: сервер waitress, порт 5059, threads=8, локально.
|
||||
LLM-ключ отсутствует — этап ИИ не выполнялся (0с, в статистике «—»).
|
||||
Итог каждого прогона: «✅ Обработано 18 файлов», кнопки ZIP/CSV, блок статистики.
|
||||
|
||||
## Итоговые метрики (5 прогонов)
|
||||
|
||||
| Прогон | Распаковка zip, мс | Стена UI, с | SSE «общее», с |
|
||||
|--------|--------------------|-------------|----------------|
|
||||
| 1 | 855 | 50.3 | 49.0 |
|
||||
| 2 | 851 | 47.9 | 46.6 |
|
||||
| 3 | 860 | 47.1 | 45.9 |
|
||||
| 4 | 833 | 47.8 | 46.1 |
|
||||
| 5 | 850 | 47.9 | 46.7 |
|
||||
|
||||
- Распаковка: 833–860 мс (Δ 27 мс) — стабильно, ~0.85 с.
|
||||
- SSE «общее»: 45.9–49.0 с (Δ 3.1 с), среднее ≈ 46.9 с.
|
||||
- Стена UI: 47.1–50.3 с (загрузка локально ≈ 1 с).
|
||||
- SSE не рвётся: 5/5 прогонов до конца, по ~50 с каждый.
|
||||
|
||||
## Узкое место — 19 МБ PDF (0144-03-2023_отчет об оценке.pdf)
|
||||
|
||||
Время по прогонам: 25.8 / 24.5 / 26.0 / 25.0 / 25.8 с → стабильно ~25.4 с.
|
||||
Это ~53–55% от общего времени. Причина — pdfplumber extract_text.
|
||||
|
||||
## Время по файлам, среднее по 5 прогонам (с)
|
||||
|
||||
| Файл | Размер | Среднее |
|
||||
|------|--------|---------|
|
||||
| 20_ФИЯР_Порядок распределения…docx | 13.1 KB | 0.04 |
|
||||
| Proxy Voting Form 2026 EGM.docx | 16.1 KB | 0.1 |
|
||||
| допник-1-XXX002-01200_3.docx | 11.9 KB | 0.1 |
|
||||
| Экзаменационный материал…docx | 28.9 KB | 0.2 |
|
||||
| 0144-03-2023_отчет об оценке.pdf | 19.0 MB | 25.4 |
|
||||
| 20_ФИЯР_Регламент проведения ВИ МАГ_2026 (1).pdf | 167.2 KB | 1.1 |
|
||||
| 959399eab8f6a91df785f469b5851574.pdf | 328.7 KB | 1.5 |
|
||||
| EAC_979 419 6577.pdf | 314.1 KB | 0.3 |
|
||||
| examrules_test.pdf | 486.3 KB | 2.3 |
|
||||
| General Terms.pdf | 764.8 KB | 3.8 |
|
||||
| Marshrutnaya_kvitanciya.pdf | 291.1 KB | 0.6 |
|
||||
| P010028436 CERTIFICATE…pdf | 473.7 KB | 0.2 |
|
||||
| P010028436 POLICY…pdf | 623.1 KB | 0.5 |
|
||||
| PR00078013…pdf | 521.4 KB | 1.5 |
|
||||
| Transaction_Confirmation_en…pdf | 70.3 KB | 0.1 |
|
||||
| Лингвистика маг.pdf | 596.5 KB | 2.1 |
|
||||
| Отчет арбитражного управляющего…pdf | 267.4 KB | 3.5 |
|
||||
| ПРОГРАММА ВСТУПИТЕЛЬНЫХ ИСПЫТАНИЙ…pdf | 138.5 KB | 1.9 |
|
||||
|
||||
Сумма средних ≈ 45.3 с — сходится с SSE «общее».
|
||||
|
||||
## Стабильность
|
||||
|
||||
- Всё, кроме 19 МБ PDF, — стабильно: docx 0.0–0.2 с, PDF 0.1–4.3 с.
|
||||
- Погрешность повторов мала; основной вклад — один большой PDF.
|
||||
- Вывод: без LLM прогон 18 файлов (вкл. 19 МБ PDF) ≈ 46–49 с.
|
||||
С LLM добавится этап ИИ (в проде — ключ есть в кластере).
|
||||
@@ -0,0 +1,45 @@
|
||||
# drhider — тесты реальной обфускации и фикс .doc (2026-08-23, v0.0.60–0.0.61)
|
||||
|
||||
_Кластер `naeel-test-3`, v0.0.60 → v0.0.61. Корпус: `/mnt/y/T` (flat+many, 309 файлов pdf/doc/docx)._
|
||||
|
||||
## Проблема: .doc не конвертируется (v0.0.60)
|
||||
Симптом: `.doc`-файлы в ZIP с заглушкой
|
||||
`[DOC — conversion failed: libreoffice: failed to launch javaldx - java may not function correctly]`.
|
||||
|
||||
**Диагностика:**
|
||||
- `.doc` конвертирует сервис **liberta** (`CONVERT_SERVICE_URL` дефолт
|
||||
`https://liberta.containerk8s.dev.nubes.ru/convert`; в деплое не переопределён).
|
||||
- liberta **жива** (200 на `/` и `/health`), последовательный `/convert` — 200 (~3с).
|
||||
- **Под нагрузкой падает**: 5 параллельных `/convert` → 2-3 возвращают 500 `javaldx`
|
||||
(JVM/libreoffice не тянет конкурентность).
|
||||
- drhider конвертировал `.doc` **параллельно** (ThreadPoolExecutor max_workers=4 в `obfuscator.py`)
|
||||
→ бил liberta потоком → часть конверсий падала.
|
||||
|
||||
## Фикс: v0.0.61 — параллельность убрана
|
||||
- `obfuscator.py`: удалён ThreadPoolExecutor — `.doc` конвертируются **последовательно**.
|
||||
- `scanner.py`: `_LLM_CONCURRENCY = 1` — LLM-чанки **последовательно**.
|
||||
- Версия 0.0.60 → 0.0.61.
|
||||
|
||||
## Результаты после фикса (v0.0.61)
|
||||
|
||||
### Контрольный .doc (7 файлов)
|
||||
Все конвертируются по 2.4–3.9с (реальное время), **javaldx-ошибок нет**.
|
||||
Единственный FAIL — `mini_78b` (78 байт, битый файл) → «conversion produced no .docx» (не связано с параллельностью).
|
||||
|
||||
### Полный набор (30 файлов)
|
||||
upload=30, zip=25 (5 мини-PDF пустые), **convfail=1** (только mini_78b), mapping=86,
|
||||
tokens=61983, llm=79.9с, proc=118.9с. Сравнение с v0.0.60 (было 7 convfail) — регрессий нет.
|
||||
|
||||
### Долгий прогон (2×100 файлов)
|
||||
| Сессия | upload | zip | convfail | mapping | tokens | llm | всего |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| SET1 | 100 | 99 | 0 | 430 | 700474 | 985с | 1142.5с |
|
||||
| SET2 | 100 | 98 | 0 | 493 | 671170 | 841с | 972.1с |
|
||||
| Итого | 200 | 197 | **0** | 923 | ~1.37 млн | ~1826с | ~35 мин |
|
||||
|
||||
## Выводы
|
||||
1. `.doc`/liberta починено: **0 ошибок конверсии на 200 файлах**.
|
||||
2. Обфускация на объёме стабильна (923 замены, без регрессий).
|
||||
3. Цена «без параллельности» (по требованию): LLM-этап медленнее
|
||||
(100 файлов ≈ 16–19 мин; с параллельностью было бы ~4× быстрее).
|
||||
4. Файлы вне ZIP (2–3 шт) — битые/пустые PDF (нет текста), не ошибка.
|
||||
@@ -0,0 +1,52 @@
|
||||
# drhider — тесты загрузки и обфускации (2026-08-24, v0.0.62)
|
||||
|
||||
_Кластер `naeel-test-3`, v0.0.62 (лимиты 50МБ/файл, 500МБ/сессия), под 1 CPU / 2 GiB
|
||||
(requests=limits, подтверждено kubectl). ВМ-буфер: `https://contracts.kube5s.ru/drhider-upload/`._
|
||||
|
||||
## Тест 1 — загрузка (upload-only), много + больших файлов
|
||||
|
||||
Корпус: 118 бинарных файлов, 480 МБ (8×45МБ + 10×10МБ + 100×200КБ). Файлы >40МБ — 8 шт.
|
||||
|
||||
| Этап | Результат |
|
||||
|---|---|
|
||||
| PUT на ВМ (P=8, `--resolve` обход DNS) | **119/119 HTTP 201**, 43.4с |
|
||||
| `POST /api/upload_refs` | HTTP 200, 50.8с, `{count:119, session}` |
|
||||
| `GET /api/session_files` | 119 файлов, **480.5 МБ**, 8 больших (>40МБ) |
|
||||
|
||||
**Вывод:** загрузка через ВМ стабильна на объёме 480МБ/119 файлов под лимитом 500МБ, 0 ошибок.
|
||||
|
||||
## Тест 2 — обфускация, много мелких файлов
|
||||
|
||||
Корпус: 100 сгенерированных `.txt`-договоров с фейковыми PII (ФИО, телефоны, ИНН, ОГРН, БИК,
|
||||
р/с, к/с, паспорта, адреса, email). Сессия `bba1a7272aed`.
|
||||
|
||||
| Показатель | Значение |
|
||||
|---|---|
|
||||
| start / done | **101 / 101** (0 ошибок) |
|
||||
| complete | `{total: 101, tokens: 1 569 716, llm_sec: 1924.6}` |
|
||||
| SSE-время | 1995.6с (~33.3 мин) |
|
||||
| ZIP | **404 — НЕ скачался** |
|
||||
| CSV | **404 — НЕ скачался** |
|
||||
|
||||
Обфускация отработала полностью (101 done, complete пришёл, `zip_len=147861` в логе worker),
|
||||
но **результат потерян при скачивании** — см. баг ниже.
|
||||
|
||||
## ⚠️ Найденный баг: TTL сессии (30 мин) короче долгой обфускации
|
||||
|
||||
- `site/session.py`: `TTL_SECONDS = 30*60`, таймер запускается при создании сессии и
|
||||
**не продлевается** во время обработки (`threading.Timer`, `_clean` просто `pop(sid)`).
|
||||
- Обфускация заняла 1995с (> 1800с TTL) → таймер удалил сессию посреди обработки.
|
||||
- `store_result(sid, zip)` при отсутствующей сессии молча возвращает `False` → результат не сохранён.
|
||||
- `GET /api/download/<sid>` и `/api/csv/<sid>` → `get_result`=None → **404**.
|
||||
- Подтверждено: `session_files/bba1a7272aed` → 404; лог: `worker: done ... in 1995.0s ... zip_len=147861`.
|
||||
|
||||
**Почему раньше не всплыло:** в тесте 23.08 каждая сессия завершалась за 19/16 мин < TTL.
|
||||
|
||||
**Предлагаемый фикс:** продлевать TTL при активности обработки (cancel+restart таймера на
|
||||
каждое событие прогресса, либо отдельный длинный TTL для «в обработке», либо сохранять
|
||||
результат даже при истёкшей сессии). **Не делалось — ждёт «делай».**
|
||||
|
||||
## Прочее
|
||||
- Первый прогон теста 1 упал из-за бага тест-скрипта (отправил список вместо `{files:[...]}` в
|
||||
`upload_refs`) — сервис тут ни при чём.
|
||||
- DNS на Krupski медленный (~5с/резолв) — в тестах обходился `curl --resolve`.
|
||||
Reference in New Issue
Block a user