fix(indexer): понятная ошибка, если загруженный "PDF" на самом деле не PDF
Живой репорт: проверка плагиата упала с "Не удалось открыть PDF: code=7: no objects found" — сырая внутренняя ошибка MuPDF. Разобрал файл из MinIO: это HTML-страница (веб-интерфейс роутера D-Link DAP-400P), сохранённая с расширением .pdf — 2049 байт, не PDF вообще. Система корректно отказалась парсить мусор (это не баг пайплайна — реальный битый/не-PDF файл юзера), но сообщение об ошибке было нечитаемым. extract_text_from_pdf теперь проверяет magic-байты (%PDF-) ДО попытки fitz.open() и даёт понятное "Файл повреждён или не является PDF-документом" для этого частого случая; для настоящих PDF с внутренней порчей — прежнее поведение (сырая ошибка MuPDF как detail, для диагностики). 4 юнит-теста (валидный PDF, HTML под видом PDF, пустые байты, битый заголовок PDF). Тестов всего: 122 (было 118). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -208,7 +208,7 @@ docker compose -f docker-compose.prod.yml --profile observability up -d promethe
|
||||
|
||||
1. **Линт** — `ruff` (весь Python) + `mypy` (чистая доменная логика).
|
||||
Конфиги: [`ruff.toml`](ruff.toml), [`mypy.ini`](mypy.ini).
|
||||
2. **Юнит-тесты** — `pytest` по сервисам: 118 тестов на ядро детекции, скоринга,
|
||||
2. **Юнит-тесты** — `pytest` по сервисам: 122 теста на ядро детекции, скоринга,
|
||||
парсеров, форматирования и OAuth, без внешней инфры (БД/Redis/GPU/Ollama
|
||||
замоканы либо не нужны).
|
||||
|
||||
@@ -231,6 +231,7 @@ make test-one SVC=worker-gost # тесты одного сервиса
|
||||
| L2 — нечёткие (MinHash LSH) | `worker-indexer/app/algorithms/minhash.py` | 6 |
|
||||
| Разбиение на фрагменты | `worker-indexer/app/fragments.py` | 5 |
|
||||
| Автопополнение корпуса | `worker-indexer/app/staging.py` | 6 |
|
||||
| Извлечение текста из PDF | `worker-indexer/app/extractors/pdf.py` | 4 |
|
||||
| L3 — семантический индекс (FAISS) | `worker-gpu/app/faiss_manager.py` | 5 |
|
||||
| L3 — векторный бэкенд (Qdrant + выбор) | `worker-gpu/app/qdrant_manager.py`, `vector_store.py` | 9 |
|
||||
| L4 — LLM-парафраз | `worker-gpu/app/ollama_client.py` | 12 |
|
||||
|
||||
Reference in New Issue
Block a user