# doc-translator

Система автоматического перевода PDF-документов с китайского на русский с использованием LLM.

## Архитектура

**Стек:**
- **Worker**: FastAPI + PyMuPDF (обработка PDF)
- **LLM**: Ollama (DeepSeek)
- **Оркестрация**: n8n (workflow automation)
- **БД**: PostgreSQL
- **Инфраструктура**: Docker Compose

## Что реализовано

### Backend ([`src/worker/app.py`](src/worker/app.py))
- Извлечение текста из PDF по блокам с координатами
- Перевод текстовых сегментов через LLM
- Сборка переведённого PDF с сохранением структуры
- API endpoint `/process-document` для обработки документов

### База данных
- **documents** - метаданные загруженных файлов, статусы обработки
- **translations** - история переводов с метриками
- **prompts** - версионирование промптов для LLM
- **golden_examples** - эталонные переводы для оценки качества
- **prompt_runs** - результаты A/B тестирования промптов

### Инфраструктура ([`docker/docker-compose.yml`](docker/docker-compose.yml))
- PostgreSQL (порт 5432)
- Ollama (порт 11434)
- Worker API (порт 8000)
- n8n (порт 5678)

### Промпты ([`config/prompts/`](config/prompts/))
- `zh_ru_tech.v1` - базовый промпт для технической документации
- Версионирование через БД для A/B тестирования

## Что планируется

### Evaluation система ([`src/evaluation/`](src/evaluation/))
- Автоматическая оценка качества переводов (BLEU, LLM-as-judge)
- Сравнение версий промптов на golden examples
- Метрики и дашборды

### Frontend ([`src/app/`](src/app/))
- Web-интерфейс для загрузки документов
- Мониторинг статуса обработки
- Просмотр результатов

### Workflow ([`docker/n8n/`](docker/n8n/))
- Автоматизация пайплайна: загрузка → обработка → оценка
- Интеграция с внешними системами
- Уведомления о завершении

### Дополнительно
- Миграции БД ([`migrations/`](migrations/))
- Тесты ([`tests/`](tests/))
- Утилиты и скрипты ([`scripts/`](scripts/), [`src/utils/`](src/utils/))

## Быстрый старт

```bash
# Запуск инфраструктуры
cd docker
docker-compose up -d

# Инициализация БД
docker exec -i doc_translator_db psql -U doc_user -d doc_translator < db/init.sql
docker exec -i doc_translator_db psql -U doc_user -d doc_translator < db/prompts.sql
docker exec -i doc_translator_db psql -U doc_user -d doc_translator < db/documents.sql

# Загрузка модели в Ollama
docker exec -it doc_translator_ollama ollama pull deepseek-r1:1.5b

# Обработка документа
curl -X POST http://localhost:8000/process-document \
  -H "Content-Type: application/json" \
  -d '{"document_id": 1, "original_path": "/data/input/document.pdf"}'
```

## Структура данных

```
data/
├── input/          # Исходные PDF
├── output/         # Переведённые PDF
└── samples/        # Тестовые примеры
```

## Технические детали

- Извлечение текста: PyMuPDF `get_text("blocks")` с bbox
- Перевод: Ollama API (TODO: интеграция DeepSeek)
- Сборка PDF: наложение переведённого текста на исходные координаты
- Версионирование промптов: таблица `prompts` с флагом `is_active`
