Files
drhider/History/sonnet/2026-08-20-sonnet-query-review-speed.md
T

45 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Промпт для Sonnet — код-ревью drhider (скорость + сбои)
## Роль
Ты — ревьюер кода. Отвечай ТОЛЬКО по делу: короткие технические тезисы. Без воды, без лирики, без «как было бы здорово», без общих фраз. Каждый тезис — конкретика: файл, функция, строка, суть.
## Ограничение: смотреть ТОЛЬКО эти файлы, нигде больше не рыться
- `drhider/obfuscator.py` — двухпроходный обфускатор (проход 1: извлечение текста + regex + LLM NER; проход 2: замена)
- `drhider/extractor.py` — pdf_to_markdown (pdfplumber), doc_to_markdown (сервис liberta), expand_zips (рекурсия zip, CP437→CP866), защита от zip-бомб
- `drhider/scanner.py` — scan_regex, scan_llm_ner
- `drhider/replacer.py` — apply_replacements (один regex из всех ключей)
- `drhider/llm_client.py` — OpenAI-совместимый клиент, счётчики токенов/времени
- `drhider/builder.py` — build_zip, build_mapping_csv
- `site/routes/api_bp.py` — upload, process_stream (SSE + воркер в потоке), download/csv
- `site/app.py` — create_app, лимиты, setup_logging (LOG_LEVEL/LOG_FILE)
- `site/session.py` — хранение сессий в памяти, TTL 30 мин, MAX_SESSION_BYTES
- `site/templates/index.html` — фронт: нативный unzip, таблица, SSE-прогресс, таймеры, лимиты 100МБ/1ГБ
Не читай README, docs, History, tests, Dockerfile, ничего про деплой.
## Контекст: сбои, которые были (объясни каждый, если увидишь первопричину в коде)
1. «SSE connection failed» при живом воркере. Выяснено: воркер падал на битом PDF — `PDFSyntaxError('No /Root object!')` в `extract_text` не был обёрнут по-файлово; после фикса (skip битого файла) SSE доходит до complete. Подтверди/опровергни по коду, есть ли ещё места, где одна ошибка файла роняет весь проход.
2. Кракозябры кириллицы в именах zip. Причина: Info-ZIP пишет UTF-8 без флага 0x800 → декодер `encode(cp437).decode(cp866)` ломает. Проверь `_decode_name` в extractor.py: покрывает ли оба реальных сценария (CP866 без флага и UTF-8 с флагом), есть ли дыры.
3. HTTP 413 при загрузке. Лимиты: MAX_CONTENT_LENGTH=200MB (запрос), MAX_SESSION_BYTES=500MB (сессия). Фронт пускает до 100МБ/файл и 1ГБ/сумма — рассинхрон фронт/бэк. Отметь.
## Главная задача: предложи БОЛЕЕ БЫСТРУЮ логику обработки
Известные факты производительности (факты, не догадки):
- pdfplumber на скане Spartan10Manual.pdf 14.8 МБ — 70–470 секунд на извлечение текста.
- Большой PDF 19 МБ — ~25–26 с на extract_text.
- LLM NER — один общий вызов на все файлы, ~1.8с на маленьком наборе, зависит от числа токенов.
- apply_replacements оптимизирован (один regex), но проверить, нет ли лишней работы.
Что хочешь от тебя:
- Где реальные узкие места в коде (не «вообще», а конкретные функции/строки).
- Конкретные предложения ускорения: что менять, как, ожидаемый эффект. Без «использовать PyMuPDF» — уже пробовали, теряет таблицы (94 vs 40), ТАБЛИЦЫ КРИТИЧНЫ. Учитывай это ограничение.
- Можно ли ускорить без смены pdfplumber (параллельность страниц, кэши, ограничение повторных парсингов, предобработка)?
- Есть ли дублирующая работа между проходами 1 и 2 (например, повторный парсинг/чтение)?
- Безопасно ли распараллелить извлечение текста по файлам (потоки/GIL)? Если да — как.
## Формат ответа
- Секция «Сбои»: по каждому — подтверждение/опровержение по коду + где именно.
- Секция «Узкие места»: список файл:строка + суть + почему.
- Секция «Предложения ускорения»: пронумерованный список, каждый пункт: что/где/как/эффект/риски.
- Секция «Итог»: 3–5 самых важных действий по приоритету.
- Максимум — сухо, без воды.