Files
medtech-hackathon/scripts/run_pipeline.py
T
admins 69a9884db5 feat(ingest+поиск): приём ZIP через интерфейс, регистронезависимый поиск, чистка очереди
- Загрузка архива (§4.1): POST /ingest распаковывает ZIP, дораспознаёт и
  догружает прайсы в базу (append). Виджет в админке. Кэш эмбеддингов справочника
  (dict_emb.npy) — догрузка считает только новый файл, эмбеддинги best-effort с
  откатом на fuzzy при сбое Gemini.
- Поиск по name_norm (lowercase): «УЗИ» и «узи» дают одинаковый результат —
  SQLite LIKE не сворачивает регистр для кириллицы.
- Фильтр названий: код-мнемоники («МОЗО.15») больше не попадают в очередь.
- /stats считается из базы — цифры на дашборде обновляются после загрузки.
- Деплой через Dockerfile (зависимости в образе, код монтируется томом).
- ruff: ядро и весь репозиторий проходят проверку.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 11:35:12 +05:00

29 lines
920 B
Python

"""Запуск конвейера на архиве: data/raw → SQLite + отчёт о качестве.
Флаг --vision включает добор трудных PDF через Gemini Vision (медленно).
"""
import json
import sys
from datetime import date
from pathlib import Path
REPO = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(REPO))
from etl.normalize.embedding import GeminiEmbedder # noqa: E402
from etl.pipeline import run # noqa: E402
summary = run(
data_dir=str(REPO / "data/raw"),
db_path=str(REPO / "data/medarchive.db"),
dict_path=str(REPO / "data/reference/dictionary.xlsx"),
embedder=GeminiEmbedder(),
use_vision="--vision" in sys.argv,
today=date(2026, 6, 26),
)
(REPO / "data/quality_report.json").write_text(
json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8"
)
print(json.dumps(summary, ensure_ascii=False, indent=2))